getting user; mod: avatar, profileBg, profile now working
This commit is contained in:
+149
-138
@@ -66,29 +66,24 @@
|
||||
<div id="log"></div>
|
||||
|
||||
<div id="btn-row">
|
||||
<button onclick="showForm('new-user')">POST /new/user</button>
|
||||
<button onclick="showForm('new-connection')">POST /new/connection</button>
|
||||
<button onclick="showForm('new-token')">POST /new/token</button>
|
||||
<button onclick="showForm('new-group')">POST /new/group</button>
|
||||
<button onclick="showForm('mod-user-appearance')">POST /mod/user/appearence</button>
|
||||
<button onclick="showForm('mod-user-about')">POST /mod/user/about</button>
|
||||
<button onclick="showForm('accept-connection')">POST /mod/connection/accept</button>
|
||||
<button onclick="showForm('add-users')">POST /mod/group/addusers</button>
|
||||
<button onclick="showForm('remove-users')">POST /mod/group/removeusers</button>
|
||||
<button onclick="showForm('group-color')">POST /mod/group/color</button>
|
||||
<button onclick="showForm('group-owner')">POST /mod/group/owner</button>
|
||||
<button onclick="showForm('get-groups')">POST /get/groups</button>
|
||||
<button onclick="showForm('get-connections')">POST /get/connections</button>
|
||||
<button onclick="showForm('get-members')">POST /get/group/members</button>
|
||||
<button onclick="showForm('del-user')" class="warn">POST /del/user</button>
|
||||
<button onclick="showForm('del-group')" class="warn">POST /del/group</button>
|
||||
<button onclick="showForm('del-connection')" class="warn">POST /del/connection</button>
|
||||
<button onclick="showForm('get-connection-messages')">POST /get/connection/messages</button>
|
||||
<button onclick="showForm('msg-user')">POST /msg/user</button>
|
||||
<button onclick="showForm('msg-group')">POST /msg/group</button>
|
||||
<button onclick="showForm('file-upload')">POST /new/file</button>
|
||||
<button onclick="showForm('file-download')">POST /get/file</button>
|
||||
<button onclick="showForm('websocket')">WS /ws</button>
|
||||
<button data-form="new-user" onclick="showForm('new-user')">POST /new/user</button>
|
||||
<button data-form="new-token" onclick="showForm('new-token')">POST /new/token</button>
|
||||
<button data-form="new-connection" onclick="showForm('new-connection')">POST /new/connection</button>
|
||||
<button data-form="file-upload" onclick="showForm('file-upload')">POST /new/file</button>
|
||||
<button data-form="mod-user-profile" onclick="showForm('mod-user-profile')">POST /mod/user/profile</button>
|
||||
<button data-form="mod-user-avatar" onclick="showForm('mod-user-avatar')">POST /mod/user/avatar</button>
|
||||
<button data-form="mod-user-profilebg" onclick="showForm('mod-user-profilebg')">POST /mod/user/profilebg</button>
|
||||
<button data-form="mod-connection-elevate" onclick="showForm('mod-connection-elevate')">POST /mod/connection/elevate</button>
|
||||
<button data-form="get-user" onclick="showForm('get-user')">POST /get/user</button>
|
||||
<button data-form="get-connections" onclick="showForm('get-connections')">POST /get/connections</button>
|
||||
<button data-form="get-connection-messages" onclick="showForm('get-connection-messages')">POST /get/connection/messages</button>
|
||||
<button data-form="file-download" onclick="showForm('file-download')">POST /get/file</button>
|
||||
<button data-form="get-user-avatar" onclick="showForm('get-user-avatar')">POST /get/user/avatar</button>
|
||||
<button data-form="get-user-profilebg" onclick="showForm('get-user-profilebg')">POST /get/user/profilebg</button>
|
||||
<button data-form="del-user" class="warn" onclick="showForm('del-user')">POST /del/user</button>
|
||||
<button data-form="del-connection" class="warn" onclick="showForm('del-connection')">POST /del/connection</button>
|
||||
<button data-form="msg-user" onclick="showForm('msg-user')">POST /msg/user</button>
|
||||
<button data-form="websocket" onclick="showForm('websocket')">WS /ws</button>
|
||||
</div>
|
||||
|
||||
<div id="form-panel">
|
||||
@@ -116,14 +111,6 @@
|
||||
],
|
||||
submit: () => httpPost('/new/user', { username:'nu-username', password:'nu-password', color:'nu-color' })
|
||||
},
|
||||
'new-connection': {
|
||||
title: 'POST /new/connection — send connection request',
|
||||
fields: [
|
||||
{ id: 'nconn-token', label: 'token', ph: '' },
|
||||
{ id: 'nconn-recipient', label: 'recipient', ph: 'uint32' },
|
||||
],
|
||||
submit: () => httpPost('/new/connection', { token:'nconn-token', recipient:'nconn-recipient' })
|
||||
},
|
||||
'new-token': {
|
||||
title: 'POST /new/token — login / get token',
|
||||
fields: [
|
||||
@@ -132,82 +119,59 @@
|
||||
],
|
||||
submit: () => httpPost('/new/token', { username:'nt-username', password:'nt-password' })
|
||||
},
|
||||
'new-group': {
|
||||
title: 'POST /new/group — create group',
|
||||
'new-connection': {
|
||||
title: 'POST /new/connection — send connection request',
|
||||
fields: [
|
||||
{ id: 'ng-token', label: 'token', ph: '' },
|
||||
{ id: 'ng-name', label: 'name', ph: 'optional, default: Best group ever' },
|
||||
{ id: 'ng-color', label: 'color', ph: 'R,G,B optional', hint: 'R,G,B' },
|
||||
{ id: 'ng-enableUserColors', label: 'enableUserColors', ph: '1 to enable (optional)' },
|
||||
{ id: 'nconn-token', label: 'token', ph: '' },
|
||||
{ id: 'nconn-recipient', label: 'recipient', ph: 'uint32' },
|
||||
],
|
||||
submit: () => httpPost('/new/group', { token:'ng-token', name:'ng-name', color:'ng-color', enableUserColors:'ng-enableUserColors' })
|
||||
submit: () => httpPost('/new/connection', { token:'nconn-token', recipient:'nconn-recipient' })
|
||||
},
|
||||
'mod-user-appearance': {
|
||||
title: 'POST /mod/user/appearence — change user color',
|
||||
'mod-user-profile': {
|
||||
title: 'POST /mod/user/profile — update profile',
|
||||
fields: [
|
||||
{ id: 'mua-token', label: 'token', ph: '' },
|
||||
{ id: 'mua-color', label: 'color', ph: '255,100,50', hint: 'R,G,B' },
|
||||
{ id: 'mup-token', label: 'token', ph: '' },
|
||||
{ id: 'mup-pronouns', label: 'pronouns', ph: 'optional' },
|
||||
{ id: 'mup-description', label: 'description', ph: 'optional' },
|
||||
{ id: 'mup-color', label: 'color', ph: '255,100,50 optional', hint: 'R,G,B' },
|
||||
],
|
||||
submit: () => httpPost('/mod/user/appearence', { token:'mua-token', color:'mua-color' })
|
||||
submit: () => httpPost('/mod/user/profile', { token:'mup-token', pronouns:'mup-pronouns', description:'mup-description', color:'mup-color' })
|
||||
},
|
||||
'mod-user-about': {
|
||||
title: 'POST /mod/user/about — change user pronouns',
|
||||
fields: [
|
||||
{ id: 'mub-token', label: 'token', ph: '' },
|
||||
{ id: 'mub-pronouns', label: 'pronouns', ph: '2–25 chars' },
|
||||
],
|
||||
submit: () => httpPost('/mod/user/about', { token:'mub-token', pronouns:'mub-pronouns' })
|
||||
'mod-user-avatar': {
|
||||
title: 'POST /mod/user/avatar — set avatar image (token in header)',
|
||||
renderCustom: () => `
|
||||
<div class="field"><label>token</label><input id="mua-token" placeholder=""></div>
|
||||
<div class="field"><label>file</label><input id="mua-file" type="file"></div>
|
||||
<div class="form-actions">
|
||||
<button class="send" onclick="submitAvatarUpload()">Send</button>
|
||||
</div>
|
||||
`
|
||||
},
|
||||
'accept-connection': {
|
||||
title: 'POST /mod/connection/accept — accept connection request',
|
||||
fields: [
|
||||
{ id: 'ca-token', label: 'token', ph: '' },
|
||||
{ id: 'ca-connectionid', label: 'connectionid', ph: 'UUID' },
|
||||
],
|
||||
submit: () => httpPost('/mod/connection/accept', { token:'ca-token', connectionid:'ca-connectionid' })
|
||||
'mod-user-profilebg': {
|
||||
title: 'POST /mod/user/profilebg — set profile background (token in header)',
|
||||
renderCustom: () => `
|
||||
<div class="field"><label>token</label><input id="mpb-token" placeholder=""></div>
|
||||
<div class="field"><label>file</label><input id="mpb-file" type="file"></div>
|
||||
<div class="form-actions">
|
||||
<button class="send" onclick="submitProfileBgUpload()">Send</button>
|
||||
</div>
|
||||
`
|
||||
},
|
||||
'add-users': {
|
||||
title: 'POST /mod/group/addusers — add users (owner only)',
|
||||
'mod-connection-elevate': {
|
||||
title: 'POST /mod/connection/elevate — elevate connection',
|
||||
fields: [
|
||||
{ id: 'au-token', label: 'token', ph: '' },
|
||||
{ id: 'au-groupid', label: 'groupid', ph: 'uint32' },
|
||||
{ id: 'au-users', label: 'users', ph: 'id1,id2,id3', hint: 'csv of uint32' },
|
||||
{ id: 'mce-token', label: 'token', ph: '' },
|
||||
{ id: 'mce-connectionid', label: 'connectionid', ph: 'UUID' },
|
||||
],
|
||||
submit: () => httpPost('/mod/group/addusers', { token:'au-token', groupid:'au-groupid', users:'au-users' })
|
||||
submit: () => httpPost('/mod/connection/elevate', { token:'mce-token', connectionid:'mce-connectionid' })
|
||||
},
|
||||
'remove-users': {
|
||||
title: 'POST /mod/group/removeusers — remove users (owner only)',
|
||||
'get-user': {
|
||||
title: 'POST /get/user — get user info',
|
||||
fields: [
|
||||
{ id: 'ru-token', label: 'token', ph: '' },
|
||||
{ id: 'ru-groupid', label: 'groupid', ph: 'uint32' },
|
||||
{ id: 'ru-users', label: 'users', ph: 'id1,id2,id3', hint: 'csv of uint32' },
|
||||
{ id: 'gu-token', label: 'token', ph: '' },
|
||||
{ id: 'gu-targetid', label: 'targetid', ph: 'uint32' },
|
||||
],
|
||||
submit: () => httpPost('/mod/group/removeusers', { token:'ru-token', groupid:'ru-groupid', users:'ru-users' })
|
||||
},
|
||||
'group-color': {
|
||||
title: 'POST /mod/group/color — change color (owner only)',
|
||||
fields: [
|
||||
{ id: 'gc-token', label: 'token', ph: '' },
|
||||
{ id: 'gc-groupid', label: 'groupid', ph: 'uint32' },
|
||||
{ id: 'gc-color', label: 'color', ph: '255,100,50', hint: 'R,G,B' },
|
||||
],
|
||||
submit: () => httpPost('/mod/group/color', { token:'gc-token', groupid:'gc-groupid', color:'gc-color' })
|
||||
},
|
||||
'group-owner': {
|
||||
title: 'POST /mod/group/owner — change owner (owner only)',
|
||||
fields: [
|
||||
{ id: 'go-token', label: 'token', ph: '' },
|
||||
{ id: 'go-groupid', label: 'groupid', ph: 'uint32' },
|
||||
{ id: 'go-newOwner', label: 'newOwner', ph: 'username of new owner' },
|
||||
],
|
||||
submit: () => httpPost('/mod/group/owner', { token:'go-token', groupid:'go-groupid', newOwner:'go-newOwner' })
|
||||
},
|
||||
'get-groups': {
|
||||
title: "POST /get/groups — get user's groups (no members)",
|
||||
fields: [
|
||||
{ id: 'gg-token', label: 'token', ph: '' },
|
||||
],
|
||||
submit: () => httpPost('/get/groups', { token:'gg-token' })
|
||||
submit: () => httpPost('/get/user', { token:'gu-token', targetid:'gu-targetid' })
|
||||
},
|
||||
'get-connections': {
|
||||
title: "POST /get/connections — get user's connections",
|
||||
@@ -216,37 +180,6 @@
|
||||
],
|
||||
submit: () => httpPost('/get/connections', { token:'gconn-token' })
|
||||
},
|
||||
'get-members': {
|
||||
title: 'POST /get/group/members — get group member IDs',
|
||||
fields: [
|
||||
{ id: 'gm-token', label: 'token', ph: '' },
|
||||
{ id: 'gm-group', label: 'group', ph: 'group ID (uint32)' },
|
||||
],
|
||||
submit: () => httpPost('/get/group/members', { token:'gm-token', group:'gm-group' })
|
||||
},
|
||||
'del-user': {
|
||||
title: 'POST /del/user — delete own account',
|
||||
fields: [
|
||||
{ id: 'du-token', label: 'token', ph: '' },
|
||||
],
|
||||
submit: () => httpPost('/del/user', { token:'du-token' })
|
||||
},
|
||||
'del-group': {
|
||||
title: 'POST /del/group — delete group (owner only)',
|
||||
fields: [
|
||||
{ id: 'dg-token', label: 'token', ph: '' },
|
||||
{ id: 'dg-groupid', label: 'groupid', ph: 'uint32' },
|
||||
],
|
||||
submit: () => httpPost('/del/group', { token:'dg-token', groupid:'dg-groupid' })
|
||||
},
|
||||
'del-connection': {
|
||||
title: 'POST /del/connection — delete a connection',
|
||||
fields: [
|
||||
{ id: 'dc-token', label: 'token', ph: '' },
|
||||
{ id: 'dc-connectionid', label: 'connectionid', ph: 'UUID' },
|
||||
],
|
||||
submit: () => httpPost('/del/connection', { token:'dc-token', connectionid:'dc-connectionid' })
|
||||
},
|
||||
'get-connection-messages': {
|
||||
title: 'POST /get/connection/messages — fetch message history',
|
||||
fields: [
|
||||
@@ -257,6 +190,41 @@
|
||||
],
|
||||
submit: () => httpPost('/get/connection/messages', { token:'gcm-token', connectionid:'gcm-connectionid', messages:'gcm-messages', before:'gcm-before' })
|
||||
},
|
||||
'get-user-avatar': {
|
||||
title: 'POST /get/user/avatar — get avatar URL (token in header)',
|
||||
renderCustom: () => `
|
||||
<div class="field"><label>token</label><input id="gua-token" placeholder=""></div>
|
||||
<div class="field"><label>userid</label><input id="gua-userid" placeholder="uint32"></div>
|
||||
<div class="form-actions">
|
||||
<button class="send" onclick="submitGetUserAvatar()">Send</button>
|
||||
</div>
|
||||
`
|
||||
},
|
||||
'get-user-profilebg': {
|
||||
title: 'POST /get/user/profilebg — get profile background URL (token in header)',
|
||||
renderCustom: () => `
|
||||
<div class="field"><label>token</label><input id="gpb-token" placeholder=""></div>
|
||||
<div class="field"><label>userid</label><input id="gpb-userid" placeholder="uint32"></div>
|
||||
<div class="form-actions">
|
||||
<button class="send" onclick="submitGetUserProfileBg()">Send</button>
|
||||
</div>
|
||||
`
|
||||
},
|
||||
'del-user': {
|
||||
title: 'POST /del/user — delete own account',
|
||||
fields: [
|
||||
{ id: 'du-token', label: 'token', ph: '' },
|
||||
],
|
||||
submit: () => httpPost('/del/user', { token:'du-token' })
|
||||
},
|
||||
'del-connection': {
|
||||
title: 'POST /del/connection — delete a connection',
|
||||
fields: [
|
||||
{ id: 'dc-token', label: 'token', ph: '' },
|
||||
{ id: 'dc-connectionid', label: 'connectionid', ph: 'UUID' },
|
||||
],
|
||||
submit: () => httpPost('/del/connection', { token:'dc-token', connectionid:'dc-connectionid' })
|
||||
},
|
||||
'msg-user': {
|
||||
title: 'POST /msg/user — send direct message to user',
|
||||
fields: [
|
||||
@@ -267,15 +235,6 @@
|
||||
],
|
||||
submit: () => httpPost('/msg/user', { token:'mu-token', connectionid:'mu-connectionid', msgContent:'mu-msgContent', attachedFile:'mu-attachedFile' })
|
||||
},
|
||||
'msg-group': {
|
||||
title: 'POST /msg/group — send message to group',
|
||||
fields: [
|
||||
{ id: 'mg-token', label: 'token', ph: '' },
|
||||
{ id: 'mg-groupid', label: 'groupid', ph: 'uint32' },
|
||||
{ id: 'mg-content', label: 'content', ph: 'message text' },
|
||||
],
|
||||
submit: () => httpPost('/msg/group', { token:'mg-token', groupid:'mg-groupid', content:'mg-content' })
|
||||
},
|
||||
'file-upload': {
|
||||
title: 'POST /new/file — upload file (multipart, token in header)',
|
||||
renderCustom: () => `
|
||||
@@ -339,10 +298,10 @@
|
||||
const def = formDefs[name];
|
||||
|
||||
// activate clicked button
|
||||
const idx = Object.keys(formDefs).indexOf(name);
|
||||
if (idx >= 0) {
|
||||
buttons[idx].classList.add('active');
|
||||
if (name === 'websocket') buttons[idx].classList.add('ws');
|
||||
const btn = document.querySelector(`#btn-row button[data-form="${name}"]`);
|
||||
if (btn) {
|
||||
btn.classList.add('active');
|
||||
if (name === 'websocket') btn.classList.add('ws');
|
||||
}
|
||||
|
||||
titleEl.textContent = def.title;
|
||||
@@ -485,6 +444,58 @@
|
||||
}
|
||||
}
|
||||
|
||||
async function submitAvatarUpload() {
|
||||
const token = document.getElementById('mua-token').value;
|
||||
const fileInput = document.getElementById('mua-file');
|
||||
if (!fileInput.files.length) { log('HTTP ERR', 'no file selected', 'log-err'); return; }
|
||||
const form = new FormData();
|
||||
form.append('file', fileInput.files[0]);
|
||||
log('HTTP /mod/user/avatar', `→ file=${fileInput.files[0].name}`, 'log-info');
|
||||
try {
|
||||
const resp = await fetch(baseUrl() + '/mod/user/avatar', { method: 'POST', headers: { token }, body: form });
|
||||
const text = await resp.text();
|
||||
log(`HTTP ${resp.status}`, text, resp.ok ? 'log-http' : 'log-err');
|
||||
} catch(e) { log('HTTP ERR', e.message, 'log-err'); }
|
||||
}
|
||||
|
||||
async function submitProfileBgUpload() {
|
||||
const token = document.getElementById('mpb-token').value;
|
||||
const fileInput = document.getElementById('mpb-file');
|
||||
if (!fileInput.files.length) { log('HTTP ERR', 'no file selected', 'log-err'); return; }
|
||||
const form = new FormData();
|
||||
form.append('file', fileInput.files[0]);
|
||||
log('HTTP /mod/user/profilebg', `→ file=${fileInput.files[0].name}`, 'log-info');
|
||||
try {
|
||||
const resp = await fetch(baseUrl() + '/mod/user/profilebg', { method: 'POST', headers: { token }, body: form });
|
||||
const text = await resp.text();
|
||||
log(`HTTP ${resp.status}`, text, resp.ok ? 'log-http' : 'log-err');
|
||||
} catch(e) { log('HTTP ERR', e.message, 'log-err'); }
|
||||
}
|
||||
|
||||
async function submitGetUserAvatar() {
|
||||
const token = document.getElementById('gua-token').value;
|
||||
const userid = document.getElementById('gua-userid').value;
|
||||
const params = new URLSearchParams({ userid });
|
||||
log('HTTP /get/user/avatar', `→ ${params.toString()}`, 'log-info');
|
||||
try {
|
||||
const resp = await fetch(baseUrl() + '/get/user/avatar', { method: 'POST', headers: { token }, body: params });
|
||||
const text = await resp.text();
|
||||
log(`HTTP ${resp.status}`, text, resp.ok ? 'log-http' : 'log-err');
|
||||
} catch(e) { log('HTTP ERR', e.message, 'log-err'); }
|
||||
}
|
||||
|
||||
async function submitGetUserProfileBg() {
|
||||
const token = document.getElementById('gpb-token').value;
|
||||
const userid = document.getElementById('gpb-userid').value;
|
||||
const params = new URLSearchParams({ userid });
|
||||
log('HTTP /get/user/profilebg', `→ ${params.toString()}`, 'log-info');
|
||||
try {
|
||||
const resp = await fetch(baseUrl() + '/get/user/profilebg', { method: 'POST', headers: { token }, body: params });
|
||||
const text = await resp.text();
|
||||
log(`HTTP ${resp.status}`, text, resp.ok ? 'log-http' : 'log-err');
|
||||
} catch(e) { log('HTTP ERR', e.message, 'log-err'); }
|
||||
}
|
||||
|
||||
function setWsStatus(connected) {
|
||||
const el = document.getElementById('ws-status');
|
||||
if (!el) return;
|
||||
|
||||
Reference in New Issue
Block a user