miolo 3.0.0-beta.21 → 3.0.0-beta.210

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (246) hide show
  1. package/bin/build/build.mjs +53 -0
  2. package/bin/build/build_bin.mjs +17 -0
  3. package/bin/build/cli/client.mjs +52 -0
  4. package/bin/build/cli/css.mjs +22 -0
  5. package/bin/build/cli/index.mjs +40 -0
  6. package/bin/build/cli/ssr.mjs +21 -0
  7. package/bin/build/server/aliases.mjs +112 -0
  8. package/bin/build/server/babel.config.js +24 -0
  9. package/bin/build/server/banner.mjs +20 -0
  10. package/bin/build/server/bundle.mjs +111 -0
  11. package/bin/build/server/fix.mjs +15 -0
  12. package/bin/build/server/index.mjs +69 -0
  13. package/bin/build/server/options.mjs +83 -0
  14. package/bin/create/auth.mjs +23 -0
  15. package/bin/create/copy.mjs +175 -0
  16. package/bin/create/docker.mjs +25 -0
  17. package/bin/create/index.mjs +137 -0
  18. package/bin/create/pkgjson.mjs +72 -0
  19. package/bin/create/prepare-template.mjs +158 -0
  20. package/bin/create/validation.mjs +27 -0
  21. package/bin/dev/dev.mjs +32 -23
  22. package/bin/dev/dev_start.mjs +6 -5
  23. package/bin/index.mjs +94 -52
  24. package/bin/prod-bin/create-bin.mjs +42 -27
  25. package/bin/prod-bin/run.mjs +13 -9
  26. package/bin/{prod-run → run}/pid.mjs +4 -4
  27. package/bin/run/restart.mjs +13 -0
  28. package/bin/run/start.mjs +18 -0
  29. package/bin/run/stop.mjs +20 -0
  30. package/bin/util.mjs +35 -11
  31. package/package.json +59 -39
  32. package/src/config/.env +34 -12
  33. package/src/config/defaults.mjs +253 -185
  34. package/src/config/env.mjs +40 -22
  35. package/src/config/index.mjs +19 -24
  36. package/src/config/util.mjs +25 -10
  37. package/src/db-conn.mjs +34 -0
  38. package/src/engines/cron/emails.mjs +10 -5
  39. package/src/engines/cron/index.mjs +45 -51
  40. package/src/engines/cron/init.mjs +16 -17
  41. package/src/engines/cron/ipsum.mjs +65 -60
  42. package/src/engines/cron/syscheck.mjs +30 -30
  43. package/src/engines/emailer/index.mjs +1 -2
  44. package/src/engines/emailer/queue.mjs +14 -20
  45. package/src/engines/emailer/transporter.mjs +86 -74
  46. package/src/engines/geoip/index.mjs +23 -28
  47. package/src/engines/http/index.mjs +26 -15
  48. package/src/engines/logger/buildErrorEmailBody.mjs +72 -0
  49. package/src/engines/logger/index.mjs +114 -122
  50. package/src/engines/logger/injectStackTrace.mjs +59 -0
  51. package/src/engines/logger/logger_mail.mjs +47 -61
  52. package/src/engines/logger/reopenTransportOnHupSignal.mjs +12 -13
  53. package/src/engines/parser/Parser.mjs +77 -60
  54. package/src/engines/parser/index.mjs +1 -1
  55. package/src/engines/schema/diffObjs.mjs +41 -0
  56. package/src/engines/schema/index.mjs +4 -0
  57. package/src/engines/schema/input.mjs +54 -0
  58. package/src/engines/schema/output.mjs +66 -0
  59. package/src/engines/socket/index.mjs +44 -46
  60. package/src/index.mjs +15 -10
  61. package/src/middleware/auth/basic.mjs +41 -40
  62. package/src/middleware/auth/custom.mjs +10 -13
  63. package/src/middleware/auth/guest.mjs +27 -27
  64. package/src/middleware/auth/passport/index.mjs +374 -0
  65. package/src/middleware/auth/passport/session/index.mjs +43 -0
  66. package/src/middleware/auth/{credentials → passport}/session/store.mjs +35 -15
  67. package/src/middleware/auth/passport/session/store_koa_redis.mjs +3 -0
  68. package/src/middleware/context/cache/index.mjs +78 -33
  69. package/src/middleware/context/cache/options.mjs +19 -21
  70. package/src/middleware/context/db.mjs +45 -20
  71. package/src/middleware/context/index.mjs +12 -12
  72. package/src/middleware/extra.mjs +4 -5
  73. package/src/middleware/http/body.mjs +25 -25
  74. package/src/middleware/http/catcher.mjs +81 -8
  75. package/src/middleware/http/custom_blacklist.mjs +19 -16
  76. package/src/middleware/http/headers.mjs +37 -34
  77. package/src/middleware/http/ratelimit.mjs +16 -23
  78. package/src/middleware/http/request.mjs +60 -65
  79. package/src/middleware/routes/catch_js_error.mjs +30 -23
  80. package/src/middleware/routes/robots.mjs +4 -7
  81. package/src/middleware/routes/router/crud/attachCrudRoutes.mjs +108 -90
  82. package/src/middleware/routes/router/crud/getCrudConfig.mjs +31 -55
  83. package/src/middleware/routes/router/defaults.mjs +6 -19
  84. package/src/middleware/routes/router/index.mjs +17 -21
  85. package/src/middleware/routes/router/queries/attachQueriesRoutes.mjs +227 -50
  86. package/src/middleware/routes/router/queries/getQueriesConfig.mjs +45 -55
  87. package/src/middleware/routes/router/utils.mjs +41 -26
  88. package/src/middleware/ssr/context.mjs +5 -7
  89. package/src/middleware/ssr/html.mjs +66 -43
  90. package/src/middleware/ssr/loader.mjs +11 -14
  91. package/src/middleware/ssr/ssr_render.mjs +39 -22
  92. package/src/middleware/static/index.mjs +33 -14
  93. package/src/middleware/vite/devserver.mjs +38 -22
  94. package/src/middleware/vite/watcher.mjs +12 -14
  95. package/src/server-cron.mjs +13 -8
  96. package/src/server-dev.mjs +13 -16
  97. package/src/server.mjs +49 -51
  98. package/template/.agent/skills/miolo-app-arch/SKILL.md +218 -0
  99. package/template/.agent/skills/miolo-auth/SKILL.md +450 -0
  100. package/template/.agent/skills/miolo-cli-router/SKILL.md +394 -0
  101. package/template/.agent/skills/miolo-database/SKILL.md +358 -0
  102. package/template/.agent/skills/miolo-react-patterns/SKILL.md +426 -0
  103. package/template/.agent/skills/miolo-routing/SKILL.md +326 -0
  104. package/template/.agent/skills/miolo-schemas/SKILL.md +329 -0
  105. package/template/.agent/skills/miolo-session-context/SKILL.md +397 -0
  106. package/template/.agent/skills/miolo-ssr/SKILL.md +433 -0
  107. package/template/.editorconfig +18 -0
  108. package/template/.env +120 -0
  109. package/template/biome.json +63 -0
  110. package/template/components.json +21 -0
  111. package/template/db/init.sh +89 -0
  112. package/template/db/sql/00_drop.sql +2 -0
  113. package/template/db/sql/01_users.sql +31 -0
  114. package/template/db/sql/02_todos.sql +20 -0
  115. package/template/docker/Dockerfile +13 -0
  116. package/template/docker/docker-compose.yaml +79 -0
  117. package/template/gitignore +42 -0
  118. package/template/jsconfig.json +18 -0
  119. package/template/package.json +88 -0
  120. package/template/postcss.config.js +9 -0
  121. package/template/src/cli/App.jsx +25 -0
  122. package/template/src/cli/components/JsonTreeViewer.jsx +128 -0
  123. package/template/src/cli/components/shadcn-io/spinner/index.jsx +232 -0
  124. package/template/src/cli/components/stepper.jsx +408 -0
  125. package/template/src/cli/components/ui/avatar.jsx +36 -0
  126. package/template/src/cli/components/ui/badge.jsx +31 -0
  127. package/template/src/cli/components/ui/breadcrumb.jsx +97 -0
  128. package/template/src/cli/components/ui/card.jsx +73 -0
  129. package/template/src/cli/components/ui/collapsible.jsx +16 -0
  130. package/template/src/cli/components/ui/dropdown-menu.jsx +179 -0
  131. package/template/src/cli/components/ui/field.jsx +217 -0
  132. package/template/src/cli/components/ui/input.jsx +19 -0
  133. package/template/src/cli/components/ui/label.jsx +17 -0
  134. package/template/src/cli/components/ui/pagination.jsx +99 -0
  135. package/template/src/cli/components/ui/patched/alert.jsx +56 -0
  136. package/template/src/cli/components/ui/patched/button.jsx +45 -0
  137. package/template/src/cli/components/ui/patched/dialog.jsx +114 -0
  138. package/template/src/cli/components/ui/patched/sidebar.jsx +660 -0
  139. package/template/src/cli/components/ui/select.jsx +141 -0
  140. package/template/src/cli/components/ui/separator.jsx +21 -0
  141. package/template/src/cli/components/ui/sheet.jsx +115 -0
  142. package/template/src/cli/components/ui/skeleton.jsx +13 -0
  143. package/template/src/cli/components/ui/sonner.jsx +22 -0
  144. package/template/src/cli/components/ui/switch.jsx +25 -0
  145. package/template/src/cli/components/ui/table.jsx +88 -0
  146. package/template/src/cli/components/ui/textarea.jsx +16 -0
  147. package/template/src/cli/components/ui/tooltip.jsx +45 -0
  148. package/template/src/cli/config/store_keys.mjs +2 -0
  149. package/template/src/cli/context/data/DataContext.jsx +5 -0
  150. package/template/src/cli/context/data/DataProvider.jsx +44 -0
  151. package/template/src/cli/context/data/useBreads.mjs +15 -0
  152. package/template/src/cli/context/data/useDataContext.mjs +4 -0
  153. package/template/src/cli/context/session/SessionContext.mjs +4 -0
  154. package/template/src/cli/context/session/SessionProvider.jsx +31 -0
  155. package/template/src/cli/context/session/makePermissioner.mjs +34 -0
  156. package/template/src/cli/context/session/useSessionContext.mjs +6 -0
  157. package/template/src/cli/context/theme/ThemeContext.mjs +4 -0
  158. package/template/src/cli/context/theme/ThemeProvider.jsx +49 -0
  159. package/template/src/cli/context/theme/useThemeContext.mjs +6 -0
  160. package/template/src/cli/context/ui/UIContext.jsx +5 -0
  161. package/template/src/cli/context/ui/UIProvider.jsx +16 -0
  162. package/template/src/cli/context/ui/useUIContext.mjs +4 -0
  163. package/template/src/cli/context/util.mjs +17 -0
  164. package/template/src/cli/entry-cli.jsx +33 -0
  165. package/template/src/cli/hooks/useIsMobile.mjs +19 -0
  166. package/template/src/cli/hooks/useStoragedState.mjs +63 -0
  167. package/template/src/cli/index.html +29 -0
  168. package/template/src/cli/layout/app-sidebar.jsx +25 -0
  169. package/template/src/cli/layout/main-layout.jsx +63 -0
  170. package/template/src/cli/layout/nav-last-todos.jsx +72 -0
  171. package/template/src/cli/layout/nav-main.jsx +39 -0
  172. package/template/src/cli/layout/nav-user.jsx +105 -0
  173. package/template/src/cli/layout/prop-switcher.jsx +93 -0
  174. package/template/src/cli/lib/utils.mjs +10 -0
  175. package/template/src/cli/pages/Index.jsx +13 -0
  176. package/template/src/cli/pages/IndexOffline.jsx +13 -0
  177. package/template/src/cli/pages/IndexOnline.jsx +18 -0
  178. package/template/src/cli/pages/dash/Dashboard.jsx +29 -0
  179. package/template/src/cli/pages/offline/Login.jsx +43 -0
  180. package/template/src/cli/pages/offline/LoginForm.jsx +115 -0
  181. package/template/src/cli/pages/security/Security.jsx +39 -0
  182. package/template/src/cli/pages/security/SecurityForm.jsx +106 -0
  183. package/template/src/cli/pages/todos/TodoActions.jsx +99 -0
  184. package/template/src/cli/pages/todos/TodoAdd.jsx +43 -0
  185. package/template/src/cli/pages/todos/TodoList.jsx +60 -0
  186. package/template/src/cli/pages/todos/Todos.jsx +23 -0
  187. package/template/src/cli/pages/todos/context/TodosContext.jsx +5 -0
  188. package/template/src/cli/pages/todos/context/TodosProvider.jsx +191 -0
  189. package/template/src/cli/pages/todos/context/useTodosContext.mjs +4 -0
  190. package/template/src/ns/models/Todo.mjs +29 -0
  191. package/template/src/ns/models/TodoList.mjs +8 -0
  192. package/template/src/ns/models/User.mjs +40 -0
  193. package/template/src/server/bot/check_today.mjs +10 -0
  194. package/template/src/server/io/cache/base.mjs +21 -0
  195. package/template/src/server/io/db/filter.mjs +92 -0
  196. package/template/src/server/io/db/todos/delete.mjs +29 -0
  197. package/template/src/server/io/db/todos/find.mjs +13 -0
  198. package/template/src/server/io/db/todos/read.mjs +83 -0
  199. package/template/src/server/io/db/todos/toggle.mjs +37 -0
  200. package/template/src/server/io/db/todos/upsave.mjs +32 -0
  201. package/template/src/server/io/db/triggers/user.mjs +13 -0
  202. package/template/src/server/io/db/users/auth.mjs +132 -0
  203. package/template/src/server/io/db/users/pwd.mjs +38 -0
  204. package/template/src/server/io/db/users/save.mjs +17 -0
  205. package/template/src/server/miolo/auth/basic.mjs +15 -0
  206. package/template/src/server/miolo/auth/guest.mjs +3 -0
  207. package/template/src/server/miolo/auth/passport.mjs +73 -0
  208. package/template/src/server/miolo/cache.mjs +11 -0
  209. package/template/src/server/miolo/cron/foo.mjs +7 -0
  210. package/template/src/server/miolo/cron/index.mjs +28 -0
  211. package/template/src/server/miolo/cron/invalidate.mjs +21 -0
  212. package/template/src/server/miolo/db.mjs +36 -0
  213. package/template/src/server/miolo/http.mjs +14 -0
  214. package/template/src/server/miolo/index.mjs +43 -0
  215. package/template/src/server/miolo/routes/crud.mjs +16 -0
  216. package/template/src/server/miolo/routes/index.mjs +8 -0
  217. package/template/src/server/miolo/ssr/entry-server.jsx +13 -0
  218. package/template/src/server/miolo/ssr/loader.mjs +18 -0
  219. package/template/src/server/routes/index.mjs +66 -0
  220. package/template/src/server/routes/todos/mod.mjs +52 -0
  221. package/template/src/server/routes/todos/read.mjs +45 -0
  222. package/template/src/server/routes/todos/special.mjs +47 -0
  223. package/template/src/server/routes/users/user.mjs +54 -0
  224. package/template/src/server/server.mjs +10 -0
  225. package/template/src/server/utils/crypt.mjs +38 -0
  226. package/template/src/server/utils/io.mjs +15 -0
  227. package/template/src/server/utils/pwdfor.mjs +25 -0
  228. package/template/src/server/utils/schema.mjs +22 -0
  229. package/template/src/static/img/default/profile.png +0 -0
  230. package/template/src/static/img/favicon.ico +0 -0
  231. package/template/src/static/img/miolo_logo.png +0 -0
  232. package/template/src/static/img/miolo_name.png +0 -0
  233. package/template/src/static/public/manifest.json +21 -0
  234. package/template/src/static/public/sw.js +79 -0
  235. package/template/src/static/style/globals.css +156 -0
  236. package/template/src/static/style/json-tree.css +54 -0
  237. package/template/src/static/style/skeleton.css +49 -0
  238. package/bin/prod-build/build-client.mjs +0 -67
  239. package/bin/prod-build/build-server.mjs +0 -58
  240. package/bin/prod-run/restart.mjs +0 -9
  241. package/bin/prod-run/start.mjs +0 -15
  242. package/bin/prod-run/stop.mjs +0 -20
  243. package/src/engines/logger/verify.mjs +0 -22
  244. package/src/middleware/auth/credentials/index.mjs +0 -151
  245. package/src/middleware/auth/credentials/session/index.mjs +0 -24
  246. package/src/middleware/auth/credentials/session/store_koa_redis.mjs +0 -3
