merge-requests/1/merge
parent
abcd6787ca
commit
68f9866c16
@ -0,0 +1,47 @@ |
|||||||
|
import * as db from "./database" |
||||||
|
import * as flags from "flags"; |
||||||
|
import * as config from "config" |
||||||
|
|
||||||
|
db.run(config.database, config.bcrypt); |
||||||
|
|
||||||
|
flags.defineString('add', '', 'User to add'); |
||||||
|
flags.defineString('remove', '', 'User to remove'); |
||||||
|
flags.defineString('mkstreamer', '', 'Give a stream key to a user'); |
||||||
|
flags.defineString('rmstreamer', '', 'Remove a stream key from a user'); |
||||||
|
flags.defineString('password', '', 'password to hash'); |
||||||
|
flags.defineBoolean('admin'); |
||||||
|
flags.defineBoolean('streamer'); |
||||||
|
|
||||||
|
flags.parse(); |
||||||
|
|
||||||
|
if(flags.get('add') !== ''){ |
||||||
|
db.addUser(flags.get('add'), flags.get('password'), flags.get('streamer'), flags.get('admin')).then((result) => { |
||||||
|
if(result) console.log("User added successfully."); |
||||||
|
else console.log("Could not add user. Is the password field empty?"); |
||||||
|
process.exit(); |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
if(flags.get('remove') !== ''){ |
||||||
|
db.rmUser(flags.get('remove')).then((result) => { |
||||||
|
if(result) console.log("User removed successfully."); |
||||||
|
else console.log("Could not remove user."); |
||||||
|
process.exit(); |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
if(flags.get('mkstreamer') !== ''){ |
||||||
|
db.addStreamKey(flags.get('mkstreamer')).then((result) => { |
||||||
|
if(result) console.log("Key added successfully."); |
||||||
|
else console.log("Could not add key."); |
||||||
|
process.exit(); |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
if(flags.get('rmstreamer') !== ''){ |
||||||
|
db.rmStreamKey(flags.get('rmstreamer')).then((result) => { |
||||||
|
if(result) console.log("Key removed successfully."); |
||||||
|
else console.log("Could not remove key."); |
||||||
|
process.exit(); |
||||||
|
}); |
||||||
|
} |
@ -1,26 +1,67 @@ |
|||||||
import * as mysql from "mysql"; |
import * as mysql from "mysql"; |
||||||
import * as bcrypt from "bcrypt"; |
import * as bcrypt from "bcrypt"; |
||||||
|
import * as crypto from "crypto"; |
||||||
|
import { resolve } from "url"; |
||||||
var raw: any; |
var raw: any; |
||||||
var cryptoconfig: object; |
var cryptoconfig: any; |
||||||
|
|
||||||
function run (db: object, bcrypt: object){ |
function run (db: object, bcrypt: object){ |
||||||
raw = mysql.createPool(db); |
raw = mysql.createPool(db); |
||||||
cryptoconfig = bcrypt; |
cryptoconfig = bcrypt; |
||||||
} |
} |
||||||
|
|
||||||
function streamKeyAuth(key: string){ |
async function addUser(name: string, password: string, streamer: boolean, admin: boolean){ |
||||||
; |
//does not respect registration setting in config
|
||||||
|
if(password === '') return false; |
||||||
|
let key: string = ' '; |
||||||
|
if (streamer) key = await genKey(); |
||||||
|
let hash: string = await bcrypt.hash(password, cryptoconfig.saltRounds); |
||||||
|
let dupe = await query('select * from users where username=\''+name+'\''); |
||||||
|
if(dupe[0]) return false; |
||||||
|
//INSERT INTO users (username, password_hash, stream_key, record_flag, is_mod) VALUES ('name', 'hash', 'key', 0, admin);
|
||||||
|
let q: string = 'INSERT INTO users (username, password_hash, stream_key, record_flag, is_mod) VALUES (\''+name+'\', \''+hash+'\', \''+key+'\', 0, '+admin+')'; |
||||||
|
await query(q); |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
async function rmUser(name: string){ |
||||||
|
let exist = await query('select * from users where username=\''+name+'\''); |
||||||
|
if(!exist[0]) return false; |
||||||
|
await query('delete from users where username=\''+name+'\' limit 1'); |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
async function genKey(){ |
||||||
|
let key: string = crypto.randomBytes(10).toString('hex'); |
||||||
|
let result = await query('select * from users where stream_key=\''+key+'\''); |
||||||
|
if(result[0]) return await genKey(); |
||||||
|
else return key; |
||||||
|
} |
||||||
|
|
||||||
|
async function addStreamKey(name: string){ |
||||||
|
let exist = await query('select * from users where username=\''+name+'\''); |
||||||
|
if(!exist[0]) return false; |
||||||
|
let key = await genKey(); |
||||||
|
await query('update users set stream_key=\''+key+'\' where username=\''+name+'\' limit 1'); |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
async function rmStreamKey(name: string){ |
||||||
|
let exist = await query('select * from users where username=\''+name+'\''); |
||||||
|
if(!exist[0]) return false; |
||||||
|
await query('update users set stream_key=\'\' where username=\''+name+'\' limit 1'); |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
async function query(query: string){ |
||||||
|
return new Promise(resolve => raw.query(query, (error, results, fields) => { |
||||||
|
if(error) throw error; |
||||||
|
resolve(results); |
||||||
|
})); |
||||||
} |
} |
||||||
|
|
||||||
async function validatePassword(username: string, password: string){ |
async function validatePassword(username: string, password: string){ |
||||||
raw.connect(); |
; |
||||||
return raw.query('select password_hash from users where username=\''+username+'\' limit 1', (error, results, fields) => { |
|
||||||
if (error) { throw error; } |
|
||||||
return bcrypt.compare(password, results[0].password_hash, (err, result) =>{ |
|
||||||
if (err) { throw err; } |
|
||||||
return result; |
|
||||||
}); |
|
||||||
}) |
|
||||||
} |
} |
||||||
|
|
||||||
export { streamKeyAuth, validatePassword, raw, run }; |
export { query, raw, run, addUser, rmUser, addStreamKey, rmStreamKey }; |
Reference in new issue