Skip to content

Commit

Permalink
Merge pull request #39 from NfoAlex/HashPassword
Browse files Browse the repository at this point in the history
Hash password
  • Loading branch information
NfoAlex committed Jul 4, 2023
2 parents 3c36a88 + ae7a23c commit fed02da
Show file tree
Hide file tree
Showing 4 changed files with 269 additions and 97 deletions.
43 changes: 33 additions & 10 deletions auth.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
//auth.js

const fs = require('fs'); //履歴書き込むため
const bcrypt = require("bcrypt"); //ハッシュ化用
let db = require("./dbControl.js");

//ユーザー認証
let authUser = function authUser(cred) {
let authUser = async function authUser(cred) {
console.log("authUser :: これから確認...");

//データからユーザー名とパスワードを抽出
//データからユーザー名とパスワード(ハッシュ化)を抽出
let username = cred.username;
let password = cred.password;

Expand All @@ -19,8 +20,12 @@ let authUser = function authUser(cred) {
//ユーザー名とパスワードの一致を確認してセッションIDを生成する
if (
db.dataUser.user[index].name === username &&
db.dataUser.user[index].pw === password
(
bcrypt.compare(password, db.dataUser.user[index].pw) || //ハッシュ化とパスワード比較
db.dataUser.user[index].pw === password //一応平文前提でも、そしてハッシュ化する(次期ビルドで削除)
)
) {
//セッションID入れるよう
let _session = "";

//BANされているならそう結果を返す
Expand All @@ -36,8 +41,14 @@ let authUser = function authUser(cred) {
}

let username = db.dataUser.user[index].name; //ユーザー名取得
db.dataUser.user[index].state.session_id = _session; //セッションコードを設定

db.dataUser.user[index].state.session_id = _session; //セッションコードを取得
// !!!! ↓↓次期ビルドで削除↓↓ !!!!
//パスワードが平文保存されているならハッシュ化して保存
if ( db.dataUser.user[index].pw === password ) {
db.dataUser.user[index].pw = await bcrypt.hash(cred.password, 10);

}

//サーバーのJSONファイルを更新
fs.writeFileSync("./user.json", JSON.stringify(db.dataUser, null, 4));
Expand All @@ -62,12 +73,19 @@ let authUser = function authUser(cred) {
}

//パスワードを変更
let changePassword = function changePassword(dat) {
let changePassword = async function changePassword(dat) {
//今のパスワードが一致しないならここで停止
if ( db.dataUser.user[dat.reqSender.userid].pw !== dat.currentPassword ) return -1;
if (
db.dataUser.user[dat.reqSender.userid].pw !== dat.currentPassword && //平文でも比較 次期ビルドで削除
!bcrypt.compare(dat.currentPassword, db.dataUser.user[dat.reqSender.userid].pw)
) {
return -1;
}

let newPassword = await bcrypt.hash(dat.newPassword, 10);

//パスワード変更
db.dataUser.user[dat.reqSender.userid].pw = dat.newPassword;
db.dataUser.user[dat.reqSender.userid].pw = newPassword;
fs.writeFileSync("./user.json", JSON.stringify(db.dataUser, null, 4));

return 1;
Expand Down Expand Up @@ -108,7 +126,7 @@ let authUserBySession = function authUserBySession(cred) {
}

//ユーザーの新規登録、そしてパスワードを返す
let registerUser = function registerUser(dat) { //dat=[0=>name(名前), 1=>key(招待コード)]
let registerUser = async function registerUser(dat) { //dat=[0=>name(名前), 1=>key(招待コード)]
//招待制だったらコードを確認
if ( db.dataServer.registration.invite.inviteOnly && db.dataServer.registration.available ) { //招待制かどうか
//招待コードが一致しているかどうか
Expand All @@ -129,11 +147,16 @@ let registerUser = function registerUser(dat) { //dat=[0=>name(名前), 1=>key(

}

//パスワードを生成
const pwGenerated = generateKey();
//DBに書くためにハッシュ化する
const pwHashed = await bcrypt.hash(pwGenerated, 10);

//DBに登録
db.dataUser.user[newID] = {
"name": dat[0],
"role": "Member",
"pw": generateKey(),
"pw": pwHashed,
"icon": "",
"state": {
"loggedin": false,
Expand All @@ -155,7 +178,7 @@ let registerUser = function registerUser(dat) { //dat=[0=>name(名前), 1=>key(
fs.copyFileSync("./img/default.jpeg", "./img/" + newID + ".jpeg");

//パスワードを返す
return db.dataUser.user[newID].pw;
return pwGenerated;

}

Expand Down
17 changes: 7 additions & 10 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -883,7 +883,7 @@ io.on("connection", (socket) => {
// 認証関連

//認証
socket.on("auth", (key, CLIENT_VERSION) => { //key = "パスワード"
socket.on("auth", async (key, CLIENT_VERSION) => { //key = "パスワード"
console.log("auth :: 受信 ↓");
console.log(key);

Expand All @@ -894,7 +894,7 @@ io.on("connection", (socket) => {

}

let loginAttempt = auth.authUser(key); //ログイン結果
let loginAttempt = await auth.authUser(key); //ログイン結果

//認証結果を元にユーザーをオンラインとして記録する
if ( loginAttempt.result ) {
Expand Down Expand Up @@ -950,7 +950,7 @@ io.on("connection", (socket) => {
});

//パスワードを変更する
socket.on("changePassword", (dat) => {
socket.on("changePassword", async (dat) => {
/*
dat
{
Expand All @@ -967,9 +967,9 @@ io.on("connection", (socket) => {
"newPassword"
];

if ( !checkDataIntegrality(dat, paramRequire, "changeProfileSecurity") ) return -1
if ( !checkDataIntegrality(dat, paramRequire, "changePassword") ) return -1

let result = auth.changePassword(dat);
let result = await auth.changePassword(dat);

//パスワードの変更結果を送信
socket.emit("changePasswordResult", result);
Expand Down Expand Up @@ -1047,9 +1047,6 @@ io.on("connection", (socket) => {

}

//このsocketのIDのユーザーIDを空に
//socketOnline[socket.id] = "";

//ユーザーIDの接続数が1以下(エラー回避用)ならオンラインユーザーJSONから削除、そうじゃないなら減算するだけ
if ( userOnline[dat.reqSender.userid] >= 2 ) {
userOnline[dat.reqSender.userid] -= 1;
Expand All @@ -1070,9 +1067,9 @@ io.on("connection", (socket) => {
});

//新規登録
socket.on("register", (dat) => {
socket.on("register", async (dat) => {
console.log("register :: 登録しようとしてる", dat);
let key = auth.registerUser(dat); //DBにユーザーを登録、パスワードの取得
let key = await auth.registerUser(dat); //DBにユーザーを登録、パスワードの取得

//返り値が-1じゃないなら
if ( key !== -1 ) {
Expand Down
Loading

0 comments on commit fed02da

Please sign in to comment.