import * as db from "./database"; import * as base64id from "base64id"; import { config } from "./config"; import {unlink} from "fs"; async function register(name: string, password: string, confirm: string, invite?: boolean): Promise { if(!config['satyr']['registration'] && !invite) return {"error":"registration disabled"}; if(name.includes(';') || name.includes(' ') || name.includes('\'')) return {"error":"illegal characters"}; if(password !== confirm) return {"error":"mismatched passwords"}; for(let i=0;i{ await db.query('UPDATE chat_integration SET xmpp='+db.raw.escape(fields['xmpp'])+', discord='+db.raw.escape(fields['discord'])+', irc='+db.raw.escape(fields['irc'])+', twitch='+db.raw.escape(fields['twitch'])+' WHERE username='+db.raw.escape(fields['name'])); return {success:""}; } async function changepwd(name: string, password: string, newpwd: string): Promise{ if(!name || !password || !newpwd) return {"error":"Insufficient parameters"}; let auth: boolean = await db.validatePassword(name, password); if(!auth) return {"error":"Username or Password Incorrect"}; let newhash: string = await db.hash(newpwd); await db.query('UPDATE users set password_hash='+db.raw.escape(newhash)+'where username='+db.raw.escape(name)+' limit 1'); return {success:""}; } async function changesk(name: string): Promise{ let key: string = await db.genKey(); await db.query('UPDATE users set stream_key='+db.raw.escape(key)+'where username='+db.raw.escape(name)+' limit 1'); return {success: key}; } async function login(name: string, password: string){ if(!name || !password) return {"error":"Insufficient parameters"}; let auth: boolean = await db.validatePassword(name, password); if(!auth) return {"error":"Username or Password Incorrect"}; return false; } async function deleteVODs(vodlist: Array, username: string): Promise{ for(var i=0;i{}); } return {success: ""}; } async function getConfig(username: string, all?: boolean): Promise{ let t = {username: username}; if(all) { let users = await db.query('SELECT stream_key,record_flag FROM users WHERE username='+db.raw.escape(username)); if(users[0]) Object.assign(t, users[0]); let usermeta = await db.query('SELECT title,about,live,viewers FROM user_meta WHERE username='+db.raw.escape(username)); if(usermeta[0]) Object.assign(t, usermeta[0]); let ci = await db.query('SELECT irc,xmpp,twitch,discord FROM chat_integration WHERE username='+db.raw.escape(username)); if(ci[0]) Object.assign(t, ci[0]); let tw = await db.query('SELECT enabled,twitch_key FROM twitch_mirror WHERE username='+db.raw.escape(username)); if(tw[0]) t['twitch_mirror'] = Object.assign({}, tw[0]); } else { let um = await db.query('SELECT title,about,live,viewers FROM user_meta WHERE username='+db.raw.escape(username)); if(um[0]) Object.assign(t, um[0]); } return t; } async function genInvite(): Promise{ var invitecode: string = base64id.generateId(); await db.query('INSERT INTO invites (code) VALUES (\"'+invitecode+'\")'); return invitecode; } async function validInvite(code: string): Promise{ if(typeof(code) !== "string" || code === "") return false; var result = await db.query('SELECT code FROM invites WHERE code='+db.raw.escape(code)); if(!result[0] || result[0]['code'] !== code) return false; return true; } async function useInvite(code: string): Promise{ if(validInvite(code)) await db.query('DELETE FROM invites WHERE code='+db.raw.escape(code)); } export { register, update, changepwd, changesk, login, updateChat, deleteVODs, getConfig, genInvite, useInvite, validInvite };