Skip to content

Instantly share code, notes, and snippets.

@writingdeveloper
Created February 8, 2021 01:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save writingdeveloper/77ff896f5a08311c2274469d0a639add to your computer and use it in GitHub Desktop.
Save writingdeveloper/77ff896f5a08311c2274469d0a639add to your computer and use it in GitHub Desktop.
PowerShell Handling Node.js App
const express = require('express');
const bodyParser = require("body-parser");
const path = require("path");
const Base64 = require('js-base64');
const {
exec
} = require('child_process');
const router = express.Router();
router.use(bodyParser.urlencoded({
extended: false
}));
router.use(bodyParser.json());
router.use(express.static(path.join(__dirname, "public")));
/* Database Schema */
const db = require("../lib/db"); // DB Connection Module
const User = require('../lib/models/userModel');
/* GET home page. */
router.get('/', function (req, res, next) {
res.render('index', {
title: 'Express'
});
});
router.get('/admin', async (req, res) => {
try {
User.find({}, (err, result) => {
if (err) throw err;
console.log(result);
res.render('admin', {
dataArray: result
})
})
} catch (error) {
console.log(error);
}
})
router.get('/login', (req, res) => {
User.find({}, (err, result) => {
if (err) throw err;
res.render('login', {
dataArray: result
})
})
})
router.get('/wrongpw', (req, res) => {
User.find({}, (err, result) => {
if (err) throw err;
res.render('wrongpw', {})
})
})
/* Register Process Router */
router.get('/register/:name', (req, res) => {
let name = req.params.name;
console.log(name);
/* Find password with password information */
User.find({
'name': name
}, (err, result) => {
if (err) throw err;
else {
console.log(result);
let password = Base64.decode(result[0].password)
/* MongoDB Update Query */
User.findOneAndUpdate({
'name': name,
}, {
$set: {
registerStatus: '등록완료'
}
}, {
returnNewDocument: true
}, (err, doc) => {
if (err) throw err;
console.log(doc);
})
let cmd = `[System.Console]::OutputEncoding = [System.Text.Encoding]::UTF8\n
Write-Output 'UTF-8 with BOM Encoding으로 작업완료'\n
$Password = ('${password}' | ConvertTo-SecureString -asPlainText -Force)\n
Write-Output '패스워드 데이터 암호화 및 SecureString 변수로 저장완료'\n
New-LocalUser "${name}" -Password $Password -FullName "${name}" -Description "${name}" -PasswordNeverExpires\n
Write-Output 'Local User 그룹에 사용자 정보 등록 완료'\n
Add-LocalGroupMember -Group "${result[0].company}" -Member "${name}"\n
Write-Output 'Local 회사 그룹에 등록 완료'\n
Write-Output '-------------------------------------------'\n
Write-Output '작업이 완료되었습니다'\n`
exec(cmd, {
'shell': 'powershell.exe'
}, (error, stdout, stderr) => {
// do whatever with stdout
console.log(stderr)
res.redirect('/admin')
if (error) throw error;
console.log(stdout)
})
}
})
})
router.post('/login/submit', (req, res) => {
let name = req.body.name;
let password = req.body.password;
let encodedPassword = Base64.encode(password);
console.log(encodedPassword)
User.find({
'name': name,
'password': encodedPassword
}, (err, result) => {
console.log(result)
if (err) {
res.redirect(`/wrongpw`)
} else {
res.redirect(`/information/${result[0].name}`)
}
})
})
router.get(`/information/:name`, (req, res) => {
let name = req.params.name;
User.find({
'name': name
}, (err, dataArray) => {
if (err) throw err;
else {
console.log(dataArray);
res.render('information', {
dataArray
})
}
})
})
/* User information modify Router */
router.post(`/information/:name/modify`, async function (req, res) {
let name = req.params.name;
let newPassword = req.body.password;
let decodedName = decodeURIComponent(name)
console.log(decodedName);
try {
await User.findOneAndUpdate({
'name': decodedName,
}, {
$set: {
password: Base64.encode(newPassword)
}
}, {
returnNewDocument: true
}, (err, doc) => {
if (err) throw err;
console.log(doc);
})
} catch (err) {
throw err;
}
res.redirect(`/information/${decodedName}`)
})
/* 유저 삭제 라우터 (관리자 페이지) */
router.get(`/delete/:name`, (req, res) => {
let name = req.params.name;
// MongoDB remove query
User.deleteOne({
'name': name
}, (err, result) => {
if (err) throw err;
})
let cmd = `[System.Console]::OutputEncoding = [System.Text.Encoding]::UTF8\n
Remove-LocalUser -Name "${name}"\n`
exec(cmd, {
'shell': 'powershell.exe'
}, (error, stdout, stderr) => {
// do whatever with stdout
console.log(stderr)
if (error) throw error;
console.log(stdout)
})
})
/* 유저 등록 라우터 */
router.get(`/success/:name`, (req, res) => {
let name = req.params.name;
console.log(name);
User.find({
'name': name
}, (err, result) => {
if (err) throw err;
console.log(result)
res.render('success', {
name: result[0].name
})
})
})
/* 등록 요청 라우터 */
router.post(`/submit`, async function (req, res) {
let name = req.body.name; // 실제 이름
let password = req.body.password; //패스워드
let passwordCheck = req.body.passwordCheck; // 패스워드 확인
let company = req.body.company; // 소속 회사
let registerStatus = '등록대기중'; // 등록 여부
let registerDate = Date.now(); // 등록 시간
try {
if (password !== passwordCheck) { // 패스워드 폼 일치 확인
res.redirect('/') // 일치하지 않을경우 메인으로 Redirect
} else {
let encodedPassword = Base64.encode(password); // BASE64로 패스워드 암호화
/* 유저 생성 Query */
await User.create({
name,
password: encodedPassword,
company,
registerStatus,
registerDate
}, (err, result) => {
if (err) throw err;
})
res.redirect(`/success/${name}`) // 쿼리 작업 완료시
}
} catch (err) {
throw err;
}
})
module.exports = router;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment