Browse Source

move worker middleware to backend-core

master
Peter Clement 4 years ago
parent
commit
8a066fb1cb
  1. 4
      packages/backend-core/src/auth.js
  2. 9
      packages/backend-core/src/middleware/adminOnly.js
  3. 5
      packages/backend-core/src/middleware/index.js
  4. 28
      packages/backend-core/src/middleware/joi-validator.js
  5. 2
      packages/server/src/api/controllers/query/validation.js
  6. 2
      packages/server/src/api/routes/utils/validators.js
  7. 2
      packages/worker/src/api/routes/global/auth.js
  8. 6
      packages/worker/src/api/routes/global/configs.js
  9. 4
      packages/worker/src/api/routes/global/email.js
  10. 2
      packages/worker/src/api/routes/global/roles.js
  11. 2
      packages/worker/src/api/routes/global/sessions.js
  12. 4
      packages/worker/src/api/routes/global/templates.js
  13. 4
      packages/worker/src/api/routes/global/users.js
  14. 10
      packages/worker/src/api/routes/global/workspaces.js
  15. 2
      packages/worker/src/api/routes/system/tenants.js

4
packages/backend-core/src/auth.js

@ -18,6 +18,8 @@ const {
ssoCallbackUrl, ssoCallbackUrl,
csrf, csrf,
internalApi, internalApi,
adminOnly,
joiValidator,
} = require("./middleware") } = require("./middleware")
const { invalidateUser } = require("./cache/user") const { invalidateUser } = require("./cache/user")
@ -173,4 +175,6 @@ module.exports = {
refreshOAuthToken, refreshOAuthToken,
updateUserOAuth, updateUserOAuth,
ssoCallbackUrl, ssoCallbackUrl,
adminOnly,
joiValidator,
} }

9
packages/backend-core/src/middleware/adminOnly.js

@ -0,0 +1,9 @@
module.exports = async (ctx, next) => {
if (
!ctx.internal &&
(!ctx.user || !ctx.user.admin || !ctx.user.admin.global)
) {
ctx.throw(403, "Admin user only endpoint.")
}
return next()
}

5
packages/backend-core/src/middleware/index.js

@ -9,7 +9,8 @@ const tenancy = require("./tenancy")
const internalApi = require("./internalApi") const internalApi = require("./internalApi")
const datasourceGoogle = require("./passport/datasource/google") const datasourceGoogle = require("./passport/datasource/google")
const csrf = require("./csrf") const csrf = require("./csrf")
const adminOnly = require("./adminOnly")
const joiValidator = require("./joi-validator")
module.exports = { module.exports = {
google, google,
oidc, oidc,
@ -25,4 +26,6 @@ module.exports = {
google: datasourceGoogle, google: datasourceGoogle,
}, },
csrf, csrf,
adminOnly,
joiValidator,
} }

28
packages/backend-core/src/middleware/joi-validator.js

@ -0,0 +1,28 @@
function validate(schema, property) {
// Return a Koa middleware function
return (ctx, next) => {
if (!schema) {
return next()
}
let params = null
if (ctx[property] != null) {
params = ctx[property]
} else if (ctx.request[property] != null) {
params = ctx.request[property]
}
const { error } = schema.validate(params)
if (error) {
ctx.throw(400, `Invalid ${property} - ${error.message}`)
return
}
return next()
}
}
module.exports.body = schema => {
return validate(schema, "body")
}
module.exports.params = schema => {
return validate(schema, "params")
}

2
packages/server/src/api/controllers/query/validation.js

@ -1,4 +1,4 @@
const joiValidator = require("../../../middleware/joi-validator") const { joiValidator } = require("@budibase/backend-core/auth")
const Joi = require("joi") const Joi = require("joi")
const OPTIONAL_STRING = Joi.string().optional().allow(null).allow("") const OPTIONAL_STRING = Joi.string().optional().allow(null).allow("")

2
packages/server/src/api/routes/utils/validators.js

@ -1,4 +1,4 @@
const joiValidator = require("../../../middleware/joi-validator") const { joiValidator } = require("@budibase/backend-core/auth")
const { DataSourceOperation } = require("../../../constants") const { DataSourceOperation } = require("../../../constants")
const { WebhookType } = require("../../../constants") const { WebhookType } = require("../../../constants")
const { const {

2
packages/worker/src/api/routes/global/auth.js

@ -1,6 +1,6 @@
const Router = require("@koa/router") const Router = require("@koa/router")
const authController = require("../../controllers/global/auth") const authController = require("../../controllers/global/auth")
const joiValidator = require("../../../middleware/joi-validator") const { joiValidator } = require("@budibase/backend-core/auth")
const Joi = require("joi") const Joi = require("joi")
const { updateTenantId } = require("@budibase/backend-core/tenancy") const { updateTenantId } = require("@budibase/backend-core/tenancy")

6
packages/worker/src/api/routes/global/configs.js

@ -1,7 +1,7 @@
const Router = require("@koa/router") const Router = require("@koa/router")
const controller = require("../../controllers/global/configs") const controller = require("../../controllers/global/configs")
const joiValidator = require("../../../middleware/joi-validator") const { joiValidator } = require("@budibase/backend-core/auth")
const adminOnly = require("../../../middleware/adminOnly") const { adminOnly } = require("@budibase/backend-core/auth")
const Joi = require("joi") const Joi = require("joi")
const { Configs } = require("../../../constants") const { Configs } = require("../../../constants")
@ -77,7 +77,7 @@ function buildConfigSaveValidation() {
{ is: Configs.OIDC, then: oidcValidation() } { is: Configs.OIDC, then: oidcValidation() }
], ],
}), }),
}).required().unknown(true), }).required().unknown(true),
) )
} }

