ssb: Shore more context when presenting a request for permissions to post a message.
All checks were successful
Build Tilde Friends / Build-All (push) Successful in 18m38s

This commit is contained in:
2025-11-10 12:50:05 -05:00
parent b571cd213b
commit 2d71af3243
3 changed files with 30 additions and 6 deletions

View File

@@ -29,7 +29,10 @@ const k_api = {
error: {args: ['error'], func: api_error}, error: {args: ['error'], func: api_error},
localStorageSet: {args: ['key', 'value'], func: api_localStorageSet}, localStorageSet: {args: ['key', 'value'], func: api_localStorageSet},
localStorageGet: {args: ['key'], func: api_localStorageGet}, localStorageGet: {args: ['key'], func: api_localStorageGet},
requestPermission: {args: ['permission', 'id'], func: api_requestPermission}, requestPermission: {
args: ['permission', 'id', 'description'],
func: api_requestPermission,
},
print: {args: ['...'], func: api_print}, print: {args: ['...'], func: api_print},
setHash: {args: ['hash'], func: api_setHash}, setHash: {args: ['hash'], func: api_setHash},
}; };
@@ -1222,10 +1225,10 @@ function api_localStorageGet(key) {
/** /**
* Request a permission * Request a permission
* @param permission The permission to request. * @param permission The permission to request.
* @param id The id requeesting the permission. * @param description An optional human-readable description of the action for which the permission is being requested.
* @return A promise fulfilled if the permission was granted. * @return A promise fulfilled if the permission was granted.
*/ */
function api_requestPermission(permission, id) { function api_requestPermission(permission, description) {
let outer = document.createElement('div'); let outer = document.createElement('div');
outer.classList.add('permissions'); outer.classList.add('permissions');
@@ -1242,6 +1245,16 @@ function api_requestPermission(permission, id) {
div.appendChild(span); div.appendChild(span);
container.appendChild(div); container.appendChild(div);
if (description) {
container.appendChild(document.createTextNode('for the action:'));
let description_div = document.createElement('div');
description_div.classList.add('w3-border');
description_div.style.maxHeight = '3em';
description_div.style.overflow = 'auto';
description_div.appendChild(document.createTextNode(description));
container.appendChild(description_div);
}
div = document.createElement('div'); div = document.createElement('div');
div.style = 'padding: 1em'; div.style = 'padding: 1em';
let check = document.createElement('input'); let check = document.createElement('input');

View File

@@ -212,7 +212,7 @@ async function getProcessBlob(blobId, key, options) {
return settings.userPermissions[user]; return settings.userPermissions[user];
} }
}, },
permissionTest: async function (permission) { permissionTest: async function (permission, description) {
let user = process?.credentials?.session?.name; let user = process?.credentials?.session?.name;
let settings = await loadSettings(); let settings = await loadSettings();
if (!user || !options?.packageOwner || !options?.packageName) { if (!user || !options?.packageOwner || !options?.packageName) {
@@ -239,7 +239,7 @@ async function getProcessBlob(blobId, key, options) {
} }
} else if (process.app) { } else if (process.app) {
return process.app return process.app
.makeFunction(['requestPermission'])(permission) .makeFunction(['requestPermission'])(permission, description)
.then(async function (value) { .then(async function (value) {
if (value == 'allow') { if (value == 'allow') {
await ssb.setUserPermission( await ssb.setUserPermission(
@@ -436,8 +436,18 @@ async function getProcessBlob(blobId, key, options) {
process.credentials.session && process.credentials.session &&
process.credentials.session.name process.credentials.session.name
) { ) {
let action;
try {
if (message?.type === 'vote' && message?.vote?.expression) {
action = `React with ${message?.vote?.expression}.`;
} else if (typeof message === 'string') {
action = `Post a private message.`;
} else {
action = `Post a ${message?.type}.`;
}
} catch {}
return Promise.resolve( return Promise.resolve(
imports.core.permissionTest('ssb_append') imports.core.permissionTest('ssb_append', action)
).then(function () { ).then(function () {
return ssb.appendMessageWithIdentity( return ssb.appendMessageWithIdentity(
process.credentials.session.name, process.credentials.session.name,

View File

@@ -152,4 +152,5 @@ body {
border-bottom: 4px solid #fff; border-bottom: 4px solid #fff;
padding: 1em; padding: 1em;
margin: 0 auto; margin: 0 auto;
max-width: 80%;
} }