Created
February 8, 2021 01:01
-
-
Save writingdeveloper/77ff896f5a08311c2274469d0a639add to your computer and use it in GitHub Desktop.
PowerShell Handling Node.js App
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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