4
packages/worker/src/api/routes/global/email.js

@ -1,8 +1,8 @@
const Router = require("@koa/router") const Router = require("@koa/router")
const controller = require("../../controllers/global/email") const controller = require("../../controllers/global/email")
const { EmailTemplatePurpose } = require("../../../constants") const { EmailTemplatePurpose } = require("../../../constants")
const joiValidator = require("../../../middleware/joi-validator") const { joiValidator } = require("@budibase/backend-core/auth")
const adminOnly = require("../../../middleware/adminOnly") const { adminOnly } = require("@budibase/backend-core/auth")
const Joi = require("joi") const Joi = require("joi")
const router = Router() const router = Router()

2
packages/worker/src/api/routes/global/roles.js

@ -1,6 +1,6 @@
const Router = require("@koa/router") const Router = require("@koa/router")
const controller = require("../../controllers/global/roles") const controller = require("../../controllers/global/roles")
const adminOnly = require("../../../middleware/adminOnly") const { adminOnly } = require("@budibase/backend-core/auth")
const router = Router() const router = Router()

2
packages/worker/src/api/routes/global/sessions.js

@ -1,6 +1,6 @@
const Router = require("@koa/router") const Router = require("@koa/router")
const controller = require("../../controllers/global/sessions") const controller = require("../../controllers/global/sessions")
const adminOnly = require("../../../middleware/adminOnly") const { adminOnly } = require("@budibase/backend-core/auth")
const router = Router() const router = Router()

4
packages/worker/src/api/routes/global/templates.js

@ -1,9 +1,9 @@
const Router = require("@koa/router") const Router = require("@koa/router")
const controller = require("../../controllers/global/templates") const controller = require("../../controllers/global/templates")
const joiValidator = require("../../../middleware/joi-validator") const { joiValidator } = require("@budibase/backend-core/auth")
const Joi = require("joi") const Joi = require("joi")
const { TemplatePurpose, TemplateTypes } = require("../../../constants") const { TemplatePurpose, TemplateTypes } = require("../../../constants")
const adminOnly = require("../../../middleware/adminOnly") const { adminOnly } = require("@budibase/backend-core/auth")
const router = Router() const router = Router()

4
packages/worker/src/api/routes/global/users.js

@ -1,7 +1,7 @@
const Router = require("@koa/router") const Router = require("@koa/router")
const controller = require("../../controllers/global/users") const controller = require("../../controllers/global/users")
const joiValidator = require("../../../middleware/joi-validator") const { joiValidator } = require("@budibase/backend-core/auth")
const adminOnly = require("../../../middleware/adminOnly") const { adminOnly } = require("@budibase/backend-core/auth")
const Joi = require("joi") const Joi = require("joi")
const cloudRestricted = require("../../../middleware/cloudRestricted") const cloudRestricted = require("../../../middleware/cloudRestricted")
const { users } = require("../validation") const { users } = require("../validation")

10
packages/worker/src/api/routes/global/workspaces.js

@ -1,7 +1,7 @@
const Router = require("@koa/router") const Router = require("@koa/router")
const controller = require("../../controllers/global/workspaces") const controller = require("../../controllers/global/workspaces")
const joiValidator = require("../../../middleware/joi-validator") const { joiValidator } = require("@budibase/backend-core/auth")
const adminOnly = require("../../../middleware/adminOnly") const { adminOnly } = require("@budibase/backend-core/auth")
const Joi = require("joi") const Joi = require("joi")
const router = Router() const router = Router()
@ -17,9 +17,9 @@ function buildWorkspaceSaveValidation() {
roles: Joi.object({ roles: Joi.object({
default: Joi.string().optional(), default: Joi.string().optional(),
app: Joi.object() app: Joi.object()
.pattern(/.*/, Joi.string()) .pattern(/.*/, Joi.string())
.required() .required()
.unknown(true), .unknown(true),
}).unknown(true).optional(), }).unknown(true).optional(),
}).required().unknown(true)) }).required().unknown(true))
} }

2
packages/worker/src/api/routes/system/tenants.js

@ -1,6 +1,6 @@
const Router = require("@koa/router") const Router = require("@koa/router")
const controller = require("../../controllers/system/tenants") const controller = require("../../controllers/system/tenants")
const adminOnly = require("../../../middleware/adminOnly") const { adminOnly } = require("@budibase/backend-core/auth")
const router = Router() const router = Router()

Loading…
Cancel
Save