REST-endpoints and readme

This commit is contained in:
Kasper Rynning-Tønnesen
2018-03-01 13:09:44 +01:00
parent 2e8ef6739c
commit 97e06e3726
7 changed files with 588 additions and 30 deletions

View File

@@ -2,57 +2,197 @@
Under ``` /server/apps/ ```, there are two files, ``` admin.js ``` and ``` client.js ```.``` admin.js ``` are for the adminpanel, and ``` client.js ``` are for zoff itself.
## REST
Add song
```
POST /api/list/:channel_name/:video_id
{
"title": TITLE,
"duration": END_TIME - START_TIME,
"end_time": END_TIME,
"start_time": START_TIME,
"adminpass": PASSWORD,
"userpass": USER_PASSWORD
}
Returns 403 for bad authentication
Returns 409 if the song exists
Returns 200 and the added song object if successful
```
Delete song
```
DELETE /api/list/:channel_name/:video_id
{
"adminpass": PASSWORD,
"userpass": USER_PASSWORD
}
Returns 403 for bad authentication
Returns 404 if the song doesnt exist
Returns 200 if successful
```
Vote on song
```
PUT /api/list/:channel_name/:video_id
{
"adminpass": PASSWORD,
"userpass": USER_PASSWORD
}
Returns 403 for bad authentication
Returns 404 if the song doesnt exist
Returns 409 if you've already voted on that song
Returns 200 and the added song object if successful
```
Change channel configurations
```
PUT /api/conf/:channel_name
{
"userpass": USER_PASSWORD,
"adminpass": PASSWORD,
"voting": BOOLEAN,
"addsongs": BOOLEAN,
"longsongs": BOOLEAN,
"frontpage": BOOLEAN (if you want to set userpassword, this MUST be false for it to work),
"allvideos": BOOLEAN,
"removeplay": BOOLEAN,
"skipping": BOOLEAN,
"shuffling": BOOLEAN,
"userpass_changed": BOOLEAN (this must be true if you want to keep the userpassword you're sending)
}
Returns 403 for bad authentication
Returns 404 if the list doesn't exist
Returns 200 and the newly added configuration if successful
```
Still to come: SKIP and SHUFFLE RESTApi calls..
## Events
### To server
```
// Tells the server the song is clientside
'end', {id: video_id, channel: channel_name, pass: channel_pass}
// Tells the server the song is over
'end', {
id: video_id,
channel: channel_name,
pass: channel_pass
}
// Asks server where in the song it should be
'pos', {channel: channel_name, pass: channel_pass}
'pos', {
channel: channel_name,
pass: channel_pass
}
// Tells the server the client wants the list
'list', {channel: channel_name, pass: channel_pass, version: system_version (now 3)}
'list', {
channel: channel_name,
pass: channel_pass,
version: system_version (now 3)
}
// Sends info about a song the client wants to add
'add', {id: VIDEO_ID, title: VIDEO_TITLE, adminpass: sha256(PASSWORD), duration: VIDEO_DURATION, list: channel_name, playlist: true_if_importing_playlist, num: current_number_of_sending_songs, total: total_number_of_sending_songs, pass: channel_pass}
'add', {
id: VIDEO_ID,
title: VIDEO_TITLE,
adminpass: AES-CBC-Pkcs7 with Base64 IV(PASSWORD),
duration: VIDEO_DURATION,
list: channel_name,
playlist: true_if_importing_playlist,
num: current_number_of_sending_songs,
total: total_number_of_sending_songs,
pass: channel_pass
}
// Tells the server to disconnect the user from the current channel, is used for remote controlling on the host side
'change_channel', {channel: channel_name}
'change_channel', {
channel: channel_name
}
// Sends chat text to all chat
'all,chat', {channel: channel_name, data: input}
'all,chat', {
channel: channel_name,
data: input
}
// Sends chat text to channelchat
'chat',{channel: channel_name, data: input, pass: channel_pass}
'chat',{
channel: channel_name,
data: input,
pass: channel_pass
}
// Sends info about song the user wants to vote on. If VOTE_TYPE is del, its deleting the song, if its pos, its just voting
'vote', {channel: CHANNEL_NAME, id: VIDEO_ID, type: VOTE_TYPE, adminpass: PASSWORD}
'vote', {
channel: CHANNEL_NAME,
id: VIDEO_ID,
type: VOTE_TYPE,
adminpass: AES-CBC-Pkcs7 with Base64 IV(PASSWORD)
}
// Sends skip message to server
'skip', {pass: adminpass, id:video_id, channel: chan, userpass: channel_pass}
'skip', {
pass: AES-CBC-Pkcs7 with Base64 IV(PASSWORD),
id:video_id,
channel: chan,
userpass: channel_pass
}
// Sends password for instant log in to server
'password', {password: PASSWORD, channel: CHANNEL_NAME, oldpass: old_pass_if_changing_password}
'password', {
password: PASSWORD,
channel: CHANNEL_NAME,
oldpass: old_pass_if_changing_password
}
// Sends message to the host channel for play
'id', {id: CHANNEL_ID, type: "play", value: "mock"}
'id', {
id: CHANNEL_ID,
type: "play",
value: "mock"
}
// Sends message to the host channel for pause
'id', {id: CHANNEL_ID, type: "pause", value: "mock"}
'id', {
id: CHANNEL_ID,
type: "pause",
value: "mock"
}
// Sends message to the host channel for skip
'id', {id: CHANNEL_ID, type: "skip", value: "mock"}
'id', {
id: CHANNEL_ID,
type: "skip",
value: "mock"
}
// Sends message to the host channel to change volume
'id', {id: CHANNEL_ID, type: "volume", value: VALUE}
'id', {
id: CHANNEL_ID,
type: "volume",
value: VALUE
}
// Sends message to the host channel to change channel
'id', {id: CHANNEL_ID, type: "channel", value: NEW_CHANNEL_NAME}
'id', {
id: CHANNEL_ID,
type: "channel",
value: NEW_CHANNEL_NAME
}
// Sends a video that triggered an error
'error_video', {channel: CHANNE_NAME, id: VIDEO_ID, title: VIDEO_TITLE}
'error_video', {
channel: CHANNE_NAME,
id: VIDEO_ID,
title: VIDEO_TITLE
}
```
### From server
@@ -60,36 +200,65 @@ Under ``` /server/apps/ ```, there are two files, ``` admin.js ``` and ``` clien
// Receives a string from server for what type of toast to be triggered
'toast', STRING
// Receives the password for the channel if the user sent the right in the first place
'pw', STRING
// Receives a boolean if the password was correct
'pw', BOOLEAN
// Receives configuration array from server
'conf', [ARRAY]
// Receives chat message from allchat
'chat.all', {from: name, msg: message, channel: channel, icon: icon_src}
'chat.all', {
from: name,
msg: message,
channel: channel,
icon: icon_src
}
// Receives chat-history for all and for current channel
'chat_history', {
all: BOOLEAN (if true, it is for all-chat),
data: CHAT_HISTORY
}
// Receives chat message from channelchat
'chat', {from: name, msg: message, icon: icon_src}
'chat', {
from: name,
msg: message,
icon: icon_src
}
// Receives the ID of the current client, used for remote listening
'id', STRING
// Receives the messages sent on CHANNEL_ID above
id, {type: STRING, value: VALUE}
id, {
type: STRING,
value: VALUE
}
// Receives updates from channel. type is one of the following: list, added, deleted, vote, song_change, changed_values (see further down for better explanation here)
'channel', {type: TYPE, value: value, time: time_of_occurence}
'channel', {
type: TYPE,
value: value,
time: time_of_occurence
}
// Receives message from the server that its ready to send the playlist and info
'get_list'
// Receives array of now playing song. Is triggered on song-change
'np', {np: NOW_PLAYING, conf: CONFIGURATION, time: SERVER_TIME}
'np', {
np: NOW_PLAYING,
conf: CONFIGURATION,
time: SERVER_TIME
}
// Receives number of viewers on the current channel
'viewers', VALUE
// Receives a newly updated video, that was checked for errors (song_generated contains .id which is the current id of the video, and a .new_id for the new video to change the video to)
'channel', {type: "changed_values", value: song_generated}
'channel', {
type: "changed_values",
value: song_generated
}
```