Move navigation from _menu.json files in each navigation-parent directory to a naviga...
[ndcode_site.git] / api / navigation / get.json.jst
diff --git a/api/navigation/get.json.jst b/api/navigation/get.json.jst
new file mode 100644 (file)
index 0000000..ac842d8
--- /dev/null
@@ -0,0 +1,40 @@
+let jst_server = (await import('@ndcode/jst_server')).default
+let XDate = require('xdate')
+
+return async env => {
+  let get_account = await _require('/_lib/get_account.jst')
+  let get_session = await _require('/_lib/get_session.jst')
+  let post_request = await _require('/_lib/post_request.jst')
+
+  await post_request(
+    // env
+    env,
+    // handler
+    async () => {
+      let transaction = await env.site.database.Transaction()
+      try {
+        let root = await transaction.get({})
+        let session = await get_session(env, root)
+
+        let account = await get_account(root, session)
+        if (account === undefined)
+          throw new jst_server.Problem(
+            'Unauthorized',
+            'Please sign in first.',
+            401
+          )
+        if (!await account.get_json('administrator'))
+          throw new jst_server.Problem(
+            'Unauthorized',
+            'Not administrator.',
+            401
+          )
+
+        return /*await*/ root.get_json('navigation', {})
+      }
+      finally {
+        transaction.rollback()
+      }
+    }
+  )
+}