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 bcrypt from "bcrypt"; |
||||
import * as crypto from "crypto"; |
||||
import { resolve } from "url"; |
||||
var raw: any; |
||||
var cryptoconfig: object; |
||||
var cryptoconfig: any; |
||||
|
||||
function run (db: object, bcrypt: object){ |
||||
raw = mysql.createPool(db); |
||||
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){ |
||||
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