@@ -1,5 +1,4 @@
1
- //import IO from 'koa-socket-2'
2
- import { Server } from 'socket.io'
1
+ import { Server } from "socket.io"
3
2
 
4
3
  function init_socket(app, config) {
5
4
  if (config?.enabled !== true) {
@@ -8,60 +7,59 @@ function init_socket(app, config) {
8
7
 
9
8
  const logger = app.context.miolo.logger
10
9
 
11
- logger.info('[socket] Attaching Socket server')
10
+ logger.info("[socket] Attaching Socket server")
12
11
 
13
12
  const io = new Server(app.http.server)
14
13
 
15
- io.on('connection', function (socket) {
16
- logger.debug(`[socket] Connection from ... `) // ${i.ip} ${i.id}`)
17
-
14
+ if (config?.userRooms === true) {
15
+ io.use(async (socket, next) => {
16
+ try {
17
+ const { store, options } = app.context.miolo.session || {}
18
+ if (store && options) {
19
+ // Create a fake Koa context to easily parse the signed cookies
20
+ const ctx = app.createContext(
21
+ socket.request,
22
+ socket.request.res || { headersSent: false }
23
+ )
24
+
25
+ // Read the session cookie (Koa handles signature validation if options.signed is true)
26
+ const sessionCookieValue = ctx.cookies.get(options.key, options)
27
+
28
+ if (sessionCookieValue) {
29
+ // If the cookie is present, koa-session stores the external key directly
30
+ // or sometimes it's base64 encoded. koa-session's decode function:
31
+ const sessionId = sessionCookieValue
32
+
33
+ const session = await store.get(sessionId, undefined, {})
34
+
35
+ if (session?.user) {
36
+ const userId = session.user?.id
37
+ socket.join(`user_${userId}`)
38
+ socket.mioloUser = userId // Attach for convenience
39
+ logger.info(`[socket] Socket ${socket.id} joined room user_${userId}`)
40
+ }
41
+ }
42
+ }
43
+ } catch (err) {
44
+ logger.error(`[socket] Error parsing session: ${err.message}`)
45
+ }
46
+ next()
47
+ })
48
+ }
49
+
50
+ io.on("connection", (socket) => {
51
+ logger.info(`[socket] Connection from ... `) // ${i.ip} ${i.id}`)
52
+
18
53
  if (config?.connection) {
19
54
  config.connection(socket)
20
55
  }
21
-
56
+
22
57
  for (const ns of config?.namespaces || []) {
23
58
  socket.on(ns.name, ns.listener)
24
59
  }
25
60
  })
26
-
27
-
28
- // const getInfo = (ctx) => {
29
- // let i= {id: '', ip: ''}
30
- // try {
31
- // i.id = ctx.socket.id
32
- // } catch (e) {}
33
- // try {
34
- // i.ip = ctx.socket.handshake.address
35
- // } catch (e) {}
36
- // return i
37
- // }
38
-
39
- // const io = new IO({ origins: '*:*'})
40
-
41
- // io.on('connection', function (ctx, data) {
42
- // const logger = ctx.miolo.logger
43
- // const i= getInfo(ctx)
44
- // logger.warn(`[socket] Connection from ${i.ip} ${i.id}`)
45
- // if (config?.connection) {
46
- // config.connection(ctx, data)
47
- // }
48
- // })
49
-
50
- // io.on('disconnect', function (ctx, data) {
51
- // const logger = ctx.miolo.logger
52
- // const i = getInfo(ctx)
53
- // logger.warn(`[socket] Disconnected ${i.ip} ${i.id} => ${data}`)
54
- // })
55
- //
56
- // io.on('error', function (ctx, data) {
57
- // const logger = ctx.miolo.logger
58
- // const i = getInfo(ctx)
59
- // logger.error(`[socket] Error on ${i.ip} ${i.id} => ${data}`)
60
- // })
61
- //
62
- //
63
- // io.attach(app)
64
61
 
62
+ app.context.miolo.io = io
65
63
  }
66
64
 
67
- export {init_socket}
65
+ export { init_socket }
package/src/index.mjs CHANGED
@@ -1,18 +1,23 @@
1
- import { miolo } from './server.mjs'
2
- import { miolo_cron } from './server-cron.mjs'
3
- import { init_emailer_transporter as miolo_emailer} from './engines/emailer/index.mjs'
4
- import { init_logger as miolo_logger } from './engines/logger/index.mjs'
5
- import { init_parser as miolo_parser } from './engines/parser/index.mjs'
1
+ import { cacheiro as miolo_cacher } from "cacheiro"
2
+ import { miolo_db_connection_pg, miolo_db_drop_connections } from "./db-conn.mjs"
3
+ import { init_emailer_transporter as miolo_emailer } from "./engines/emailer/index.mjs"
4
+ import { init_logger as miolo_logger } from "./engines/logger/index.mjs"
5
+ import { init_parser as miolo_parser } from "./engines/parser/index.mjs"
6
+ import { with_miolo_input_schema, with_miolo_output_schema } from "./engines/schema/index.mjs"
7
+ import { miolo } from "./server.mjs"
8
+ import { miolo_cron } from "./server-cron.mjs"
6
9
 
7
- import { cacheiro as miolo_cacher} from 'cacheiro'
8
- import { getConnection as miolo_db_connection} from 'calustra/conn-postgres'
10
+ // import { getConnection as miolo_db_connection_sqlite} from 'calustra/conn-sqlite'
9
11
 
10
12
  export {
11
13
  miolo,
14
+ miolo_cacher,
12
15
  miolo_cron,
16
+ miolo_db_connection_pg,
17
+ miolo_db_drop_connections,
13
18
  miolo_emailer,
14
19
  miolo_logger,
15
20
  miolo_parser,
16
- miolo_cacher,
17
- miolo_db_connection
18
- }
21
+ with_miolo_input_schema,
22
+ with_miolo_output_schema
23
+ }
@@ -1,38 +1,37 @@
1
- import koa_mount from 'koa-mount'
1
+ import koa_mount from "koa-mount"
2
2
 
3
- const _get_credentials = (req) => {
4
- let sauth= req?.headers?.authorization
3
+ const _get_basic_credentials = (req) => {
4
+ let sauth = req?.headers?.authorization
5
5
 
6
- if (! sauth) {
6
+ if (!sauth) {
7
7
  return undefined
8
8
  }
9
-
9
+
10
10
  try {
11
- sauth= sauth.replace('Basic ', '')
12
- try {
13
- sauth= Buffer.from(sauth, 'base64').toString()
14
- } catch(_) {
15
- sauth= atob(sauth)
11
+ sauth = sauth.replace("Basic ", "")
12
+ try {
13
+ sauth = Buffer.from(sauth, "base64").toString()
14
+ } catch (_) {
15
+ sauth = atob(sauth)
16
16
  }
17
- const [username, password]= sauth.split(':')
18
- return {username, password}
19
-
20
- } catch(_) {
17
+ const [username, password] = sauth.split(":")
18
+ return { username, password }
19
+ } catch (_) {
21
20
  return undefined
22
21
  }
23
22
  }
24
23
 
25
- const init_basic_auth_middleware = ( app, options ) => {
26
- let {auth_user, realm, paths} = options
27
- if (! realm) {
28
- realm = 'Secure Area'
24
+ const init_basic_auth_middleware = (app, options) => {
25
+ let { auth_user, realm, paths } = options
26
+ if (!realm) {
27
+ realm = "Secure Area"
29
28
  }
30
29
 
31
30
  async function basic_auth_middleware(ctx, next) {
32
- let au_user
31
+ let aaccount
33
32
  try {
34
- au_user= _get_credentials(ctx.request)
35
- } catch(_) {}
33
+ aaccount = _get_basic_credentials(ctx.request)
34
+ } catch (_) {}
36
35
 
37
36
  const unauth_err = () => {
38
37
  // This will show error logs on the catcher middleware
@@ -46,45 +45,47 @@ const init_basic_auth_middleware = ( app, options ) => {
46
45
  // }
47
46
  //)
48
47
 
49
- ctx.session= {
48
+ ctx.session = {
50
49
  user: undefined,
51
- authenticated: false
50
+ authenticated: false,
51
+ auth_method: undefined
52
52
  }
53
53
 
54
- ctx.body= {
55
- user: undefined,
56
- authenticated: false
54
+ ctx.body = {
55
+ ok: true,
56
+ data: {
57
+ user: undefined,
58
+ authenticated: false
59
+ }
57
60
  }
58
- ctx.response.status= 401
59
- ctx.response.headers['WWW-Authenticate']= 'Basic realm="' + realm.replace(/"/g, '\\"') + '"'
61
+ ctx.response.status = 401
62
+ ctx.response.headers["WWW-Authenticate"] = 'Basic realm="' + realm.replace(/"/g, '\\"') + '"'
60
63
  }
61
64
 
62
- if (! au_user) {
65
+ if (!aaccount) {
63
66
  return unauth_err()
64
67
  }
65
-
66
- const user = await auth_user(au_user.username, au_user.password, app.context.miolo)
67
68
 
68
- if (user === false || user == undefined) {
69
+ const user = await auth_user(aaccount.username, aaccount.password, ctx)
70
+
71
+ if (user === false || user === undefined || user === null) {
69
72
  return unauth_err()
70
73
  }
71
74
 
72
- ctx.session= {
75
+ ctx.session = {
73
76
  user,
74
- authenticated: true
77
+ authenticated: true,
78
+ auth_method: "basic"
75
79
  }
76
80
 
77
81
  await next()
78
82
  }
79
83
 
80
- if (paths == undefined || paths.length == 0) {
84
+ if (paths === undefined || paths.length === 0) {
81
85
  app.use(basic_auth_middleware)
82
86
  } else {
83
- paths.map(p =>
84
- app.use(koa_mount(p, basic_auth_middleware))
85
- )
87
+ paths.map((p) => app.use(koa_mount(p, basic_auth_middleware)))
86
88
  }
87
-
88
89
  }
89
90
 
90
- export {init_basic_auth_middleware}
91
+ export { init_basic_auth_middleware }
@@ -1,29 +1,26 @@
1
+ import Router from "@koa/router"
1
2
 
2
- import Router from '@koa/router'
3
-
4
- const init_custom_auth_middleware = ( app, callback ) => {
5
- const logger= app.context.miolo.logger
3
+ const init_custom_auth_middleware = (app, callback) => {
4
+ const logger = app.context.miolo.logger
6
5
 
7
6
  try {
7
+ const custom_auth_middleware = callback(app)
8
8
 
9
- const custom_auth_middleware= callback(app)
10
-
11
- if (typeof custom_auth_middleware === 'function') {
9
+ if (typeof custom_auth_middleware === "function") {
12
10
  app.use(custom_auth_middleware)
13
11
  } else if (Array.isArray(custom_auth_middleware)) {
14
- const custom_auth_router= new Router()
12
+ const custom_auth_router = new Router()
15
13
 
16
- custom_auth_middleware.map((r) => {
17
- const method= r.method.toLowerCase()
14
+ custom_auth_middleware.forEach((r) => {
15
+ const method = r.method.toLowerCase()
18
16
  custom_auth_router[method](r.url, r.callback)
19
17
  })
20
18
 
21
19
  app.use(custom_auth_router.routes())
22
20
  }
23
-
24
- } catch(err) {
21
+ } catch (err) {
25
22
  logger.error(`Custom auth error: ${err}'`)
26
23
  }
27
24
  }
28
25
 
29
- export {init_custom_auth_middleware}
26
+ export { init_custom_auth_middleware }
@@ -1,26 +1,28 @@
1
- import jwt from 'jwt-simple'
1
+ import jwt from "jwt-simple"
2
2
 
3
3
  function _guest_token_make_with_jwt(session, logger) {
4
- const buid= Math.random().toString()
4
+ const buid = Math.random().toString()
5
5
  let secret = session?.secret
6
6
  if (!secret) {
7
- secret= 'miolo_unsafe_secret'
8
- logger.error('Guest token made with an unsafe secret string. Please, configure your own through session.secret.')
7
+ secret = "miolo_unsafe_secret"
8
+ logger.error(
9
+ "Guest token made with an unsafe secret string. Please, configure your own through session.secret."
10
+ )
9
11
  }
10
-
12
+
11
13
  const payload = {
12
- admin : false,
13
- buid : buid
14
+ admin: false,
15
+ buid: buid
14
16
  }
15
17
  return jwt.encode(payload, secret)
16
18
  }
17
19
 
18
20
  function _get_cookie_properties(session) {
19
21
  let maxAge = session?.options?.maxAge
20
- if (isNaN(maxAge)) {
21
- maxAge= 86400
22
+ if (Number.isNaN(Number(maxAge))) {
23
+ maxAge = 86400
22
24
  }
23
- let expires = new Date()
25
+ const expires = new Date()
24
26
  expires.setSeconds(expires.getSeconds() + maxAge)
25
27
 
26
28
  return {
@@ -29,47 +31,45 @@ function _get_cookie_properties(session) {
29
31
  }
30
32
  }
31
33
 
34
+ const init_guest_auth_middleware = (app, options, session) => {
35
+ const logger = app.context.miolo.logger
32
36
 
33
- const init_guest_auth_middleware = ( app, options, session ) => {
34
- const logger= app.context.miolo.logger
35
-
36
37
  const _make_guest_token = () => {
37
38
  try {
38
- let {make_guest_token} = options
39
- if (make_guest_token!=undefined) {
39
+ const { make_guest_token } = options
40
+ if (make_guest_token !== undefined) {
40
41
  return make_guest_token(session || {})
41
42
  }
42
- } catch(_) {}
43
+ } catch (_) {}
43
44
 
44
45
  return _guest_token_make_with_jwt(session || {}, logger)
45
46
  }
46
47
 
47
48
  async function guest_auth_middleware(ctx, next) {
48
-
49
49
  // Try to get our token from headers (server) or cookies (client)
50
- let token= ctx.cookies.get('token') || ctx.headers['token']
50
+ let token = ctx.cookies.get("token") || ctx.headers.token
51
51
 
52
- if (token===undefined || token.length==0) {
52
+ if (token === undefined || token.length === 0) {
53
53
  token = await _make_guest_token()
54
54
  logger.debug(`Guest token conceeded`)
55
55
  }
56
56
 
57
- const options= _get_cookie_properties(session)
58
- ctx.cookies.set('token', token, options)
57
+ const options = _get_cookie_properties(session)
58
+ ctx.cookies.set("token", token, options)
59
59
 
60
- ctx.session= {
60
+ ctx.session = {
61
61
  user: {
62
- name: 'guest'
62
+ name: "guest"
63
63
  },
64
64
  authenticated: true,
65
+ auth_method: "guest",
65
66
  token
66
- }
67
-
67
+ }
68
+
68
69
  await next()
69
70
  }
70
71
 
71
72
  app.use(guest_auth_middleware)
72
-
73
73
  }
74
74
 
75
- export {init_guest_auth_middleware}
75
+ export { init_guest_auth_middleware }