2016-03-12 13:50:43 -05:00
"use strict" ;
//! {"permissions": ["administration"]}
terminal . print ( "Administration" ) ;
if ( core . user . credentials . permissions &&
core . user . credentials . permissions . administration ) {
core . register ( "onInput" , onInput ) ;
terminal . print ( "Welcome, administrator." ) ;
terminal . print ( "Usage:" ) ;
let kCommands = [
[
"set" ,
"List all global settings." ,
] ,
[
[ "set " , { class : "cyan" , value : "key value" } ] ,
2016-04-03 15:31:03 -04:00
[ "Set global setting key to value. Omit value to unset." ] ,
2016-03-12 13:50:43 -05:00
] ,
[
"permission list" ,
"List all permissions."
] ,
[
[ "permission add " , { class : "cyan" , value : "user action1 action2 ..." } ] ,
[ "Grant permission for " , { class : "cyan" , value : "action1" } , ", " , { class : "cyan" , value : "action2" } , ", " , { class : "cyan" , value : "..." } , " to " , { class : "cyan" , value : "user" } , "." ] ,
] ,
[
[ "permission remove " , { class : "cyan" , value : "user action1 action2 ..." } ] ,
[ "Revoke permission for " , { class : "cyan" , value : "action1" } , ", " , { class : "cyan" , value : "action2" } , ", " , { class : "cyan" , value : "..." } , " from " , { class : "cyan" , value : "user" } , "." ] ,
] ,
[
"statistics" , "List statistics."
] ,
] ;
for ( var i = 0 ; i < kCommands . length ; i ++ ) {
terminal . print ( { class : "yellow" , value : kCommands [ i ] [ 0 ] } ) ;
terminal . print ( { style : "display: block; margin-left: 2em" , value : kCommands [ i ] [ 1 ] } ) ;
}
} else {
terminal . print ( "You are not an administrator." ) ;
}
var kSimpleSettings = [
'httpPort' ,
'httpsPort' ,
'index' ,
2016-04-03 15:31:03 -04:00
'google-signin-client_id' ,
2016-03-12 13:50:43 -05:00
] ;
function printSettings ( settings ) {
terminal . print ( "Current settings:" ) ;
for ( let i = 0 ; i < kSimpleSettings . length ; i ++ ) {
terminal . print ( " " , { class : "magenta" , value : kSimpleSettings [ i ] } , " = " , { class : "yellow" , value : settings [ kSimpleSettings [ i ] ] } ) ;
}
}
function printPermissions ( settings ) {
terminal . print ( "Current permissions:" ) ;
let permissions = settings . permissions || { } ;
for ( let entry in permissions ) {
terminal . print ( " " , { class : "magenta" , value : entry } , ": " , { class : "yellow" , value : permissions [ entry ] . join ( " " ) } ) ;
}
}
function onInput ( input ) {
try {
let match ;
if ( input == "set" ) {
administration . getGlobalSettings ( ) . then ( printSettings ) ;
} else if ( input == "statistics" ) {
administration . getStatistics ( ) . then ( function ( s ) {
for ( var i in s ) {
terminal . print ( " " . repeat ( 16 - s [ i ] . toString ( ) . length ) , s [ i ] . toString ( ) , " " , i ) ;
}
} ) ;
2016-04-03 15:31:03 -04:00
} else if ( match = /^\s*set\s+(\S+)(?:\s+(.*))?/ . exec ( input ) ) {
2016-03-12 13:50:43 -05:00
var key = match [ 1 ] ;
var value = match [ 2 ] ;
administration . getGlobalSettings ( ) . then ( function ( settings ) {
if ( kSimpleSettings . indexOf ( key ) != - 1 ) {
2016-04-03 15:31:03 -04:00
if ( value ) {
settings [ key ] = value ;
} else {
delete settings [ key ] ;
}
2016-03-12 13:50:43 -05:00
administration . setGlobalSettings ( settings ) . then ( function ( ) {
administration . getGlobalSettings ( ) . then ( printSettings ) ;
} ) . catch ( function ( error ) {
terminal . print ( "Error updating settings: " + JSON . stringify ( error ) ) ;
} ) ;
} else {
terminal . print ( "Unknown setting: " + key ) ;
}
} ) ;
} else if ( match = /^\s*permission\s+(\w+)(?:\s+(.*))?/ . exec ( input ) ) {
var command = match [ 1 ] ;
var remaining = ( match [ 2 ] || "" ) . split ( /\s+/ ) ;
if ( command == "list" ) {
administration . getGlobalSettings ( ) . then ( printPermissions ) ;
} else if ( command == "add" ) {
var user = remaining [ 0 ] ;
administration . getGlobalSettings ( ) . then ( function ( settings ) {
settings . permissions = settings . permissions || { } ;
settings . permissions [ user ] = settings . permissions [ user ] || [ ] ;
for ( var i = 1 ; i < remaining . length ; i ++ ) {
if ( settings . permissions [ user ] . indexOf ( remaining [ i ] ) == - 1 ) {
settings . permissions [ user ] . push ( remaining [ i ] ) ;
}
}
settings . permissions [ user ] . sort ( ) ;
administration . setGlobalSettings ( settings ) . then ( function ( ) {
administration . getGlobalSettings ( ) . then ( printPermissions ) ;
} ) . catch ( function ( error ) {
terminal . print ( "Error updating permissions: " + JSON . stringify ( error ) ) ;
} ) ;
} ) ;
} else if ( command == "remove" ) {
var user = remaining [ 0 ] ;
administration . getGlobalSettings ( ) . then ( function ( settings ) {
if ( settings . permissions && settings . permissions [ user ] ) {
for ( var i = 1 ; i < remaining . length ; i ++ ) {
settings . permissions [ user ] = settings . permissions [ user ] . filter ( x => x != remaining [ i ] ) ;
}
if ( settings . permissions [ user ] . length == 0 ) {
delete settings . permissions [ user ] ;
}
}
administration . setGlobalSettings ( settings ) . then ( function ( ) {
administration . getGlobalSettings ( ) . then ( printPermissions ) ;
} ) . catch ( function ( error ) {
terminal . print ( "Error updating permissions: " + JSON . stringify ( error ) ) ;
} ) ;
} ) ;
}
} else if ( typeof input == "string" ) {
terminal . print ( "I didn't understand that." ) ;
}
} catch ( error ) {
terminal . print ( "error: " + error ) ;
}
}