From db8d9dfe72f3e881948311b3ea292f2072eb8edc Mon Sep 17 00:00:00 2001 From: knotteye Date: Thu, 30 Jul 2020 00:45:08 -0500 Subject: [PATCH] Add API function for getting a user's configuration. --- docs/REST.md | 33 ++++++++++++++++++++------------- src/api.ts | 19 ++++++++++++++++++- src/http.ts | 37 +++++++++++++++++++++++++++++++------ 3 files changed, 69 insertions(+), 20 deletions(-) diff --git a/docs/REST.md b/docs/REST.md index 0c12b71..32087f8 100644 --- a/docs/REST.md +++ b/docs/REST.md @@ -51,22 +51,24 @@ play from: rtmp://example.com/live/username or https://example.com/live/username ### /api/users/live/ +UNFINISHED + Returns the usernames and stream titles of 10 users who are currently streaming Method: GET Authentication: no -Parameters: none +Parameters: num (optional), sort (optional) Response: Returns an array of objects containing the username and title of each stream. Returns an empty array if no one is streaming. Example: `[{username:"foo", title:"bar"}]` -### /api/users/live/:num +### /api/users/all -Same as above, with number indicated the number of users to list. Maximum of 50. +Same as above, but returns all users regardless of whether they are streaming. Also unfinished. @@ -140,7 +142,7 @@ Method: POST Authentication: yes -Paramters: A string array of the names of vods to be deleted. +Paramters: A string array of the names of vods to be deleted. (Do not include the file extension); Response: Returns `{error: "error code"}` or `{success: ""}` @@ -170,7 +172,7 @@ Parameters: A valid JWT cookie. No other parameters. Response: Returns `{error: "error code"}` or `{success: "new_stream_key"}` -### /api/:user/vods/list +### /api/:user/vods Get a list of the named users VODs @@ -178,7 +180,7 @@ Method: GET Authentication: no -Parameters: none +Parameters: user Response: Returns an array of VODs with the format `[{"name":"yote.mp4"},{"name":"yeet.mp4"}]` @@ -186,17 +188,22 @@ Notes: VODs are always available at http://domain.com/publicEndpoint/username/fi +## /api/:user/config -## Not Yet Implemented +Method: GET -#### /api/:user/info +Authentication: optional -List bio, stream title. If authenticated, list all settings. +Parameters: user -#### /api/user/streamkey/current +Response: Returns a JSON object with available information about the user. If the user is authenticated and searching for their own information, will return all available information. Otherwise it will return only the stream title and bio. In the case of searching for a user that does not exist, the returned object will contain only the username searched for. -Return current stream key +Example: `{username: "foo", title: "bar", about: "This is an example bio"}` -#### /api/users/live -Paging and sorting coming Soon(tm) \ No newline at end of file + +## Not Yet Implemented + +#### /api/user/streamkey/current + +Return current stream key \ No newline at end of file diff --git a/src/api.ts b/src/api.ts index a2bbb89..259dffd 100644 --- a/src/api.ts +++ b/src/api.ts @@ -69,4 +69,21 @@ async function deleteVODs(vodlist: Array, username: string): 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 FROM user_meta WHERE username='+db.raw.escape(username)); + if(usermeta[0]) Object.assign(t, users[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]); + } + else { + let um = await db.query('SELECT title,about FROM user_meta WHERE username='+db.raw.escape(username)); + if(um[0]) Object.assign(t, um[0]); + } + return t; +} + +export { register, update, changepwd, changesk, login, updateChat, deleteVODs, getConfig }; \ No newline at end of file diff --git a/src/http.ts b/src/http.ts index 279d105..9cbdafb 100644 --- a/src/http.ts +++ b/src/http.ts @@ -168,15 +168,23 @@ async function initAPI() { ); }); app.get('/api/users/live', (req, res) => { + if(req.params.sort) { + + } + if(req.params.num){ + + } db.query('select username,title from user_meta where live=1 limit 10;').then((result) => { res.send(result); }); }); - app.get('/api/users/live/:num', (req, res) => { - if(req.params.num > 50) req.params.num = 50; - db.query('select username,title from user_meta where live=1 limit '+req.params.num+';').then((result) => { - res.send(result); - }); + app.get('/api/users/all', (req, res) => { + if(req.params.sort) { + + } + if(req.params.num) { + + } }); app.post('/api/register', (req, res) => { api.register(req.body.username, req.body.password, req.body.confirm).then( (result) => { @@ -312,7 +320,7 @@ async function initAPI() { }); } }); - app.get('/api/:user/vods/list', (req, res) => { + app.get('/api/:user/vods', (req, res) => { readdir('./site/live/'+req.params.user, {withFileTypes: true} , (err, files) => { if(err) { res.send([]); @@ -322,6 +330,23 @@ async function initAPI() { res.send(list); }); }); + app.get('/api/:user/config', (req, res) => { + if(req.cookies.Authorization) validToken(req.cookies.Authorization).then(r => { + if(r && r['username'] === req.params.user) { + api.getConfig(req.params.user, true).then(re => { + res.send(JSON.stringify(re)); + }); + return; + } + api.getConfig(req.params.user).then(re => { + res.send(JSON.stringify(re)); + }); + return; + }); + api.getConfig(req.params.user).then(r => { + res.send(JSON.stringify(r)); + }); + }); } async function initSite(openReg) {