diff --git a/roles/wiki_js/defaults/main.json b/roles/wiki_js/defaults/main.json index 6e94256..2de7c99 100644 --- a/roles/wiki_js/defaults/main.json +++ b/roles/wiki_js/defaults/main.json @@ -30,5 +30,7 @@ "var_wiki_js_admin_password": "REPLACE_ME", "var_wiki_js_additional_locales": [], "var_wiki_js_user_group_name": "Default", - "var_wiki_js_allow_guest_view": true + "var_wiki_js_allow_guest_view": true, + "var_wiki_js_dark_mode": false, + "var_wiki_js_toc_position": "left" } diff --git a/roles/wiki_js/files/wiki-js-cli b/roles/wiki_js/files/wiki-js-cli index a8981b9..5ae027b 100755 --- a/roles/wiki_js/files/wiki-js-cli +++ b/roles/wiki_js/files/wiki-js-cli @@ -49,22 +49,33 @@ var _wiki_js_cli; (function (helpers) { var log; (function (log) { + /** + */ + let enum_level; + (function (enum_level) { + enum_level["debug"] = "debug"; + enum_level["info"] = "info"; + enum_level["notice"] = "notice"; + enum_level["warning"] = "warning"; + enum_level["error"] = "error"; + })(enum_level = log.enum_level || (log.enum_level = {})); /** */ const _level_order = [ - "debug", - "info", - "notice", - "warning", - "error", + enum_level.debug, + enum_level.info, + enum_level.notice, + enum_level.warning, + enum_level.error, ]; /** */ - var _threshold = "info"; + var _threshold = enum_level.info; /** */ function setup(threshold) { _threshold = threshold; + return Promise.resolve(undefined); } log.setup = setup; /** @@ -95,7 +106,7 @@ var _wiki_js_cli; /** */ async function call(http_request) { - _wiki_js_cli.helpers.log.write("debug", "http_call_request", http_request); + _wiki_js_cli.helpers.log.write(_wiki_js_cli.helpers.log.enum_level.debug, "http_call_request", http_request); const fetch_request = new Request(http_request.target, { "method": http_request.method, "headers": http_request.headers, @@ -104,10 +115,10 @@ var _wiki_js_cli; const fetch_response = await fetch(fetch_request); const http_response = { "status_code": fetch_response.status, - "headers": fetch_response.headers, + "headers": Object.fromEntries(fetch_response.headers.entries()), "body": await fetch_response.text(), }; - _wiki_js_cli.helpers.log.write("debug", "http_call_response", http_response); + _wiki_js_cli.helpers.log.write(_wiki_js_cli.helpers.log.enum_level.debug, "http_call_response", http_response); return http_response; } http.call = call; @@ -143,7 +154,7 @@ var _wiki_js_cli; state = "free"; } else { - _wiki_js_cli.helpers.log.write("warning", "arg_discarded", { + _wiki_js_cli.helpers.log.write(_wiki_js_cli.helpers.log.enum_level.warning, "arg_discarded", { "arg_raw": arg_raw, }); key = null; @@ -189,7 +200,7 @@ var _wiki_js_cli; const content = await _wiki_js_cli.helpers.file.read(path); data_raw = JSON.parse(content); } - _wiki_js_cli.helpers.log.write("debug", "conf_raw", data_raw); + _wiki_js_cli.helpers.log.write(_wiki_js_cli.helpers.log.enum_level.debug, "conf_raw", data_raw); _data = { "api": { "url_base": (data_raw?.api?.url_base @@ -299,7 +310,7 @@ var _wiki_js_cli; * executes a local login */ async function call_login_local(username, password) { - _wiki_js_cli.helpers.log.write("info", "api_call_login_local", {}); + _wiki_js_cli.helpers.log.write(_wiki_js_cli.helpers.log.enum_level.info, "api_call_login_local", {}); return (call_generic_graphql("mutation ($username: String!, $password: String!, $strategy: String!) {authentication {login(username: $username, password: $password, strategy: $strategy) {responseResult {succeeded errorCode slug message __typename} jwt mustChangePwd mustProvideTFA mustSetupTFA continuationToken redirect tfaQRImage __typename} __typename}}", { "variables": { "strategy": "local", @@ -321,7 +332,7 @@ var _wiki_js_cli; /** */ function call_email_settings_set(settings) { - _wiki_js_cli.helpers.log.write("info", "api_call_email_settings_set", { + _wiki_js_cli.helpers.log.write(_wiki_js_cli.helpers.log.enum_level.info, "api_call_email_settings_set", { "settings": settings, }); return (call_generic_graphql("mutation ($senderName: String!, $senderEmail: String!, $host: String!, $port: Int!, $name: String!, $secure: Boolean!, $verifySSL: Boolean!, $user: String!, $pass: String!, $useDKIM: Boolean!, $dkimDomainName: String!, $dkimKeySelector: String!, $dkimPrivateKey: String!) {mail {updateConfig(senderName: $senderName, senderEmail: $senderEmail, host: $host, port: $port, name: $name, secure: $secure, verifySSL: $verifySSL, user: $user, pass: $pass, useDKIM: $useDKIM, dkimDomainName: $dkimDomainName, dkimKeySelector: $dkimKeySelector, dkimPrivateKey: $dkimPrivateKey) {responseResult {succeeded errorCode slug message __typename} __typename} __typename}}", { @@ -346,7 +357,7 @@ var _wiki_js_cli; /** */ function call_locale_download(locale) { - _wiki_js_cli.helpers.log.write("info", "api_call_locale_download", { + _wiki_js_cli.helpers.log.write(_wiki_js_cli.helpers.log.enum_level.info, "api_call_locale_download", { "locale": locale, }); return (call_generic_graphql("mutation ($locale: String!) {localization {downloadLocale(locale: $locale) {responseResult {succeeded errorCode slug message __typename} __typename}__typename}}", { @@ -359,7 +370,7 @@ var _wiki_js_cli; /** */ function call_group_list(name) { - _wiki_js_cli.helpers.log.write("info", "api_call_group_list", {}); + _wiki_js_cli.helpers.log.write(_wiki_js_cli.helpers.log.enum_level.info, "api_call_group_list", {}); return (call_generic_graphql("{groups {list {id name isSystem userCount createdAt updatedAt __typename} __typename}}", { "variables": {} })); @@ -368,7 +379,7 @@ var _wiki_js_cli; /** */ function call_group_create(name) { - _wiki_js_cli.helpers.log.write("info", "api_call_group_create", { + _wiki_js_cli.helpers.log.write(_wiki_js_cli.helpers.log.enum_level.info, "api_call_group_create", { "name": name, }); return (call_generic_graphql("mutation ($name: String!) {groups {create(name: $name) {responseResult {succeeded errorCode slug message __typename} group {id name createdAt updatedAt __typename} __typename} __typename}}", { @@ -402,7 +413,7 @@ var _wiki_js_cli; * } */ function call_group_update(group_id, name, permissions_general, permissions_page_specific) { - _wiki_js_cli.helpers.log.write("info", "api_call_group_update", {}); + _wiki_js_cli.helpers.log.write(_wiki_js_cli.helpers.log.enum_level.info, "api_call_group_update", {}); return (call_generic_graphql("mutation ($id: Int!, $name: String!, $redirectOnLogin: String!, $permissions: [String]!, $pageRules: [PageRuleInput]!) {groups {update(id: $id, name: $name, redirectOnLogin: $redirectOnLogin, permissions: $permissions, pageRules: $pageRules) {responseResult {succeeded errorCode slug message __typename} __typename} __typename}}", { "variables": { "id": group_id, @@ -417,7 +428,7 @@ var _wiki_js_cli; /** */ function call_authentication_strategy_list() { - _wiki_js_cli.helpers.log.write("info", "api_call_authentication_strategy_list", {}); + _wiki_js_cli.helpers.log.write(_wiki_js_cli.helpers.log.enum_level.info, "api_call_authentication_strategy_list", {}); return (call_generic_graphql("{authentication {activeStrategies {key strategy {key title description useForm logo website __typename} config {key value __typename} order isEnabled displayName selfRegistration domainWhitelist autoEnrollGroups __typename} __typename}}", {}) .then((data) => Promise.resolve(data["authentication"]["activeStrategies"]))); } @@ -425,7 +436,7 @@ var _wiki_js_cli; /** */ function call_authentication_strategy_set(strategies) { - _wiki_js_cli.helpers.log.write("info", "api_call_authentication_strategy_set", { + _wiki_js_cli.helpers.log.write(_wiki_js_cli.helpers.log.enum_level.info, "api_call_authentication_strategy_set", { "strategies": strategies, }); return (call_generic_graphql("mutation ($strategies: [AuthenticationStrategyInput]!) {authentication {updateStrategies(strategies: $strategies) {responseResult {succeeded errorCode slug message __typename} __typename} __typename}}", { @@ -438,7 +449,7 @@ var _wiki_js_cli; /** */ function call_theming_set(dark_mode, toc_position) { - _wiki_js_cli.helpers.log.write("info", "api_call_theming_set", { + _wiki_js_cli.helpers.log.write(_wiki_js_cli.helpers.log.enum_level.info, "api_call_theming_set", { "dark_mode": dark_mode, "toc_position": toc_position, }); @@ -447,7 +458,7 @@ var _wiki_js_cli; "theme": "default", "iconset": "mdi", "darkMode": dark_mode, - "tocPosition": "left", + "tocPosition": toc_position, "injectCSS": "", "injectHead": "", "injectBody": "" @@ -671,6 +682,33 @@ var _wiki_js_cli; })(_wiki_js_cli || (_wiki_js_cli = {})); var _wiki_js_cli; (function (_wiki_js_cli) { + /** + */ + function parse_boolean(indicator) { + if ((indicator === "1") + || + (indicator === "yes") + || + (indicator === "on") + || + (indicator === "true")) { + return true; + } + else { + if ((indicator === "0") + || + (indicator === "no") + || + (indicator === "off") + || + (indicator === "false")) { + return false; + } + else { + throw (new Error("invalid boolean indicator: " + indicator)); + } + } + } /** */ async function main(args_raw) { @@ -713,9 +751,9 @@ var _wiki_js_cli; : null); await _wiki_js_cli.conf.load(conf_path); - _wiki_js_cli.helpers.log.write("debug", "conf", _wiki_js_cli.conf.get()); + _wiki_js_cli.helpers.log.write(_wiki_js_cli.helpers.log.enum_level.debug, "conf", _wiki_js_cli.conf.get()); // init - _wiki_js_cli.helpers.log.setup(override_log_level ?? _wiki_js_cli.conf.get().log.threshold); + await _wiki_js_cli.helpers.log.setup(override_log_level ?? _wiki_js_cli.conf.get().log.threshold); await _wiki_js_cli.api.init((override_url_base ?? _wiki_js_cli.conf.get().api.url_base)); // exec if (args.positional.length < 1) { @@ -733,17 +771,21 @@ var _wiki_js_cli; return Promise.reject("SYNTAX: … init [ []]"); } else { - await _wiki_js_cli.logic.initialize(args.positional[1], args.positional[2], { - "site_url": ((args.positional.length >= 4) - ? - args.positional[3] - : - undefined), - "allow_telemetry": ((args.positional.length >= 5) - ? - (args.positional[4] === "1") - : - undefined), + const admin_email_address = args.positional[1]; + const admin_password = args.positional[2]; + const site_url = ((args.positional.length >= 4) + ? + args.positional[3] + : + undefined); + const allow_telemetry = ((args.positional.length >= 5) + ? + parse_boolean(args.positional[4]) + : + undefined); + await _wiki_js_cli.logic.initialize(admin_email_address, admin_password, { + "site_url": site_url, + "allow_telemetry": allow_telemetry }); return Promise.resolve(undefined); } @@ -754,11 +796,17 @@ var _wiki_js_cli; return Promise.reject("SYNTAX: … email-settings-set "); } else { + const smtp_host = args.positional[1]; + const smtp_port = parseInt(args.positional[2]); + const smtp_username = args.positional[3]; + const smtp_password = args.positional[4]; + const sender_name = args.positional[5]; + const sender_email_address = args.positional[6]; await _wiki_js_cli.logic.login({ "username": override_username, "password": override_password, }); - await _wiki_js_cli.logic.email_settings_set(args.positional[1], parseInt(args.positional[2]), args.positional[3], args.positional[4], args.positional[5], args.positional[6], {}); + await _wiki_js_cli.logic.email_settings_set(smtp_host, smtp_port, smtp_username, smtp_password, sender_name, sender_email_address, {}); return Promise.resolve(undefined); } break; @@ -768,22 +816,23 @@ var _wiki_js_cli; return Promise.reject("SYNTAX: … locale-add "); } else { + const locale_code = args.positional[1]; await _wiki_js_cli.logic.login({ "username": override_username, "password": override_password, }); - await _wiki_js_cli.logic.locale_add(args.positional[1]); + await _wiki_js_cli.logic.locale_add(locale_code); return Promise.resolve(undefined); } break; } case "group-add": { - if (args.positional.length <= 1) { - return Promise.reject("SYNTAX: … group-add [ [ [ […]]]]"); + if (args.positional.length <= 2) { + return Promise.reject("SYNTAX: … group-add "); } else { const name = args.positional[1]; - const permissions = args.positional.slice(2); + const permissions = args.positional[2].split(","); await _wiki_js_cli.logic.login({ "username": override_username, "password": override_password, @@ -809,11 +858,11 @@ var _wiki_js_cli; } case "group-modify": { if (args.positional.length <= 2) { - return Promise.reject("SYNTAX: … group-modify [ [ [ […]]]]"); + return Promise.reject("SYNTAX: … group-modify "); } else { const name = args.positional[1]; - const permissions = args.positional.slice(2); + const permissions = args.positional[2].split(","); const id = await _wiki_js_cli.logic.group_identify(name); await _wiki_js_cli.logic.login({ "username": override_username, @@ -836,15 +885,11 @@ var _wiki_js_cli; break; } case "auth-strat-add-oauth2": { - if (args.positional.length <= 7) { - return Promise.reject("SYNTAX: … auth-strat-add-oauth2 [ [ [ […]]]]"); + if (args.positional.length <= 8) { + return Promise.reject("SYNTAX: … auth-strat-add-oauth2 "); } else { - await _wiki_js_cli.logic.login({ - "username": override_username, - "password": override_password, - }); - await _wiki_js_cli.logic.authentication_strategy_add({ + const strategy = { "key": args.positional[1], "name": args.positional[2], "client_id": args.positional[3], @@ -852,8 +897,13 @@ var _wiki_js_cli; "authorization_url": args.positional[5], "token_url": args.positional[6], "user_info_url": args.positional[7], - "group_assignments": args.positional.slice(8), + "group_assignments": args.positional[8].split(","), + }; + await _wiki_js_cli.logic.login({ + "username": override_username, + "password": override_password, }); + await _wiki_js_cli.logic.authentication_strategy_add(strategy); return Promise.resolve(undefined); } break; @@ -863,23 +913,36 @@ var _wiki_js_cli; return Promise.reject("SYNTAX: … theming-set []"); } else { - await _wiki_js_cli.logic.login({ - "username": override_username, - "password": override_password, - }); - await _wiki_js_cli.logic.theming_set({ - "dark_mode": (args.positional[1] === "1"), - "toc_position": ((args.positional.length <= 2) - ? - "left" - : - ((args.positional[2] === "right") - ? - "right" - : - "left")), - }); - return Promise.resolve(undefined); + const dark_mode = parse_boolean(args.positional[1]); + const toc_position_raw = ((args.positional.length <= 2) + ? + "left" + : + args.positional[2]); + const toc_position = (() => { + switch (toc_position_raw) { + case "left": return "left"; + case "right": return "right"; + case "hidden": return "off"; + default: { + return null; + } + } + })(); + if (toc_position === null) { + return Promise.reject("invalid toc-position: " + toc_position_raw + "; valid values are: left,right,hidden"); + } + else { + await _wiki_js_cli.logic.login({ + "username": override_username, + "password": override_password, + }); + await _wiki_js_cli.logic.theming_set({ + "dark_mode": dark_mode, + "toc_position": toc_position, + }); + return Promise.resolve(undefined); + } } break; } diff --git a/roles/wiki_js/info.md b/roles/wiki_js/info.md index 9730dc5..7fa2df9 100644 --- a/roles/wiki_js/info.md +++ b/roles/wiki_js/info.md @@ -9,6 +9,11 @@ - [Wiki.js-Dokumentation | Konfiguration](https://docs.requarks.io/install/config) +## Anmerkungen + +- `files/wiki-js-cli` stammt aus einem kleinen Projekt von _roydfalk_ + + ## ToDo - start page diff --git a/roles/wiki_js/tasks/main.json b/roles/wiki_js/tasks/main.json index 2572af3..019b07a 100644 --- a/roles/wiki_js/tasks/main.json +++ b/roles/wiki_js/tasks/main.json @@ -120,7 +120,7 @@ "become_user": "{{var_wiki_js_user}}", "ansible.builtin.command": { "chdir": "{{var_wiki_js_directory}}", - "cmd": "node cli.js -b http://127.0.0.1:{{var_wiki_js_port | string}} init {{var_wiki_js_admin_email_address}} {{var_wiki_js_admin_password}} https://{{var_wiki_js_domain}} 0" + "cmd": "/usr/local/bin/wiki-js-cli -b http://127.0.0.1:{{var_wiki_js_port | string}} init {{var_wiki_js_admin_email_address}} {{var_wiki_js_admin_password}} https://{{var_wiki_js_domain}} no" } }, { @@ -129,7 +129,7 @@ "become_user": "{{var_wiki_js_user}}", "ansible.builtin.command": { "chdir": "{{var_wiki_js_directory}}", - "cmd": "node cli.js -b http://127.0.0.1:{{var_wiki_js_port | string}} -u {{var_wiki_js_admin_email_address}} -p {{var_wiki_js_admin_password}} email-settings-set {{var_wiki_js_smtp_host}} {{var_wiki_js_smtp_port}} {{var_wiki_js_smtp_username}} {{var_wiki_js_smtp_password}} {{email_sending_sender_name}} {{email_sending_sender_email_address}}" + "cmd": "/usr/local/bin/wiki-js-cli -b http://127.0.0.1:{{var_wiki_js_port | string}} -u {{var_wiki_js_admin_email_address}} -p {{var_wiki_js_admin_password}} email-settings-set {{var_wiki_js_smtp_host}} {{var_wiki_js_smtp_port}} {{var_wiki_js_smtp_username}} {{var_wiki_js_smtp_password}} {{email_sending_sender_name}} {{email_sending_sender_email_address}}" } }, { @@ -139,7 +139,7 @@ "loop": "{{var_wiki_js_additional_locales}}", "ansible.builtin.command": { "chdir": "{{var_wiki_js_directory}}", - "cmd": "node cli.js -b http://127.0.0.1:{{var_wiki_js_port | string}} -u {{var_wiki_js_admin_email_address}} -p {{var_wiki_js_admin_password}} locale-add {{item}}" + "cmd": "/usr/local/bin/wiki-js-cli -b http://127.0.0.1:{{var_wiki_js_port | string}} -u {{var_wiki_js_admin_email_address}} -p {{var_wiki_js_admin_password}} locale-add {{item}}" } }, { @@ -149,7 +149,7 @@ "become_user": "{{var_wiki_js_user}}", "ansible.builtin.command": { "chdir": "{{var_wiki_js_directory}}", - "cmd": "node cli.js -b http://127.0.0.1:{{var_wiki_js_port | string}} -u {{var_wiki_js_admin_email_address}} -p {{var_wiki_js_admin_password}} group-modify Guests" + "cmd": "/usr/local/bin/wiki-js-cli -b http://127.0.0.1:{{var_wiki_js_port | string}} -u {{var_wiki_js_admin_email_address}} -p {{var_wiki_js_admin_password}} group-modify Guests" } }, { @@ -159,7 +159,7 @@ "become_user": "{{var_wiki_js_user}}", "ansible.builtin.command": { "chdir": "{{var_wiki_js_directory}}", - "cmd": "node cli.js -b http://127.0.0.1:{{var_wiki_js_port | string}} -u {{var_wiki_js_admin_email_address}} -p {{var_wiki_js_admin_password}} group-modify Guests read:pages read:assets read:comments" + "cmd": "/usr/local/bin/wiki-js-cli -b http://127.0.0.1:{{var_wiki_js_port | string}} -u {{var_wiki_js_admin_email_address}} -p {{var_wiki_js_admin_password}} group-modify Guests read:pages read:assets read:comments" } }, { @@ -168,7 +168,7 @@ "become_user": "{{var_wiki_js_user}}", "ansible.builtin.command": { "chdir": "{{var_wiki_js_directory}}", - "cmd": "node cli.js -b http://127.0.0.1:{{var_wiki_js_port | string}} -u {{var_wiki_js_admin_email_address}} -p {{var_wiki_js_admin_password}} group-add {{var_wiki_js_user_group_name}} read:pages read:assets read:comments write:comments write:pages manage:pages delete:pages write:styles write:scripts read:source read:history write:assets manage:assets manage:comments" + "cmd": "/usr/local/bin/wiki-js-cli -b http://127.0.0.1:{{var_wiki_js_port | string}} -u {{var_wiki_js_admin_email_address}} -p {{var_wiki_js_admin_password}} group-add {{var_wiki_js_user_group_name}} {{var_wiki_js_allow_guest_view | ternary('read:pages,read:assets,read:comments,write:comments,write:pages,manage:pages,delete:pages,write:styles,write:scripts,read:source,read:history,write:assets,manage:assets,manage:comments','')}}" } }, { @@ -178,7 +178,7 @@ "become_user": "{{var_wiki_js_user}}", "ansible.builtin.command": { "chdir": "{{var_wiki_js_directory}}", - "cmd": "node cli.js -b http://127.0.0.1:{{var_wiki_js_port | string}} -u {{var_wiki_js_admin_email_address}} -p {{var_wiki_js_admin_password}} auth-strat-add-oauth2 {{var_wiki_js_authentication_data_authelia_provider_id}} {{var_wiki_js_authentication_data_authelia_provider_name}} {{var_wiki_js_authentication_data_authelia_client_id}} {{var_wiki_js_authentication_data_authelia_client_secret}} {{var_wiki_js_authentication_data_authelia_url_base}}/api/oidc/authorization {{var_wiki_js_authentication_data_authelia_url_base}}/api/oidc/token {{var_wiki_js_authentication_data_authelia_url_base}}/api/oidc/userinfo {{var_wiki_js_user_group_name}}" + "cmd": "/usr/local/bin/wiki-js-cli -b http://127.0.0.1:{{var_wiki_js_port | string}} -u {{var_wiki_js_admin_email_address}} -p {{var_wiki_js_admin_password}} auth-strat-add-oauth2 {{var_wiki_js_authentication_data_authelia_provider_id}} {{var_wiki_js_authentication_data_authelia_provider_name}} {{var_wiki_js_authentication_data_authelia_client_id}} {{var_wiki_js_authentication_data_authelia_client_secret}} {{var_wiki_js_authentication_data_authelia_url_base}}/api/oidc/authorization {{var_wiki_js_authentication_data_authelia_url_base}}/api/oidc/token {{var_wiki_js_authentication_data_authelia_url_base}}/api/oidc/userinfo {{var_wiki_js_user_group_name}}" } }, { @@ -187,7 +187,7 @@ "become_user": "{{var_wiki_js_user}}", "ansible.builtin.command": { "chdir": "{{var_wiki_js_directory}}", - "cmd": "node cli.js -b http://127.0.0.1:{{var_wiki_js_port | string}} -u {{var_wiki_js_admin_email_address}} -p {{var_wiki_js_admin_password}} theming-set 1 left" + "cmd": "/usr/local/bin/wiki-js-cli -b http://127.0.0.1:{{var_wiki_js_port | string}} -u {{var_wiki_js_admin_email_address}} -p {{var_wiki_js_admin_password}} theming-set {{var_wiki_js_dark_mode | ternary('yes','no')}} {{var_wiki_js_toc_position}}" } } ] diff --git a/roles/wiki_js/vardef.json b/roles/wiki_js/vardef.json index 3b68b3f..6bb5756 100644 --- a/roles/wiki_js/vardef.json +++ b/roles/wiki_js/vardef.json @@ -150,5 +150,13 @@ "allow_guest_view": { "mandatory": false, "type": "boolean" + }, + "dark_mode": { + "mandatory": false, + "type": "boolean" + }, + "toc_position": { + "mandatory": false, + "type": "string" } }