fix: wip
All checks were successful
/ build (map[dockerfile:./services/app/Dockerfile name:app]) (push) Successful in 1m3s
/ build (map[dockerfile:./services/api/Dockerfile name:api]) (push) Successful in 2m19s
/ build (map[dockerfile:./services/tasks/Dockerfile name:tasks]) (push) Successful in 2m11s
/ build (map[dockerfile:./services/web/Dockerfile name:web]) (push) Successful in 2m8s
/ build (map[dockerfile:./services/watchers/Dockerfile name:watchers]) (push) Successful in 2m15s
/ deploy (push) Successful in 11s
/ build (map[dockerfile:./services/files/Dockerfile name:files]) (push) Successful in 2m5s
/ build (map[dockerfile:./services/hasura/Dockerfile name:hasura]) (push) Successful in 2m4s

This commit is contained in:
devthejo 2025-07-01 10:05:08 +02:00
parent 83b971890a
commit 02cb943a93
4 changed files with 12 additions and 7 deletions

View file

@ -3,7 +3,7 @@ const getHasuraClaimsFromJWT = require("@modjo/hasura/utils/jwt/get-hasura-claim
const { ctx } = require("@modjo/core") const { ctx } = require("@modjo/core")
const { reqCtx } = require("@modjo/express/ctx") const { reqCtx } = require("@modjo/express/ctx")
module.exports = function () { module.exports = function (services) {
const castIntVars = ["deviceId", "userId"] const castIntVars = ["deviceId", "userId"]
function sessionVarsFromClaims(claims) { function sessionVarsFromClaims(claims) {
const session = { ...claims } const session = { ...claims }
@ -48,12 +48,14 @@ module.exports = function () {
"Allowing expired JWT for meta.auth-token scope" "Allowing expired JWT for meta.auth-token scope"
) )
const req = reqCtx.get("req") const req = reqCtx.get("req")
const authTokenHeader = req?.headers?.["x-auth-token"] const authTokenJWT = req?.headers?.["x-auth-token"]
if (!authTokenHeader) { if (!authTokenJWT) {
return false return false
} }
const authToken =
services.authTokenHandler.decodeAuthToken(authTokenJWT)
// Create a session that indicates auth token processing is needed // Create a session that indicates auth token processing is needed
const session = { isAuthTokenRequest: true, authToken: authTokenHeader } const session = { isAuthTokenRequest: true, authToken }
reqCtx.set("session", session) reqCtx.set("session", session)
return true return true
} }

View file

@ -3,7 +3,7 @@ module.exports = async function ({ services: { authTokenHandler } }) {
const { authTokenJwt, phoneModel = null, deviceUuid = null } = req.body const { authTokenJwt, phoneModel = null, deviceUuid = null } = req.body
// Validate the auth token JWT and extract the auth token // Validate the auth token JWT and extract the auth token
const authToken = authTokenHandler.validateAuthToken(authTokenJwt) const authToken = authTokenHandler.decodeAuthToken(authTokenJwt)
// Get or create user session (userId, deviceId, roles) // Get or create user session (userId, deviceId, roles)
const { userId, deviceId, roles } = const { userId, deviceId, roles } =

View file

@ -64,6 +64,9 @@ module.exports = function ({ services: { authTokenHandler } }) {
}) })
} catch (error) { } catch (error) {
logger.error({ error: error.message }, "Failed to process auth token") logger.error({ error: error.message }, "Failed to process auth token")
if (httpError.isHttpError(error)) {
throw error
}
throw httpError(401, "Invalid auth token") throw httpError(401, "Invalid auth token")
} }
} else if (session && session.userId && session.deviceId) { } else if (session && session.userId && session.deviceId) {

View file

@ -10,7 +10,7 @@ module.exports = ({ services }) => {
const { claimsNamespace, jwtExpirationInHours } = config const { claimsNamespace, jwtExpirationInHours } = config
function validateAuthToken(authTokenJwt) { function decodeAuthToken(authTokenJwt) {
try { try {
const { authToken } = jwtDecode(authTokenJwt) const { authToken } = jwtDecode(authTokenJwt)
return authToken return authToken
@ -162,7 +162,7 @@ module.exports = ({ services }) => {
} }
return { return {
validateAuthToken, decodeAuthToken,
getOrCreateUserSession, getOrCreateUserSession,
generateUserJwt, generateUserJwt,
} }