diff --git a/app/api/group/delete.js b/app/api/group/delete.js index 90521fb44e445e0b7e801106023bb5bafb879699..5a8c7cd09ba653d1c5a7c24cb6cfe38f32d2a6eb 100644 --- a/app/api/group/delete.js +++ b/app/api/group/delete.js @@ -1,51 +1,42 @@ 'use strict' -const groupService = require('../../dal/groupService') - -const logger = require('../../utils/format') -const util = require('util') +const groupService = require('../../dal/groupService'); +const logger = require('../../utils/logger'); const Group = { async deleteGroup(ctx) { try { - ctx.body = await groupService.deleteGroup(ctx.request.body) - ctx.status = 201 - logger.info('group is deleted successfully!') + ctx.body = await groupService.deleteGroup(ctx.request.body); + ctx.status = 201; + logger.info('Group deleted.'); } catch (error) { - ctx.body = error.response || 'erroror occurred!' - ctx.status = 500 - logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`) + throw error; } }, async deleteGroupPolicy(ctx) { try { - ctx.body = await groupService.deleteGroupPolicy(ctx.request.body) - ctx.status = 201 - logger.info('GroupPolicy is deleted successfully!') + ctx.body = await groupService.deleteGroupPolicy(ctx.request.body); + ctx.status = 201; + logger.info('Group policy deleted.'); } catch (error) { - ctx.body = error.response || 'erroror occurred!' - ctx.status = 500 - logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`) + throw error; } }, async deleteGroupUser(ctx) { try { - ctx.body = await groupService.deleteGroupUser(ctx.request.body) - ctx.status = 201 - logger.info('GroupUser is deleted successfully!') + ctx.body = await groupService.deleteGroupUser(ctx.request.body); + ctx.status = 201; + logger.info('Group user deleted.'); } catch (error) { - ctx.body = error.response || 'erroror occurred!' - ctx.status = 500 - logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`) + throw error; } }, -} - +}; module.exports = { - deleteGroup : Group.deleteGroup, + deleteGroup : Group.deleteGroup, deleteGroupPolicy: Group.deleteGroupPolicy, deleteGroupUser: Group.deleteGroupUser -} \ No newline at end of file +}; diff --git a/app/api/group/get.js b/app/api/group/get.js index d380c1008c067bbba93b2511efda5110a631df0b..8a99ad0512411e53234e463a89a0ed1f2d27477f 100644 --- a/app/api/group/get.js +++ b/app/api/group/get.js @@ -1,51 +1,42 @@ 'use strict' -const groupService = require('../../dal/groupService') - -const logger = require('../../utils/format') -const util = require('util') +const groupService = require('../../dal/groupService'); +const logger = require('../../utils/logger'); const Group = { - async groups(ctx) { try { - ctx.body = await groupService.groups(ctx.request.body) - ctx.status = 201 - logger.info('groups are fetched successfully!') + ctx.body = await groupService.groups(); + ctx.status = 201; + logger.info('Groups fetched.'); } catch (error) { - ctx.body = error.response || 'erroror occurred!' - ctx.status = 500 - logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`) + throw error; } }, async groupPolicies(ctx) { try { - ctx.body = await groupService.groupPolicies(ctx.request.body) - ctx.status = 201 - logger.info('groupPolicies are fetched successfully!') + ctx.body = await groupService.groupPolicies(); + ctx.status = 201; + logger.info('Group policies fetched.'); } catch (error) { - ctx.body = error.response || 'erroror occurred!' - ctx.status = 500 - logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`) + throw error; } }, async groupUsers(ctx) { try { - ctx.body = await groupService.groupUsers(ctx.request.body) - ctx.status = 201 - logger.info('groupUsers are fetched successfully!') + ctx.body = await groupService.groupUsers(ctx.request.body); + ctx.status = 201; + logger.info('Group users fetched.'); } catch (error) { - ctx.body = error.response || 'erroror occurred!' - ctx.status = 500 - logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`) + throw error; } } -} +}; module.exports = { - groups: Group.groups, + groups: Group.groups, groupPolicies: Group.groupPolicies, groupUsers: Group.groupUsers, -} \ No newline at end of file +}; diff --git a/app/api/group/index.js b/app/api/group/index.js index bb15fd2750badfafa59dfa725b41a86bb897a0dd..32fb0668b48efeb86f601558977fb064eb9f6388 100644 --- a/app/api/group/index.js +++ b/app/api/group/index.js @@ -1,9 +1,10 @@ 'use strict' -const { groups, groupUsers, groupPolicies } = require('./get') -const { createGroup, createGroupPolicy, createGroupUser } = require('./post') -const { deleteGroup, deleteGroupPolicy, deleteGroupUser } = require('./delete') -const { updateGroup, updateGroupPolicy, updateGroupUser } = require('./update') +const { groups, groupUsers, groupPolicies } = require('./get'); +const { createGroup, createGroupPolicy, createGroupUser } = require('./post'); +const { deleteGroup, deleteGroupPolicy, deleteGroupUser } = require('./delete'); +const { updateGroup, updateGroupPolicy, updateGroupUser } = require('./update'); + const GroupHandler = { groups, groupUsers, @@ -17,6 +18,6 @@ const GroupHandler = { updateGroup, updateGroupPolicy, updateGroupUser -} +}; -module.exports = GroupHandler \ No newline at end of file +module.exports = GroupHandler; diff --git a/app/api/group/post.js b/app/api/group/post.js index 76f4e172bf2b32d52fd63e9dd499af3472dfa99e..dd0a5b530a1994c9476e5affc2d97a53a5af7e65 100644 --- a/app/api/group/post.js +++ b/app/api/group/post.js @@ -1,48 +1,42 @@ 'use strict' -const groupService = require('../../dal/groupService') - -const logger = require('../../utils/format') -const util = require('util') +const groupService = require('../../dal/groupService'); +const logger = require('../../utils/logger'); const Group = { async createGroup(ctx) { try { - ctx.body = await groupService.createGroup(ctx.request.body) - ctx.status = 201 - logger.info('group created successfully!') + ctx.body = await groupService.createGroup(ctx.request.body); + ctx.status = 201; + logger.info('Group created.'); } catch (error) { - ctx.body = error || 'error occurred!' - ctx.status = 500 - logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`) + throw error; } }, + async createGroupPolicy(ctx) { try { - ctx.body = await groupService.createGroupPolicy(ctx.request.body) - ctx.status = 201 - logger.info('GroupPolicy created successfully!') + ctx.body = await groupService.createGroupPolicy(ctx.request.body); + ctx.status = 201; + logger.info('Assigned policy to group.'); } catch (error) { - ctx.body = error || 'error occurred!' - ctx.status = 500 - logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`) + throw error; } }, + async createGroupUser(ctx) { try { - ctx.body = await groupService.createGroupUser(ctx.request.body) - ctx.status = 201 - logger.info('GroupUser created successfully!') + ctx.body = await groupService.createGroupUser(ctx.request.body); + ctx.status = 201; + logger.info('Assigned user to group.'); } catch (error) { - ctx.body = error || 'error occurred!' - ctx.status = 500 - logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`) + throw error; } } -} +}; module.exports = { createGroup: Group.createGroup, - createGroupPolicy: Group.createGroupPolicy, - createGroupUser: Group.createGroupUser, -} \ No newline at end of file + createGroupPolicy: Group.createGroupPolicy, + createGroupUser: Group.createGroupUser, +}; diff --git a/app/api/group/update.js b/app/api/group/update.js index 880fffbb2e3d19ab0cc91ee9b223b92df8f9d7b3..6241040bfbb0c205c72932040f0bba23b7979678 100644 --- a/app/api/group/update.js +++ b/app/api/group/update.js @@ -1,50 +1,42 @@ 'use strict' -const groupService = require('../../dal/groupService') - -const logger = require('../../utils/format') -const util = require('util') +const groupService = require('../../dal/groupService'); +const logger = require('../../utils/logger'); const Group = { async updateGroup(ctx) { try { - ctx.body = await groupService.updateGroup(ctx.request.body) - ctx.status = 201 - logger.info('group is updated successfully!') + ctx.body = await groupService.updateGroup(ctx.request.body); + ctx.status = 201; + logger.info('Group updated.'); } catch (error) { - ctx.body = error.response || 'erroror occurred!' - ctx.status = 500 - logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`) + throw error; } }, async updateGroupPolicy(ctx) { try { - ctx.body = await groupService.updateGroupPolicy(ctx.request.body) - ctx.status = 201 - logger.info('GroupPolicy is updated successfully!') + ctx.body = await groupService.updateGroupPolicy(ctx.request.body); + ctx.status = 201; + logger.info('Group policy updated.'); } catch (error) { - ctx.body = error.response || 'erroror occurred!' - ctx.status = 500 - logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`) + throw error; } }, async updateGroupUser(ctx) { try { - ctx.body = await groupService.updateGroupUser(ctx.request.body) - ctx.status = 201 - logger.info('GroupUser is updated successfully!') + ctx.body = await groupService.updateGroupUser(ctx.request.body); + ctx.status = 201; + logger.info('Group user updated.'); } catch (error) { - ctx.body = error.response || 'erroror occurred!' - ctx.status = 500 - logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`) + throw error; } }, -} +}; module.exports = { updateGroup: Group.updateGroup, updateGroupPolicy: Group.updateGroupPolicy, updateGroupUser: Group.updateGroupUser, -} +}; diff --git a/app/api/index.js b/app/api/index.js index 96dbbe4159f8cb082e8da7b49ec35d5adf8a9b09..a69d35fc0717d34a1f10da4774b1e28a44f88e00 100644 --- a/app/api/index.js +++ b/app/api/index.js @@ -1,103 +1,106 @@ 'use strict' -const Router = require("koa-router") -const bodyParser = require("koa-bodyparser") +const Router = require("koa-router"); +const bodyParser = require("koa-bodyparser"); +/* const { keycloak } = require('../../init-keycloak') */ -const { keycloak } = require('../../init-keycloak') +// Handlers +const userHandler = require('./users'); +const roleHandler = require('./roles'); +const allocationRoleHandler = require('./role-user'); +const searchHistoryHandler = require('./user-search-history'); +const userRequestHandler = require('./user-requests'); +const groupHandler = require('./group'); +const policyHandler = require('./policy'); +const UserFieldsDisplaySettingsHandler = require("./user-fields-display-settings"); -// handlers -const userHandler = require('./users') -const roleHandler = require('./roles') -const allocationRoleHandler = require('./role-user') -const searchHistoryHandler = require('./user-search-history') -const userRequestHandler = require('./user-requests') -const groupHandler = require('./group') -const policyHandler = require('./policy') -const { groups } = require("../dal/groupService") -const routers = new Router() +const routers = new Router(); + +routers.use(bodyParser()); -routers.use(bodyParser()) routers.get('/healthcheck', (ctx) => { - // ctx.body = 'inra.paca.gatekeeper is up!' - console.log('consul hit!!') - ctx.res.statusCode = 200 - ctx.res.end('OK!') -}) + ctx.res.statusCode = 200; + ctx.res.end('OK'); +}); -// user -routers.post('/user', userHandler.addNewUser) -routers.post('/user/findOne',/* keycloak.protect(),*/ userHandler.user) -routers.get('/user/find',/* keycloak.protect(),*/ userHandler.users) -routers.delete('/user/delete',/* keycloak.protect(),*/ userHandler.deleteUser) -routers.put('/user/update',/* keycloak.protect(),*/ userHandler.update) -routers.post('/user/kcid', /* keycloak.protect(),*/ userHandler.kcId) -routers.post('/user/detail', /* keycloak.protect(),*/ userHandler.detail) -routers.post('/user/assigned-by-role', userHandler.getAssignedUserByRole) -routers.post('/user/send-mail', userHandler.sendMail) -routers.post('/user/reset-password', userHandler.resetPassword) +// Users +routers.post('/user', userHandler.create); +routers.post('/user/findOne',/* keycloak.protect(),*/ userHandler.user); +routers.get('/user/find',/* keycloak.protect(),*/ userHandler.users); +routers.delete('/user/delete',/* keycloak.protect(),*/ userHandler.deleteUser); +routers.put('/user/update',/* keycloak.protect(),*/ userHandler.update); +routers.post('/user/kcid', /* keycloak.protect(),*/ userHandler.kcId); +routers.post('/user/detail', /* keycloak.protect(),*/ userHandler.detail); +routers.post('/user/assigned-by-role', userHandler.getAssignedUserByRole); +routers.post('/user/send-mail', userHandler.sendMail); +routers.post('/user/reset-password', userHandler.resetPassword); -// System User -routers.post('/user/create-system-user', userHandler.createSystemUser) -routers.get('/user/with-groups-and-roles', userHandler.usersWithGroupAndRole) -routers.post('/user/one-with-groups-and-roles', userHandler.userWithGroupAndRole) +// System admin user +routers.post('/user/create-system-user', userHandler.createSystemUser); +routers.get('/user/with-groups-and-roles', userHandler.usersWithGroupAndRole); +routers.post('/user/one-with-groups-and-roles', userHandler.userWithGroupAndRole); -// search-history -routers.post('/user/add-history', searchHistoryHandler.add) -routers.post('/user/fetch-history', searchHistoryHandler.fetch) -routers.delete('/user/delete-history', searchHistoryHandler.deleteH) +// Search history +routers.post('/user/add-history', searchHistoryHandler.create); +routers.post('/user/fetch-history', searchHistoryHandler.fetch); +routers.delete('/user/delete-history', searchHistoryHandler.deleteUserSearchHistory); -// user requests -routers.post('/user/create-request', userRequestHandler.createRequest) -routers.delete('/user/delete-request', userRequestHandler.deleteRequest) -routers.post('/user/process-request', userRequestHandler.processRequest) -routers.get('/user/list-requests', userRequestHandler.fetchRequests) -routers.post('/user/list-requests-by-user', userRequestHandler.fetchRequestsByUser) -routers.get('/user/list-pending-requests', userRequestHandler.fetchPendingRequests) +// User fields display settings +routers.post('/user/fields-display-settings/', /* keycloak.protect(),*/ UserFieldsDisplaySettingsHandler.createUserFieldsDisplaySettings); +routers.get('/user/fields-display-settings/:userId',/* keycloak.protect(),*/ UserFieldsDisplaySettingsHandler.findUserFieldsDisplaySettings); +routers.get('/user/fields-display-settings/',/* keycloak.protect(),*/ UserFieldsDisplaySettingsHandler.findUsersFieldsDisplaySettings); +routers.put('/user/fields-display-settings/',/* keycloak.protect(),*/ UserFieldsDisplaySettingsHandler.updateUserFieldsDisplaySettings); +routers.delete('/user/fields-display-settings/:userId',/* keycloak.protect(),*/ UserFieldsDisplaySettingsHandler.deleteUserFieldsDisplaySettings); -// group -routers.post('/user/groups', groupHandler.groups) -routers.post('/user/group-policies', groupHandler.groupPolicies) -routers.post('/user/group-users', groupHandler.groupUsers) -routers.post('/user/add-group', groupHandler.createGroup) -routers.post('/user/add-group-policy', groupHandler.createGroupPolicy) -routers.post('/user/add-group-user', groupHandler.createGroupUser) -routers.put('/user/update-group', groupHandler.updateGroup) -routers.put('/user/update-group-policy', groupHandler.updateGroupPolicy) -routers.put('/user/update-group-user', groupHandler.updateGroupUser) -routers.delete('/user/delete-group', groupHandler.deleteGroup) -routers.delete('/user/delete-group-policy', groupHandler.deleteGroupPolicy) -routers.delete('/user/delete-group-user', groupHandler.deleteGroupUser) +// User requests +routers.post('/user/create-request', userRequestHandler.createRequest); +routers.delete('/user/delete-request', userRequestHandler.deleteRequest); +routers.post('/user/process-request', userRequestHandler.processRequest); +routers.get('/user/list-requests', userRequestHandler.fetchRequests); +routers.post('/user/list-requests-by-user', userRequestHandler.fetchRequestsByUser); +routers.get('/user/list-pending-requests', userRequestHandler.fetchPendingRequests); -// policy -routers.post('/policy/add', policyHandler.createPolicy) -routers.delete('/policy/delete', policyHandler.deletePolicy) -routers.put('/policy/update', policyHandler.updatePolicy) -routers.get('/policy/list', policyHandler.policies) -routers.post('/policy/list-by-user', policyHandler.policiesByUser) -routers.post('/policy/assigned-fields', policyHandler.assignedPolicies) -routers.get('/policy/policies-with-sources', policyHandler.getPoliciesWithSources) -routers.post('/policy/policies-with-sources-by-user', policyHandler.getPoliciesWithSourcesByUser) -routers.post('/policy/policies-with-groups', policyHandler.getGroupDetailsByPolicy) -routers.post('/policyField/add', policyHandler.createPolicyField) -routers.delete('/policyField/delete', policyHandler.deletePolicyField) -routers.put('/policyField/update', policyHandler.updatePolicyField) -routers.get('/policyField/list', policyHandler.policyFields) -routers.post('/policySource/add', policyHandler.createPolicySource) -// role -routers.post('/role',/* keycloak.protect(),*/ roleHandler.addNewRole) -routers.get('/role/find', /* keycloak.protect(),*/ roleHandler.roles) -routers.get('/role/findOne', /* keycloak.protect(),*/ roleHandler.role) -routers.delete('/role/delete', /* keycloak.protect(),*/ roleHandler.deleteRole) -routers.put('/role/update', /* keycloak.protect(),*/ roleHandler.update) +// Groups +routers.post('/user/groups', groupHandler.groups); +routers.post('/user/group-policies', groupHandler.groupPolicies); +routers.post('/user/group-users', groupHandler.groupUsers); +routers.post('/user/add-group', groupHandler.createGroup); +routers.post('/user/add-group-policy', groupHandler.createGroupPolicy); +routers.post('/user/add-group-user', groupHandler.createGroupUser); +routers.put('/user/update-group', groupHandler.updateGroup); +routers.put('/user/update-group-policy', groupHandler.updateGroupPolicy); +routers.put('/user/update-group-user', groupHandler.updateGroupUser); +routers.delete('/user/delete-group', groupHandler.deleteGroup); +routers.delete('/user/delete-group-policy', groupHandler.deleteGroupPolicy); +routers.delete('/user/delete-group-user', groupHandler.deleteGroupUser); -// role-user -routers.post('/allocate-role-to-user', /* keycloak.protect(),*/allocationRoleHandler.allocateRole) -routers.post('/allocatedRoles', /* keycloak.protect(),*/allocationRoleHandler.allocatedRoles) -routers.put('/allocatedRoles/update', /* keycloak.protect(),*/allocationRoleHandler.update) -routers.delete('/allocatedRoles/delete',/* keycloak.protect(),*/allocationRoleHandler.deleteAllocatedRole) +// Policies +routers.post('/policy/add', policyHandler.createPolicy); +routers.delete('/policy/delete', policyHandler.deletePolicy); +routers.put('/policy/update', policyHandler.updatePolicy); +routers.get('/policy/list', policyHandler.policies); +routers.post('/policy/list-by-user', policyHandler.policiesByUser); +routers.post('/policy/assigned-fields', policyHandler.assignedPolicies); +routers.get('/policy/policies-with-sources', policyHandler.getPoliciesWithSources); +routers.post('/policy/policies-with-sources-by-user', policyHandler.getPoliciesWithSourcesByUser); +routers.post('/policy/policies-with-groups', policyHandler.getGroupDetailsByPolicy); +routers.post('/policyField/add', policyHandler.createPolicyField); +routers.delete('/policyField/delete', policyHandler.deletePolicyField); +routers.put('/policyField/update', policyHandler.updatePolicyField); +routers.get('/policyField/list', policyHandler.policyFields); +routers.post('/policySource/add', policyHandler.createPolicySource); -// user-resource +// Roles +routers.post('/role',/* keycloak.protect(),*/ roleHandler.createRole); +routers.get('/role/find', /* keycloak.protect(),*/ roleHandler.roles); +routers.get('/role/findOne', /* keycloak.protect(),*/ roleHandler.role); +routers.delete('/role/delete', /* keycloak.protect(),*/ roleHandler.deleteRole); +routers.put('/role/update', /* keycloak.protect(),*/ roleHandler.update); -// role-field +// Role allocation to users +routers.post('/allocate-role-to-user', /* keycloak.protect(),*/allocationRoleHandler.create); +routers.post('/allocatedRoles', /* keycloak.protect(),*/allocationRoleHandler.allocatedRoles); +routers.put('/allocatedRoles/update', /* keycloak.protect(),*/allocationRoleHandler.update); +routers.delete('/allocatedRoles/delete',/* keycloak.protect(),*/allocationRoleHandler.deleteAllocatedRole); -module.exports = routers +module.exports = routers; diff --git a/app/api/policy/delete.js b/app/api/policy/delete.js index 5b7b3e3e36edbac4703e2312cdb3496cdf4cbe8f..4a75dceb9babc969419b910195765a0bd9badcaa 100644 --- a/app/api/policy/delete.js +++ b/app/api/policy/delete.js @@ -1,38 +1,31 @@ 'use strict' -const policyService = require('../../dal/policyService') - -const logger = require('../../utils/format') -const util = require('util') +const policyService = require('../../dal/policyService'); +const logger = require('../../utils/logger'); const Policy = { - async deletePolicy(ctx) { try { - ctx.body = await policyService.deletePolicy(ctx.request.body) - ctx.status = 201 - logger.info('Policy is listed successfully!') + ctx.body = await policyService.deletePolicy(ctx.request.body); + ctx.status = 201; + logger.info('Policy deleted.'); } catch (error) { - ctx.body = error.response || 'erroror occurred!' - ctx.status = 500 - logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`) + throw error; } }, async deletePolicyField(ctx) { try { - ctx.body = await policyService.deletePolicyField(ctx.request.body) - ctx.status = 201 - logger.info('PolicyField is listed successfully!') + ctx.body = await policyService.deletePolicyField(ctx.request.body); + ctx.status = 201; + logger.info('PolicyField deleted.'); } catch (error) { - ctx.body = error.response || 'erroror occurred!' - ctx.status = 500 - logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`) + throw error; } } -} +}; module.exports = { deletePolicy: Policy.deletePolicy, deletePolicyField: Policy.deletePolicyField -} \ No newline at end of file +}; diff --git a/app/api/policy/get.js b/app/api/policy/get.js index b73c29d47892ac9ff15022645699ee4a5080ca28..61abfad228e78a6f2b9cd79b852c89c809b82455 100644 --- a/app/api/policy/get.js +++ b/app/api/policy/get.js @@ -1,72 +1,59 @@ 'use strict' -const policyService = require('../../dal/policyService') - -const logger = require('../../utils/format') -const util = require('util') +const policyService = require('../../dal/policyService'); +const logger = require('../../utils/logger'); const Policy = { - async policies(ctx) { try { - ctx.body = await policyService.policies(ctx.request.body) - ctx.status = 201 - logger.info('Policy is listed successfully!') + ctx.body = await policyService.policies(); + ctx.status = 201; + logger.info('Policies fetched.'); } catch (error) { - ctx.body = error.response || 'erroror occurred!' - ctx.status = 500 - logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`) + throw error; } }, async policyFields(ctx) { try { - ctx.body = await policyService.policyFields(ctx.request.body) - ctx.status = 201 - logger.info('PolicyField is listed successfully!') + ctx.body = await policyService.policyFields(); + ctx.status = 201; + logger.info('Policy fields fetched.'); } catch (error) { - ctx.body = error.response || 'erroror occurred!' - ctx.status = 500 - logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`) + throw error; } }, async assignedPolicies(ctx) { try { - ctx.body = await policyService.getAssignedPolicies(ctx.request.body) - ctx.status = 201 - logger.info('assignedPolicies are listed successfully!') + ctx.body = await policyService.getAssignedPolicies(ctx.request.body); + ctx.status = 201; + logger.info('Assigned policies fetched.'); } catch (error) { - ctx.body = error.response || 'erroror occurred!' - ctx.status = 500 - logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`) + throw error; } }, async getPoliciesWithSources(ctx) { try { - ctx.body = await policyService.getPoliciesWithSources(ctx.request.body) - ctx.status = 201 - logger.info('PoliciesWithSources are listed successfully!') + ctx.body = await policyService.getPoliciesWithSources(); + ctx.status = 201; + logger.info('Policies with sources fetched.'); } catch (error) { - ctx.body = error.response || 'erroror occurred!' - ctx.status = 500 - logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`) + throw error; } }, async getGroupDetailsByPolicy(ctx) { try { - ctx.body = await policyService.getGroupDetailsByPolicy(ctx.request.body) - ctx.status = 201 - logger.info('Group Details by policy are listed successfully!') + ctx.body = await policyService.getGroupDetailsByPolicy(ctx.request.body); + ctx.status = 201; + logger.info('Group details by policy fetched.'); } catch (error) { - ctx.body = error.response || 'erroror occurred!' - ctx.status = 500 - logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`) + throw error; } } -} +}; module.exports = { policies: Policy.policies, @@ -74,4 +61,4 @@ module.exports = { assignedPolicies: Policy.assignedPolicies, getPoliciesWithSources: Policy.getPoliciesWithSources, getGroupDetailsByPolicy: Policy.getGroupDetailsByPolicy -} \ No newline at end of file +}; diff --git a/app/api/policy/post.js b/app/api/policy/post.js index 41a26e1ddf10f4d9911a977e2f3b030510bac456..a04c6bb89819b12671c987d64ade4acbfd4227ce 100644 --- a/app/api/policy/post.js +++ b/app/api/policy/post.js @@ -1,72 +1,59 @@ 'use strict' -const policyService = require('../../dal/policyService') - -const logger = require('../../utils/format') -const util = require('util') +const policyService = require('../../dal/policyService'); +const logger = require('../../utils/logger'); const Policy = { - async createPolicy(ctx) { try { - ctx.body = await policyService.createPolicy(ctx.request.body) - ctx.status = 201 - logger.info('Policy is created successfully!') + ctx.body = await policyService.createPolicy(ctx.request.body); + ctx.status = 201; + logger.info('Policy created.'); } catch (error) { - ctx.body = error.response || 'erroror occurred!' - ctx.status = 500 - logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`) + throw error; } }, async createPolicyField(ctx) { try { - ctx.body = await policyService.createPolicyField(ctx.request.body) - ctx.status = 201 - logger.info('PolicyField is created successfully!') + ctx.body = await policyService.createPolicyField(ctx.request.body); + ctx.status = 201; + logger.info('PolicyField created.'); } catch (error) { - ctx.body = error.response || 'erroror occurred!' - ctx.status = 500 - logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`) + throw error; } }, async createPolicySource(ctx) { try { - ctx.body = await policyService.createPolicySource(ctx.request.body) - ctx.status = 201 - logger.info('PolicySource is created successfully!') + ctx.body = await policyService.createPolicySource(ctx.request.body); + ctx.status = 201; + logger.info('PolicySource created.'); } catch (error) { - ctx.body = error.response || 'erroror occurred!' - ctx.status = 500 - logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`) + throw error; } }, async policiesByUser(ctx) { try { - ctx.body = await policyService.policiesByUser(ctx.request.body) - ctx.status = 201 - logger.info('Policies by user listed successfully!') + ctx.body = await policyService.policiesByUser(ctx.request.body); + ctx.status = 201; + logger.info('Policies by user listed.'); } catch (error) { - ctx.body = error.response || 'erroror occurred!' - ctx.status = 500 - logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`) + throw error; } }, async getPoliciesWithSourcesByUser(ctx) { try { - ctx.body = await policyService.getPoliciesWithSourcesByUser(ctx.request.body) - ctx.status = 201 - logger.info('Policies with sources by user listed successfully!') + ctx.body = await policyService.getPoliciesWithSourcesByUser(ctx.request.body); + ctx.status = 201; + logger.info('Policies with sources by user listed.'); } catch (error) { - ctx.body = error.response || 'erroror occurred!' - ctx.status = 500 - logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`) + throw error; } } -} +}; module.exports = { policiesByUser: Policy.policiesByUser, @@ -74,4 +61,4 @@ module.exports = { createPolicy: Policy.createPolicy, createPolicyField: Policy.createPolicyField, createPolicySource: Policy.createPolicySource -} \ No newline at end of file +}; diff --git a/app/api/policy/update.js b/app/api/policy/update.js index de97cfe90c5b0139795e75145e2fbcf1d8121e04..9afd22e22505a37b71d206401f834ab46214f897 100644 --- a/app/api/policy/update.js +++ b/app/api/policy/update.js @@ -1,39 +1,31 @@ 'use strict' -const policyService = require('../../dal/policyService') - -const logger = require('../../utils/format') -const util = require('util') - +const policyService = require('../../dal/policyService'); +const logger = require('../../utils/logger'); const Policy = { - async updatePolicy(ctx) { try { - ctx.body = await policyService.updatePolicy(ctx.request.body) - ctx.status = 201 - logger.info('Policy is updated successfully!') + ctx.body = await policyService.updatePolicy(ctx.request.body); + ctx.status = 201; + logger.info('Policy updated.'); } catch (error) { - ctx.body = error.response || 'erroror occurred!' - ctx.status = 500 - logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`) + throw error; } }, async updatePolicyField(ctx) { try { - ctx.body = await policyService.updatePolicyField(ctx.request.body) - ctx.status = 201 - logger.info('PolicyField is updated successfully!') + ctx.body = await policyService.updatePolicyField(ctx.request.body); + ctx.status = 201; + logger.info('Policy field updated.'); } catch (error) { - ctx.body = error.response || 'erroror occurred!' - ctx.status = 500 - logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`) + throw error; } } -} +}; module.exports = { updatePolicy: Policy.updatePolicy, updatePolicyField: Policy.updatePolicyField, -} \ No newline at end of file +}; diff --git a/app/api/realm/delete.js b/app/api/realm/delete.js index 791f45c83a693b6d6fbffe992a449416a0fd2fc4..b6b49bad17c9eb71451b1252fa04993bba14246f 100644 --- a/app/api/realm/delete.js +++ b/app/api/realm/delete.js @@ -1,10 +1,9 @@ 'use strict' const realmService = require('../../dal/realmService') -const logger = require('../../utils/format') +const logger = require('../../utils/logger') const util = require('util') - const DeleteRealm = { async deleteRealm(ctx) { try { @@ -19,8 +18,7 @@ const DeleteRealm = { } } - module.exports = { deleteRealm: DeleteRealm.deleteRealm, DeleteRealm -} \ No newline at end of file +} diff --git a/app/api/realm/get.js b/app/api/realm/get.js index 743d94c4cedb0afabfb30b4e3a3fbd6d9b34dc38..cdef5b9cde4033ecb73d9ef0c08fb45a525915fb 100644 --- a/app/api/realm/get.js +++ b/app/api/realm/get.js @@ -1,12 +1,10 @@ 'use strict' const realmService = require('../../dal/realmService') -const logger = require('../../utils/format') +const logger = require('../../utils/logger') const util = require('util') - const GetRealm = { - async find(ctx) { try { ctx.body = await realmService.realms() @@ -33,9 +31,8 @@ const GetRealm = { } - module.exports = { realms: GetRealm.find, realm: GetRealm.findOne, GetRealm -} \ No newline at end of file +} diff --git a/app/api/realm/post.js b/app/api/realm/post.js index 0e04834c371b2722b43ba297ed147df89212f98b..d60ac09e9aa97dc6515144c78537054423dd2399 100644 --- a/app/api/realm/post.js +++ b/app/api/realm/post.js @@ -1,12 +1,10 @@ "use strict" const realmService = require("../../dal/realmService") -const logger = require("../../utils/format") +const logger = require("../../utils/logger") const util = require('util') - const AddRealm = { - async AddNewRealm(ctx) { try { ctx.body = await realmService.create(ctx.request.body) @@ -20,8 +18,7 @@ const AddRealm = { } } - module.exports = { addRealm: AddRealm.AddNewRealm, AddRealm -} \ No newline at end of file +} diff --git a/app/api/realm/put.js b/app/api/realm/put.js index 3c8e3d996798c4b4c3926a4b58d0ed72dac04f2c..adfa37c0db7a55484b8b04cdf3abfbead842f79e 100644 --- a/app/api/realm/put.js +++ b/app/api/realm/put.js @@ -1,12 +1,10 @@ 'use strict' const realmService = require("../../dal/realmService"); -const logger = require('../../utils/format') +const logger = require('../../utils/logger') const util = require('util') - const UpdateRealm = { - async update(ctx) { try { ctx.body = await realmService.update(ctx.request.body); @@ -20,8 +18,7 @@ const UpdateRealm = { } } - module.exports = { update: UpdateRealm.update, UpdateRealm -} \ No newline at end of file +} diff --git a/app/api/role-user/delete.js b/app/api/role-user/delete.js index 7394e1b18fe840fe762b201d77f65f0dda1ed980..ef7c9d1fbea7f49c0129c3aaa800ec056464c0f9 100644 --- a/app/api/role-user/delete.js +++ b/app/api/role-user/delete.js @@ -1,26 +1,21 @@ 'use strict' -const roleAllocationService = require("../../dal/roleAllocationService") -const logger = require("../../utils/format") -const util = require('util') - +const roleAllocationService = require("../../dal/roleAllocationService"); +const logger = require("../../utils/logger"); const DeleteAllocatedRole = { - - async deleteAllocatedRole(ctx) { + async delete(ctx) { try { - ctx.body = await roleAllocationService.delete(ctx.request.body) - ctx.status = 201 - logger.info('Allocated role is deleted successfully!') - } catch (err) { - ctx.body = err || 'Error occurred!' - ctx.status = 500; - logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`) + ctx.body = await roleAllocationService.delete(ctx.request.body); + ctx.status = 201; + logger.info('Role allocated to user deleted.'); + } catch (error) { + throw error; } } -} +}; module.exports = { - deleteAllocatedRole: DeleteAllocatedRole.deleteAllocatedRole, + deleteAllocatedRole: DeleteAllocatedRole.delete, DeleteAllocatedRole -} \ No newline at end of file +}; diff --git a/app/api/role-user/get.js b/app/api/role-user/get.js index 29deb2fab8936c7674f18beb0addae7db96f9e7d..993607610fa5e184058bce9e87dfdd521f9bbb14 100644 --- a/app/api/role-user/get.js +++ b/app/api/role-user/get.js @@ -1,27 +1,21 @@ 'use strict' -const roleAllocationService = require("../../dal/roleAllocationService") -const logger = require("../../utils/format") -const util = require('util') +const roleAllocationService = require("../../dal/roleAllocationService"); +const logger = require("../../utils/logger"); const GetAllocatedRole = { - async find(ctx) { try { - const allocatedRoles = await roleAllocationService.allocatedRoles(ctx.request.body) - ctx.body = allocatedRoles.rows - ctx.status = 201 - logger.info('Allocated roles are listed by kc_id') - } catch (err) { - ctx.body = err || 'Error occurred!' - ctx.status = 500; - logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`) + ctx.body = await roleAllocationService.allocatedRoles(ctx.request.body); + ctx.status = 201; + logger.info('User allocated roles fetched.'); + } catch (error) { + throw error; } } -} - +}; module.exports = { allocatedRoles: GetAllocatedRole.find, GetAllocatedRole -} \ No newline at end of file +}; diff --git a/app/api/role-user/index.js b/app/api/role-user/index.js index f927a5638a842007e2e98d4abeb629f6910ea3c8..19a8e5234a324a09dbb05cc6a480ae7a4d0ddc4a 100644 --- a/app/api/role-user/index.js +++ b/app/api/role-user/index.js @@ -1,15 +1,15 @@ 'use strict' -const { allocateRole } = require("./post") -const { allocatedRoles } = require('./get') -const { update } = require('./put') -const { deleteAllocatedRole } = require('./delete') +const { create } = require("./post"); +const { allocatedRoles } = require('./get'); +const { update } = require('./put'); +const { deleteAllocatedRole } = require('./delete'); const AllocationRoleHandler = { - allocateRole, + create, allocatedRoles, update, deleteAllocatedRole, -} +}; -module.exports = AllocationRoleHandler \ No newline at end of file +module.exports = AllocationRoleHandler; diff --git a/app/api/role-user/post.js b/app/api/role-user/post.js index 798ed05ccbd053ee10adc11acd58a0cf3e5b1fc6..0e1c04b94222162d4f5e0b76cc0c1d095578387a 100644 --- a/app/api/role-user/post.js +++ b/app/api/role-user/post.js @@ -1,26 +1,21 @@ 'use strict' -const roleAllocationService = require("../../dal/roleAllocationService") -const logger = require("../../utils/format") -const util = require('util') - +const roleAllocationService = require("../../dal/roleAllocationService"); +const logger = require("../../utils/logger"); const AllocateRoleToUser = { - - async allocateRoleToUser(ctx) { + async create(ctx) { try { - ctx.body = await roleAllocationService.create(ctx.request.body) - ctx.status = 201 - logger.info('role is allocated to user successfully!') - } catch (err) { - ctx.body = err || 'Error occurred!' - ctx.status = 500 - logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`) + ctx.body = await roleAllocationService.create(ctx.request.body); + ctx.status = 201; + logger.info('Role allocated to user.'); + } catch (error) { + throw error; } } -} +}; module.exports = { - allocateRole: AllocateRoleToUser.allocateRoleToUser, + create: AllocateRoleToUser.create, AllocateRoleToUser -} +}; diff --git a/app/api/role-user/put.js b/app/api/role-user/put.js index 58cf42708bf658f054407361f3d7b1192b1c61d9..9cebeaec1d0499290f9b10fb19cee14c046867ae 100644 --- a/app/api/role-user/put.js +++ b/app/api/role-user/put.js @@ -1,25 +1,21 @@ 'use strict' -const roleAllocationService = require("../../dal/roleAllocationService") -const logger = require("../../utils/format") -const util = require('util') +const roleAllocationService = require("../../dal/roleAllocationService"); +const logger = require("../../utils/logger"); const UpdateAllocatedRole = { async update(ctx) { try { - ctx.body = await roleAllocationService.update(ctx.request.body) - ctx.status = 201 - logger.info('Allocated role is updated successfully!') - } catch (err) { - ctx.body = err || 'Error occurred!' - ctx.status = 500; - logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`) + ctx.body = await roleAllocationService.update(ctx.request.body); + ctx.status = 201; + logger.info('Role allocated to user updated.'); + } catch (error) { + throw error; } } -} - +}; module.exports = { update: UpdateAllocatedRole.update, UpdateAllocatedRole -} \ No newline at end of file +}; diff --git a/app/api/role-v2/index.js b/app/api/role-v2/index.js deleted file mode 100644 index b7ff1bce2840cdbd119f780fa5fb1ea5a7071687..0000000000000000000000000000000000000000 --- a/app/api/role-v2/index.js +++ /dev/null @@ -1,2 +0,0 @@ -'use strict' - diff --git a/app/api/roles/delete.js b/app/api/roles/delete.js index 56b6b38f5e2bf20073d32866f8cf3a531cc6be39..cd637740aace15ec2a9ebf4b5b575a61cb94d946 100644 --- a/app/api/roles/delete.js +++ b/app/api/roles/delete.js @@ -1,26 +1,21 @@ 'use strict' -const roleService = require('../../dal/roleService') -const logger = require('../../utils/format') -const util = require('util') - +const roleService = require('../../dal/roleService'); +const logger = require('../../utils/logger'); const DeleteRole = { - async deleteRole(ctx) { try { - ctx.body = await roleService.delete(ctx.request.body) - ctx.status = 201 - logger.info('role is deleted successfully!') - } catch (err) { - ctx.body = err || 'Error occurred!' - ctx.status = 500; - logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`) + ctx.body = await roleService.delete(ctx.request.body); + ctx.status = 201; + logger.info('Role deleted.'); + } catch (error) { + throw error; } } -} +}; module.exports = { deleteRole: DeleteRole.deleteRole, DeleteRole, -} \ No newline at end of file +}; diff --git a/app/api/roles/get.js b/app/api/roles/get.js index 37789be581c3e62cb542223c81b6dd9fdefae236..9ae5a0ffd9545e5d9b92ea98fb194b56136909c1 100644 --- a/app/api/roles/get.js +++ b/app/api/roles/get.js @@ -1,39 +1,32 @@ 'use strict' -const roleService = require("../../dal/roleService") -const logger = require('../../utils/format') -const util = require('util') +const roleService = require("../../dal/roleService"); +const logger = require('../../utils/logger'); const GetRole = { async find(ctx) { try { - ctx.body = await roleService.roles() - ctx.status = 201 - logger.info('roles are listed successfully!') - } catch (err) { - ctx.body = err || 'Error occurred!' - ctx.status = 500; - logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`) + ctx.body = await roleService.roles(); + ctx.status = 201; + logger.info('Roles fetched.'); + } catch (error) { + throw error; } }, async findOne(ctx) { try { - ctx.body = await roleService.role(ctx.request.body) - ctx.status = 201 - logger.info('role is found successfully!') - } catch (err) { - ctx.body = err || 'Error occurred!' - ctx.status = 500; - logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`) + ctx.body = await roleService.role(ctx.request.body); + ctx.status = 201; + logger.info('Role fetched.'); + } catch (error) { + throw error; } } -} +}; module.exports = { roles: GetRole.find, role: GetRole.findOne, GetRole -} - - +}; diff --git a/app/api/roles/index.js b/app/api/roles/index.js index 8e24e08378a77839b6fc8468a594b0be49ddc71a..0cc31dacb696235b5678fab18893b90008e6186c 100644 --- a/app/api/roles/index.js +++ b/app/api/roles/index.js @@ -1,17 +1,17 @@ 'use strict' -const { addNewRole } = require('./post') -const { roles } = require('./get') -const { role } = require('./get') -const { deleteRole } = require('./delete') -const { update } = require('./put') +const { createRole } = require('./post'); +const { roles } = require('./get'); +const { role } = require('./get'); +const { deleteRole } = require('./delete'); +const { update } = require('./put'); const RoleHandler = { - addNewRole, + createRole, roles, role, deleteRole, update, -} +}; -module.exports = RoleHandler \ No newline at end of file +module.exports = RoleHandler; diff --git a/app/api/roles/post.js b/app/api/roles/post.js index d38fd7b8fa5210f878a4ff476d95d8e7ecc0849c..58c83a55f52d3a8438f3535c117cbf6f745f4f12 100644 --- a/app/api/roles/post.js +++ b/app/api/roles/post.js @@ -1,26 +1,21 @@ 'use strict' -const roleService = require("../../dal/roleService") -const logger = require('../../utils/format') -const util = require('util') - +const roleService = require("../../dal/roleService"); +const logger = require('../../utils/logger'); const AddRole = { - - async addNewRole(ctx) { + async create(ctx) { try { - ctx.body = await roleService.create(ctx.request.body) - ctx.status = 201 - logger.info('role is created successfully!') - } catch (err) { - ctx.body = err.response.data || 'Error occurred!' - ctx.status = 500 - logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`) + ctx.body = await roleService.create(ctx.request.body); + ctx.status = 201; + logger.info('Role created.'); + } catch (error) { + throw error; } } -} +}; module.exports = { - addNewRole: AddRole.addNewRole, + createRole: AddRole.create, AddRole -} \ No newline at end of file +}; diff --git a/app/api/roles/put.js b/app/api/roles/put.js index 24e1fd6150673c92b1b8ab1d80e16b91539865f9..9ed289b9aab7c1e26b04ea1ec4883bb655d79e5f 100644 --- a/app/api/roles/put.js +++ b/app/api/roles/put.js @@ -1,26 +1,21 @@ 'use strict' -const roleService = require('../../dal/roleService') -const logger = require('../../utils/format') -const util = require('util') - +const roleService = require('../../dal/roleService'); +const logger = require('../../utils/logger'); const UpdateRole = { async update(ctx) { try { - ctx.body = await roleService.update(ctx.request.body) - ctx.status = 201 - logger.info('role is updated successfully!') - - } catch (err) { - ctx.body = err || 'Error occurred!' - ctx.status = 500 - logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`) + ctx.body = await roleService.update(ctx.request.body); + ctx.status = 201; + logger.info('Role updated.'); + } catch (error) { + throw error; } } -} +}; module.exports = { update: UpdateRole.update, UpdateRole -} \ No newline at end of file +}; diff --git a/app/api/user-fields-display-settings/delete.js b/app/api/user-fields-display-settings/delete.js new file mode 100644 index 0000000000000000000000000000000000000000..743ae4aade7245b26ce447b3d3992c6eefb6671a --- /dev/null +++ b/app/api/user-fields-display-settings/delete.js @@ -0,0 +1,21 @@ +'use strict' + +const userFieldsDisplaySettingsService = require("../../dal/userFieldsDisplaySettingsService"); +const logger = require('../../utils/logger'); + +const UserFieldsDisplaySettings = { + async delete(ctx) { + try { + ctx.body = await userFieldsDisplaySettingsService.delete(ctx.request.params); + ctx.status = 201; + logger.info('User fields display settings deleted.'); + } catch (error) { + throw error; + } + } +} + +module.exports = { + deleteUserFieldsDisplaySettings: UserFieldsDisplaySettings.delete, + UserFieldsDisplaySettings +}; diff --git a/app/api/user-fields-display-settings/get.js b/app/api/user-fields-display-settings/get.js new file mode 100644 index 0000000000000000000000000000000000000000..e8b08ef97ebddbac2443428f7bc7b4c08d134b33 --- /dev/null +++ b/app/api/user-fields-display-settings/get.js @@ -0,0 +1,32 @@ +"use strict"; + +const logger = require('../../utils/logger') +const userFieldsDisplaySettingsService = require("../../dal/userFieldsDisplaySettingsService"); + +const GetUserFieldsDisplaySettings = { + async find(ctx) { + try { + ctx.body = await userFieldsDisplaySettingsService.usersFieldsDisplaySettings(); + ctx.status = 201; + logger.info('Users fields display settings retrieved.'); + } catch (error) { + throw error; + } + }, + + async findOne(ctx) { + try { + ctx.body = await userFieldsDisplaySettingsService.userFieldsDisplaySettings(ctx.request.params); + ctx.status = 201; + logger.info('User fields display settings retrieved.'); + } catch (error) { + throw error; + } + }, +}; + +module.exports = { + findUsersFieldsDisplaySettings: GetUserFieldsDisplaySettings.find, + findUserFieldsDisplaySettings: GetUserFieldsDisplaySettings.findOne, + GetUserFieldsDisplaySettings +}; diff --git a/app/api/user-fields-display-settings/index.js b/app/api/user-fields-display-settings/index.js new file mode 100644 index 0000000000000000000000000000000000000000..338b10b3732a4bc49181e93e3dc136b3092d33fa --- /dev/null +++ b/app/api/user-fields-display-settings/index.js @@ -0,0 +1,16 @@ +"use strict"; + +const { createUserFieldsDisplaySettings } = require('./post'); +const { findUsersFieldsDisplaySettings, findUserFieldsDisplaySettings } = require('./get'); +const { updateUserFieldsDisplaySettings } = require('./put'); +const { deleteUserFieldsDisplaySettings } = require('./delete'); + +const UserFieldsDisplaySettingsHandler = { + createUserFieldsDisplaySettings, + findUsersFieldsDisplaySettings, + findUserFieldsDisplaySettings, + updateUserFieldsDisplaySettings, + deleteUserFieldsDisplaySettings +} + +module.exports = UserFieldsDisplaySettingsHandler diff --git a/app/api/user-fields-display-settings/post.js b/app/api/user-fields-display-settings/post.js new file mode 100644 index 0000000000000000000000000000000000000000..2b0075bac46cba7991f6bca121ccbecbc2e4efa9 --- /dev/null +++ b/app/api/user-fields-display-settings/post.js @@ -0,0 +1,21 @@ +'use strict' + +const userFieldsDisplaySettingsService = require("../../dal/userFieldsDisplaySettingsService"); +const logger = require('../../utils/logger') + +const CreateUserFieldsDisplaySettings = { + async create(ctx) { + try { + ctx.body = await userFieldsDisplaySettingsService.create(ctx.request.body); + ctx.status = 201; + logger.info('User fields display settings created.'); + } catch (error) { + throw error; + } + }, +} + +module.exports = { + createUserFieldsDisplaySettings: CreateUserFieldsDisplaySettings.create, + CreateUserFieldsDisplaySettings +} diff --git a/app/api/user-fields-display-settings/put.js b/app/api/user-fields-display-settings/put.js new file mode 100644 index 0000000000000000000000000000000000000000..066f5939c2fc0713635c7adfe7e394b53c2204d2 --- /dev/null +++ b/app/api/user-fields-display-settings/put.js @@ -0,0 +1,21 @@ +'use strict' + +const userFieldsDisplaySettingsService = require("../../dal/userFieldsDisplaySettingsService"); +const logger = require('../../utils/logger'); + +const UpdateUserFieldsDisplaySettings = { + async update(ctx) { + try { + ctx.body = await userFieldsDisplaySettingsService.update(ctx.request.body); + ctx.status = 201; + logger.info('User fields display settings updated.'); + } catch (error) { + throw error; + } + } +} + +module.exports = { + updateUserFieldsDisplaySettings: UpdateUserFieldsDisplaySettings.update, + UpdateUserFieldsDisplaySettings +}; diff --git a/app/api/user-requests/delete.js b/app/api/user-requests/delete.js index 2e2515d4e23de2620f4e6c798e16cc8b1507e9cd..d1be7f915ac21a520c869ca9c1666f32bd41dd57 100644 --- a/app/api/user-requests/delete.js +++ b/app/api/user-requests/delete.js @@ -1,26 +1,21 @@ 'use strict' -const userRequestService = require('../../dal/userRequestService') -const logger = require('../../utils/format') -const util = require('util') - +const userRequestService = require('../../dal/userRequestService'); +const logger = require('../../utils/logger'); const UserRequest = { - async delete(ctx) { try { - ctx.body = await userRequestService.delete(ctx.request.body) - ctx.status = 201 - logger.info('user request deleted successfully!') - } catch (err) { - ctx.body = err || 'Error occurred!' - ctx.status = 500 - logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`) + ctx.body = await userRequestService.delete(ctx.request.body); + ctx.status = 201; + logger.info('User request deleted.'); + } catch (error) { + throw error; } } -} +}; module.exports = { deleteRequest: UserRequest.delete, UserRequest -} \ No newline at end of file +}; diff --git a/app/api/user-requests/get.js b/app/api/user-requests/get.js index d682e94a10c4d7db7f1cddf0e18987258f02c6f6..b62ee084f955adc7859774cb0d02cc3e053a996c 100644 --- a/app/api/user-requests/get.js +++ b/app/api/user-requests/get.js @@ -1,39 +1,32 @@ 'use strict' -const userRequestService = require('../../dal/userRequestService') -const logger = require('../../utils/format') -const util = require('util') - +const userRequestService = require('../../dal/userRequestService'); +const logger = require('../../utils/logger'); const UserRequest = { - async list(ctx) { try { - ctx.body = await userRequestService.fetch(ctx.request.body) - ctx.status = 201 - logger.info('user requests fetched successfully!') + ctx.body = await userRequestService.fetch(); + ctx.status = 201; + logger.info('User requests fetched.'); } catch (error) { - ctx.body = error.response || 'erroror occurred!' - ctx.status = 500 - logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`) + throw error; } }, async listPending(ctx) { try { - ctx.body = await userRequestService.fetchPending(ctx.request.body) - ctx.status = 201 - logger.info('user requests fetched successfully!') + ctx.body = await userRequestService.fetchPending(); + ctx.status = 201; + logger.info('Pending user requests fetched.'); } catch (error) { - ctx.body = error.response || 'erroror occurred!' - ctx.status = 500 - logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`) + throw error; } } -} +}; module.exports = { fetchRequests: UserRequest.list, fetchPendingRequests: UserRequest.listPending, UserRequest -} \ No newline at end of file +}; diff --git a/app/api/user-requests/index.js b/app/api/user-requests/index.js index 310ac8de36b2c23d5be7925e0203fb0d4441bc90..8d0a9ea6c5d9c8d58065f1a22c317a3ab3419c4b 100644 --- a/app/api/user-requests/index.js +++ b/app/api/user-requests/index.js @@ -1,8 +1,8 @@ 'use strict' -const { createRequest, processRequest, fetchRequestsByUser } = require('./post') -const { fetchRequests, fetchPendingRequests } = require('./get') -const { deleteRequest } = require('./delete') +const { createRequest, processRequest, fetchRequestsByUser } = require('./post'); +const { fetchRequests, fetchPendingRequests } = require('./get'); +const { deleteRequest } = require('./delete'); const UserRequestHandler = { createRequest, @@ -11,6 +11,6 @@ const UserRequestHandler = { fetchPendingRequests, fetchRequestsByUser, deleteRequest -} +}; -module.exports = UserRequestHandler \ No newline at end of file +module.exports = UserRequestHandler; diff --git a/app/api/user-requests/post.js b/app/api/user-requests/post.js index 9d865c96eb3cf27614b413f5c4b91f1adae6d2dd..d0b90afd9d8b76444d773602e703cf1cf4ed4577 100644 --- a/app/api/user-requests/post.js +++ b/app/api/user-requests/post.js @@ -1,50 +1,43 @@ 'use strict' -const userRequestService = require('../../dal/userRequestService') -const logger = require('../../utils/format') -const util = require('util') +const userRequestService = require('../../dal/userRequestService'); +const logger = require('../../utils/logger'); const UserRequest = { - async create(ctx) { try { - ctx.body = await userRequestService.create(ctx.request.body) - ctx.status = 201 - logger.info('user request created successfully!') - } catch (err) { - ctx.body = err || 'Error occurred!' - ctx.status = 500 - logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`) + ctx.body = await userRequestService.create(ctx.request.body); + ctx.status = 201; + logger.info('User request created.'); + } catch (error) { + throw error; } }, + async process(ctx) { try { - ctx.body = await userRequestService.process(ctx.request.body) - ctx.status = 201 - logger.info('user request processed successfully!') - } catch (err) { - ctx.body = err || 'Error occurred!' - ctx.status = 500 - logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`) + ctx.body = await userRequestService.process(ctx.request.body); + ctx.status = 201; + logger.info('User request processed.'); + } catch (error) { + throw error; } }, async listByUser(ctx) { try { - ctx.body = await userRequestService.fetchByUser(ctx.request.body) - ctx.status = 201 - logger.info('user requests fetched successfully!') + ctx.body = await userRequestService.fetchByUser(ctx.request.body); + ctx.status = 201; + logger.info('User requests fetched by user.'); } catch (error) { - ctx.body = error.response || 'erroror occurred!' - ctx.status = 500 - logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`) + throw error; } } -} +}; module.exports = { createRequest: UserRequest.create, processRequest: UserRequest.process, fetchRequestsByUser: UserRequest.listByUser, UserRequest -} \ No newline at end of file +}; diff --git a/app/api/user-search-history/delete.js b/app/api/user-search-history/delete.js index 2d4376251bb68e61fab4f126f02b1101e9afa5e6..a1f7ef94d879154fbeaab488dc4c18d6f926e8d5 100644 --- a/app/api/user-search-history/delete.js +++ b/app/api/user-search-history/delete.js @@ -1,26 +1,21 @@ 'use strict' -const searchHistoryService = require('../../dal/searchHistoryService') -const logger = require('../../utils/format') -const util = require('util') - +const searchHistoryService = require('../../dal/searchHistoryService'); +const logger = require('../../utils/logger'); const SearchHistory = { - async delete(ctx) { try { - ctx.body = await searchHistoryService.delete(ctx.request.body) - ctx.status = 201 - logger.info('search history is deleted successfully!') + ctx.body = await searchHistoryService.delete(ctx.request.body); + ctx.status = 201; + logger.info('User search history deleted.'); } catch (error) { - ctx.body = error.response || 'erroror occurred!' - ctx.status = 500 - logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`) + throw error; } } -} +}; module.exports = { - deleteH: SearchHistory.delete, + deleteUserSearchHistory: SearchHistory.delete, SearchHistory -} \ No newline at end of file +}; diff --git a/app/api/user-search-history/get.js b/app/api/user-search-history/get.js index 7f2b75d925e02f1cefa1573e50959fcfab2ffd3e..e8cc7b7ef103903119a8a6b72f64484ed4b88c43 100644 --- a/app/api/user-search-history/get.js +++ b/app/api/user-search-history/get.js @@ -1,26 +1,21 @@ 'use strict' -const searchHistoryService = require('../../dal/searchHistoryService') -const logger = require('../../utils/format') -const util = require('util') - +const searchHistoryService = require('../../dal/searchHistoryService'); +const logger = require('../../utils/logger'); const SearchHistory = { - async list(ctx) { try { - ctx.body = await searchHistoryService.fetch(ctx.request.body) - ctx.status = 201 - logger.info('search history is fetched successfully!') + ctx.body = await searchHistoryService.fetch(ctx.request.body); + ctx.status = 201; + logger.info('User search history fetched.'); } catch (error) { - ctx.body = error.response || 'erroror occurred!' - ctx.status = 500 - logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`) + throw error; } } -} +}; module.exports = { fetch: SearchHistory.list, SearchHistory -} \ No newline at end of file +}; diff --git a/app/api/user-search-history/index.js b/app/api/user-search-history/index.js index ec1d92bdc0bce847e843df161060da73e5960130..7dab2705e3ccbf2eff1784bb2a8ef61dc3e17a03 100644 --- a/app/api/user-search-history/index.js +++ b/app/api/user-search-history/index.js @@ -1,13 +1,13 @@ 'use strict' -const { add } = require('./post') -const { fetch } = require('./get') -const { deleteH } = require('./delete') +const { create } = require('./post'); +const { fetch } = require('./get'); +const { deleteUserSearchHistory } = require('./delete'); const SearchHistoryHandler = { - add, + create, fetch, - deleteH -} + deleteUserSearchHistory +}; -module.exports = SearchHistoryHandler \ No newline at end of file +module.exports = SearchHistoryHandler; diff --git a/app/api/user-search-history/post.js b/app/api/user-search-history/post.js index 61e2a3398ec9e9e3f9e718398629bcc83afcd96c..5739977c7ecee96509bf12e28c2c084369919b26 100644 --- a/app/api/user-search-history/post.js +++ b/app/api/user-search-history/post.js @@ -1,25 +1,21 @@ 'use strict' -const searchHistoryService = require('../../dal/searchHistoryService') -const logger = require('../../utils/format') -const util = require('util') +const searchHistoryService = require('../../dal/searchHistoryService'); +const logger = require('../../utils/logger'); -const SearchHistory = { - - async add(ctx) { +const SearchHistory = { + async create(ctx) { try { - ctx.body = await searchHistoryService.create(ctx.request.body) - ctx.status = 201 - logger.info('search history is created successfully!') + ctx.body = await searchHistoryService.create(ctx.request.body); + ctx.status = 201; + logger.info('Search history created.'); } catch (error) { - ctx.body = error.response || 'erroror occurred!' - ctx.status = 500 - logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`) + throw error; } - } -} + } +}; module.exports = { - add: SearchHistory.add, + create: SearchHistory.create, SearchHistory -} \ No newline at end of file +}; diff --git a/app/api/users/delete.js b/app/api/users/delete.js index 3ec3c0a89464eb025e0b47c87efef6f361bb51d9..ebe5496e9988441975d3a083c0f32bbff612b14b 100644 --- a/app/api/users/delete.js +++ b/app/api/users/delete.js @@ -1,24 +1,19 @@ - 'use strict' -const userService = require("../../dal/userService") -const logger = require('../../utils/format') -const util = require('util') +const userService = require("../../dal/userService"); +const logger = require('../../utils/logger'); const DeleteUser = { - async deleteUser(ctx) { try { - ctx.body = await userService.delete(ctx.request.body) - ctx.status = 201 - logger.info('user is deleted successfully!') - } catch (err) { - ctx.body = err || 'Error occurred!' - ctx.status = 500 - logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`) + ctx.body = await userService.delete(ctx.request.body); + ctx.status = 201; + logger.info('User deleted.'); + } catch (error) { + throw error; } } -} +}; module.exports = { deleteUser: DeleteUser.deleteUser, diff --git a/app/api/users/get.js b/app/api/users/get.js index 9330633a27a93bc8a28c476a5869efa87885cae2..f35efd235a7a917ba1dfa4cccd891a3069d0d43d 100644 --- a/app/api/users/get.js +++ b/app/api/users/get.js @@ -1,44 +1,36 @@ "use strict"; const userService = require("../../dal/userService"); -const logger = require('../../utils/format') -const util = require('util') +const logger = require('../../utils/logger'); const GetUser = { async find(ctx) { try { - ctx.body = await userService.users() - ctx.status = 201 - logger.info('users is listed successfully!') - } catch (err) { - ctx.body = err || 'Error occurred!' - ctx.status = 500; - logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`) - + ctx.body = await userService.users(); + ctx.status = 201; + logger.info('Users fetched.'); + } catch (error) { + throw error; } }, async findOne(ctx) { try { - ctx.body = await userService.user(ctx.request.body) - ctx.status = 201 - logger.info('user is found successfully!') - } catch (err) { - ctx.body = err || 'Error occurred!' - ctx.status = 500; - logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`) + ctx.body = await userService.user(ctx.request.body); + ctx.status = 201; + logger.info('User fetched.'); + } catch (error) { + throw error; } }, async kcId(ctx) { try { ctx.body = await userService.kcId(ctx.request.body); - ctx.status = 201 - logger.info('kcId is found successfully!') - } catch (err) { - ctx.body = err || 'Error occurred!' - ctx.status = 500; - logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`) + ctx.status = 201; + logger.info('User kc_id fetched.'); + } catch (error) { + throw error; } }, @@ -46,11 +38,9 @@ const GetUser = { try { ctx.body = await userService.detail(ctx.request.body); ctx.status = 201; - logger.info('user_detail is found successfully!') - } catch (err) { - ctx.body = err || 'Error occurred!' - ctx.status = 500; - logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`) + logger.info('User details fetched.'); + } catch (error) { + throw error; } }, @@ -58,26 +48,21 @@ const GetUser = { try { ctx.body = await userService.getAssignedUserByRole(ctx.request.body); ctx.status = 201; - logger.info('Assigned users listed successfully by Role!') - } catch (err) { - ctx.body = err || 'Error occurred!' - ctx.status = 500; - logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`) + logger.info('Users fetched by role.'); + } catch (error) { + throw error; } }, async usersWithGroupAndRole(ctx) { try { - ctx.body = await userService.usersWithGroupAndRole(ctx.request.body); + ctx.body = await userService.usersWithGroupAndRole(); ctx.status = 201; - logger.info('Users listed with groups and roles successfully!') - } catch (err) { - ctx.body = err || 'Error occurred!' - ctx.status = 500; - logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`) + logger.info('Users with groups and roles fetched.'); + } catch (error) { + throw error; } } - }; module.exports = { diff --git a/app/api/users/index.js b/app/api/users/index.js index 7def803e8285a923dd406e81fcc91e7c4d80d87d..c228799292cf848ea6366fbc73174140c87a6ac5 100644 --- a/app/api/users/index.js +++ b/app/api/users/index.js @@ -1,14 +1,12 @@ "use strict"; -const { addNewUser, createSystemUser, sendMail, userWithGroupAndRole, resetPassword } = require('./post') -const { user, detail, getAssignedUserByRole, usersWithGroupAndRole } = require('./get') -const { users } = require('./get') -const { deleteUser } = require('./delete') -const { update } = require('./put') -const { kcId } = require('./get') +const { create, createSystemUser, sendMail, userWithGroupAndRole, resetPassword } = require('./post'); +const { user, users, kcId, detail, getAssignedUserByRole, usersWithGroupAndRole } = require('./get'); +const { deleteUser } = require('./delete'); +const { update } = require('./put'); const UserHandler = { - addNewUser, + create, user, users, deleteUser, @@ -21,6 +19,6 @@ const UserHandler = { userWithGroupAndRole, sendMail, resetPassword -} +}; -module.exports = UserHandler +module.exports = UserHandler; diff --git a/app/api/users/post.js b/app/api/users/post.js index a368b49c36ab93fd97bf372e7373a662ce7addcc..87e5d64192bcdfffa52b5ed1bf85681d65cd8e81 100644 --- a/app/api/users/post.js +++ b/app/api/users/post.js @@ -1,73 +1,62 @@ 'use strict' -const userService = require("../../dal/userService") -const logger = require('../../utils/format') -const util = require('util') +const userService = require("../../dal/userService"); +const logger = require('../../utils/logger'); const AddUser = { - /** - * @param {username,email} ctx - */ - async addNewUser(ctx) { + async create(ctx) { try { - ctx.body = await userService.create(ctx.request.body) - ctx.status = 201 - logger.info('user is created successfully!') - } catch (err) { - ctx.body = err || 'Error occurred!' - ctx.status = 500 - logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`) + ctx.body = await userService.create(ctx.request.body); + ctx.status = 201; + logger.info('User created.'); + } catch (error) { + throw error; } }, async createSystemUser(ctx) { try { - ctx.body = await userService.createSystemUser(ctx.request.body) - ctx.status = 201 - logger.info('System user (admin) is created successfully!') - } catch (err) { - ctx.body = err || 'Error occurred!' - ctx.status = 500 - logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`) + ctx.body = await userService.createSystemUser(); + ctx.status = 201; + logger.info('System user (admin) created.'); + } catch (error) { + throw error; } }, + async sendMail(ctx) { try { - ctx.body = await userService.sendMail(ctx.request.body) - ctx.status = 201 - logger.info('mail sent successfully!') - } catch (err) { - ctx.body = err || 'Error occurred!' - ctx.status = 500 - logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`) + ctx.body = await userService.sendMail(ctx.request.body); + ctx.status = 201; + logger.info('Mail sent.'); + } catch (error) { + throw error; } }, + async userWithGroupAndRole(ctx) { try { ctx.body = await userService.userWithGroupAndRole(ctx.request.body); ctx.status = 201; - logger.info('Found user with groups and roles successfully!') - } catch (err) { - ctx.body = err || 'Error occurred!' - ctx.status = 500; - logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`) + logger.info('User with groups and roles fetched.'); + } catch (error) { + throw error; } }, + async resetPassword(ctx) { try { ctx.body = await userService.resetPassword(ctx.request.body); ctx.status = 201; - logger.info('Reset password successfully!') - } catch (err) { - ctx.body = err || 'Error occurred!' - ctx.status = 500; - logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`) + logger.info('Password reset.'); + } catch (error) { + throw error; } } } module.exports = { - addNewUser: AddUser.addNewUser, + create: AddUser.create, createSystemUser: AddUser.createSystemUser, sendMail: AddUser.sendMail, userWithGroupAndRole: AddUser.userWithGroupAndRole, diff --git a/app/api/users/put.js b/app/api/users/put.js index 26cf36e5934503815f579928921dc3f340dfb581..3d5db10b86daf5eb4f91bf2300c317bbc20fc543 100644 --- a/app/api/users/put.js +++ b/app/api/users/put.js @@ -1,26 +1,21 @@ 'use strict' -const userService = require("../../dal/userService") -const logger = require('../../utils/format') -const util = require('util') - +const userService = require("../../dal/userService"); +const logger = require('../../utils/logger'); const UpdateUser = { - async update(ctx) { try { - ctx.body = await userService.update(ctx.request.body) - ctx.status = 201 - logger.info('user is updated successfully!') - } catch (err) { - ctx.body = err || 'Error occurred!' - ctx.status = 500 - logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`) + ctx.body = await userService.update(ctx.request.body); + ctx.status = 201; + logger.info('User updated.'); + } catch (error) { + throw error; } } -} +}; module.exports = { update: UpdateUser.update, UpdateUser -} \ No newline at end of file +}; diff --git a/app/dal/groupService.js b/app/dal/groupService.js index b2d99005d0197cbb24456600755d034109698c4d..d2a6b17fd241cd5c0103e3194758c33234364bb2 100644 --- a/app/dal/groupService.js +++ b/app/dal/groupService.js @@ -1,230 +1,197 @@ 'use strict' -// const db = require('../../db'); - const { Group, GroupUser, GroupsPolicy } = require('../models/Group') - const userService = require('./userService') const db = require('../../db') const GroupService = { - async createGroup(ctx) { - if (!ctx) { - throw Error("The request body is empty!") + if (!ctx || !ctx.kcId) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; } - - if (ctx.kcId === undefined) - throw Error("kcId did not supported.") - - const user = await userService.detail({ kcId: ctx.kcId }) - if (user) { - - const group = await Group.findOne({ - where: { - name: ctx.name, - user_id: user.id, - } - }) - - if (group) { - throw Error(`This name:${ctx.name} and userId:${user.id} already inserted to database!`) - } else { - const newGroup = await Group.create({ - name: ctx.name, - description: ctx.description, - user_id: user.id, - }) - - return newGroup - } - - } else { - throw Error('The user account could not found.') + const user = await userService.detail({ kcId: ctx.kcId }); + if (!user) { + const error = new Error("User account not found."); + error.status = 400; + throw error; + } + const [newGroup, isCreated] = await Group.findOrCreate( + { + where: { + name: ctx.name, + user_id: user.id, + }, + defaults: { + description: ctx.description, + }, + }); + if (!isCreated) { + const error = new Error(`Group:${ctx.name} already exists.`); + error.status = 400; + throw error; } + return newGroup; }, async createGroupPolicy(ctx) { - if (!ctx) { - throw Error("The request body is empty!") + if (!ctx || !ctx.groupId || !ctx.policyId) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; } - const groupPolicy = await GroupsPolicy.findOne({ where: { group_id: ctx.groupId, policy_id: ctx.policyId } - }) - + }); if (groupPolicy) { - throw Error(`This groupId:${ctx.groupId} and policyId:${ctx.policyId} already assigned to each other!`) + const error = new Error(`GroupId:${ctx.groupId} and policyId:${ctx.policyId} already assigned to each other.`); + error.status = 400; + throw error; } else { - const newGroupPolicy = await GroupsPolicy.create({ + return await GroupsPolicy.create({ group_id: ctx.groupId, policy_id: ctx.policyId - }) - - return newGroupPolicy + }); } }, async createGroupUser(ctx) { - if (!ctx) { - throw Error("The request body is empty!") + if (!ctx || !ctx.kcId) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; } - - if (ctx.kcId === undefined) - throw Error("kcId did not supported.") - - const user = await userService.detail({ kcId: ctx.kcId }) + const user = await userService.detail({ kcId: ctx.kcId }); if (user) { - const groupUser = await GroupUser.findOne({ where: { group_id: ctx.groupId, user_id: user.id } - }) - + }); if (groupUser) { - throw Error(`This groupId:${ctx.groupId} and userId:${ctx.user_id} already assigned to each other!`) + const error = new Error(`GroupId:${ctx.groupId} and userId:${user.id} already assigned to each other.`); + error.status = 400; + throw error; } else { - const newGroupUser = await GroupUser.create({ + return await GroupUser.create({ group_id: ctx.groupId, user_id: user.id - }) - - return newGroupUser + }); } } else { - throw Error('The user account could not found.') + const error = new Error('User account not found.'); + error.status = 400; + throw error; } }, async updateGroup(ctx) { - if (!ctx) { - throw Error("The request body is empty!") + if (!ctx || !ctx.name || !ctx.description || !ctx.id || !ctx.userId) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; } - - const group = await Group.update({ + return await Group.update({ name: ctx.name, description: ctx.description, }, { - where: { id: ctx.id, user_id: ctx.userId } - }) - - return group - + where: {id: ctx.id, user_id: ctx.userId} + }); }, async updateGroupPolicy(ctx) { - if (!ctx) { - throw Error("The request body is empty!") + if (!ctx || !ctx.groupId || !ctx.policyId || !ctx.id) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; } - - const groupPolicy = await GroupsPolicy.update({ + return await GroupsPolicy.update({ group_id: ctx.groupId, policy_id: ctx.policyId - }, { where: { id: ctx.id } }) - - return groupPolicy + }, {where: {id: ctx.id}}); }, async updateGroupUser(ctx) { - if (!ctx) { - throw Error("The request body is empty!") + if (!ctx || !ctx.kcId) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; } - - const user = await userService.detail({ kcId: ctx.kcId }) - if (user) { - const groupUser = await GroupUser.update({ - group_id: ctx.groupId, - user_id: user.id - }, { where: { id: ctx.id } }) - - return groupUser - - } else { - throw Error('The user account could not found.') + const user = await userService.detail({ kcId: ctx.kcId }); + if (!user) { + const error = new Error("User account not found."); + error.status = 400; + throw error; } + return await GroupUser.update({ + group_id: ctx.groupId, + user_id: user.id + }, {where: {id: ctx.id}}); }, async deleteGroup(ctx) { - if (!ctx) { - throw Error("The request body is empty!") - } - if (ctx.id) { - const group = await Group.destroy({ - where: { - id: ctx.id - } - }) - - return group + if (!ctx || !ctx.id) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; } + return await Group.destroy({ + where: { + id: ctx.id + } + }); }, async deleteGroupPolicy(ctx) { - if (!ctx) { - throw Error("The request body is empty!") + if (!ctx || !ctx.id) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; } - - const groupPolicy = await GroupsPolicy.destroy({ + return await GroupsPolicy.destroy({ where: { id: ctx.id } - }) - - return groupPolicy + }); }, async deleteGroupUser(ctx) { - if (!ctx) { - throw Error("The request body is empty!") + if (!ctx || !ctx.groupId || !ctx.userId) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; } - - const params = { groupId: ctx.groupId, userId: ctx.userId } - - const groupUser = await db.raw(` - delete from group_users - where group_id = :groupId and user_id = :userId - `, params) - - return groupUser + const params = { groupId: ctx.groupId, userId: ctx.userId }; + return db.raw(`delete from group_users where group_id = :groupId and user_id = :userId`, params); }, - async groups(ctx) { - /*if (!ctx) { - throw Error("The request body is empty!") - }*/ - - return await Group.findAll({}) - + async groups() { + return await Group.findAll({}); }, - async groupPolicies(ctx) { - /*if (!ctx) { - throw Error("The request body is empty!") - }*/ - - return await GroupsPolicy.findAll({}) + async groupPolicies() { + return await GroupsPolicy.findAll({}); }, async groupUsers(ctx) { - if (!ctx) { - throw Error("The request body is empty!") + if (!ctx || !ctx.groupId) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; } - - const params = { groupId: ctx.groupId } - + const params = { groupId: ctx.groupId }; const groupUsers = await db.raw(` select g.id as groupId, u.id as userId, u.username, g.name, g.description from group_users gu inner join users u on u.id = gu.user_id inner join groups g on gu.group_id = g.id where g.id = :groupId - `, params) - - return groupUsers.rows + `, params); + return groupUsers.rows; } } @@ -245,4 +212,4 @@ module.exports = { groups: GroupService.groups, groupPolicies: GroupService.groupPolicies, groupUsers: GroupService.groupUsers, -} \ No newline at end of file +}; diff --git a/app/dal/policyService.js b/app/dal/policyService.js index dc2faa346d573f3be3eaf7ebfd0fbdfef0a5b0b6..a101a67dfe4f4bc82cfc382465a39437ec928aa3 100644 --- a/app/dal/policyService.js +++ b/app/dal/policyService.js @@ -1,155 +1,134 @@ 'use strict' const { Policy, PolicyField, PolicySource } = require('../models/Policy') - const db = require('../../db'); const userService = require('./userService') const PolicyService = { - async createPolicy(ctx) { - if (!ctx) { - throw Error("The request body is empty!") + if (!ctx || !ctx.kcId) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; } - - if (ctx.kcId === undefined) - throw Error("kcId did not supported.") - - const user = await userService.detail({ kcId: ctx.kcId }) - if (user) { - const policy = await Policy.findOne({ + const user = await userService.detail({ kcId: ctx.kcId }); + if (!user) { + const error = new Error("User account not found."); + error.status = 400; + throw error; + } + const [newPolicy, isCreated] = await Policy.findOrCreate( + { where: { name: ctx.name, - // source_id: ctx.sourceId, - user_id: user.id, - is_default: false - } - }) - if (policy) { - throw Error(`This Policy name:${ctx.name} and sourceId:${ctx.sourceId} already inserted to database!`) - } else { - const newPolicy = await Policy.create({ - name: ctx.name, - // source_id: ctx.sourceId, user_id: user.id, + }, + defaults: { is_default: false - }) - - return newPolicy - } - } else { - throw Error('The user account could not found.') + }, + }); + if (!isCreated) { + const error = new Error(`Policy:${ctx.name} already exists.`); + error.status = 400; + throw error; } + return newPolicy; }, async createPolicyField(ctx) { - if (!ctx) { - throw Error("The request body is empty!") + if (!ctx || !ctx.policyId || !ctx.stdFieldId) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; } - - const { policyId, stdFieldId } = ctx - - if (policyId && stdFieldId) { - const policyField = await PolicyField.findOne({ + const [newPolicyField, isCreated] = await PolicyField.findOrCreate( + { where: { - policy_id: policyId, - std_field_id: stdFieldId, - } - }) - - if (policyField) { - throw Error(`This policyId:${policyId} and stdFieldId:${stdFieldId} already assigned to each other in the database!`) - } else { - const newPolicyField = await PolicyField.create({ - policy_id: policyId, - std_field_id: stdFieldId, - }) - - return newPolicyField - } + policy_id: ctx.policyId, + std_field_id: ctx.stdFieldId, + }, + }); + if (!isCreated) { + const error = new Error("Policy and stdField already assigned to each other."); + error.status = 400; + throw error; } + return newPolicyField; }, async createPolicySource(ctx) { - if (!ctx) { - throw Error("The request body is empty!") + if (!ctx || !ctx.policyId || !ctx.sourceId) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; } - - const { policyId, sourceId } = ctx - - if (policyId && sourceId) { - const policySource = await PolicySource.findOne({ + const [newPolicySource, isCreated] = await PolicySource.findOrCreate( + { where: { - policy_id: policyId, - source_id: sourceId, - } - }) - if (policySource) { - throw Error(`This policyId:${policyId} and sourceId:${sourceId} already assigned to each other in the database!`) - } else { - const newPolicySource = await PolicySource.create({ - policy_id: policyId, - source_id: sourceId, - }) - return newPolicySource - } + policy_id: ctx.policyId, + source_id: ctx.sourceId, + }, + }); + if (!isCreated) { + const error = new Error("Policy and source already assigned to each other."); + error.status = 400; + throw error; } + return newPolicySource; }, async updatePolicySource(ctx) { - if (!ctx) { - throw Error("The request body is empty!") + if (!ctx || !ctx.id || !ctx.sourceId) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; } - - const policySource = await PolicySource.update({ + return await PolicySource.update({ source_id: ctx.sourceId, }, { where: { id: ctx.id } }) - - return policySource }, async deletePolicySource(ctx) { - if (!ctx) { - throw Error("The request body is empty!") + if (!ctx || !ctx.id) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; } - - const policySource = await PolicySource.destroyi({ + return await PolicySource.destroy({ where: { id: ctx.id } }) - - return policySource }, async updatePolicy(ctx) { - if (!ctx) { - throw Error("The request body is empty!") + if (!ctx || !ctx.id || !ctx.name || !ctx.sourceId || !ctx.isDefault) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; } - - const policy = await Policy.update({ + return await Policy.update({ name: ctx.name, source_id: ctx.sourceId, - is_default: ctx.isDeafault + is_default: ctx.isDefault }, { where: { id: ctx.id, } }) - return policy - }, async updatePolicyField(ctx) { - if (!ctx) { - throw Error("The request body is empty!") + if (!ctx || !ctx.id || !ctx.policyId || !ctx.stdFieldId) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; } - - const policyField = await PolicyField.update({ + return await PolicyField.update({ policy_id: ctx.policyId, std_field_id: ctx.stdFieldId, }, { @@ -157,82 +136,70 @@ const PolicyService = { id: ctx.id } }) - - return policyField }, async deletePolicyField(ctx) { - if (!ctx) { - throw Error("The request body is empty!") + if (!ctx || !ctx.id) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; } - - const policyField = await PolicyField.destroy({ + return await PolicyField.destroy({ where: { id: ctx.id } - }) - - return policyField + }); }, async deletePolicy(ctx) { - if (!ctx) { - throw Error("The request body is empty!") + if (!ctx || !ctx.id) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; } - const policyField = await PolicyField.destroy({ where: { policy_id: ctx.id } - }) - - const policy = await Policy.destroy({ + }); + await Policy.destroy({ where: { id: ctx.id } - }) - - return policyField + }); + return policyField; }, - async policies(ctx) { - - return await Policy.findAll({}) + async policies() { + return await Policy.findAll({}); }, async policiesByUser(ctx) { - if (!ctx) { - throw Error("The request body is empty!") + if (!ctx || !ctx.kcId) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; } - try { - - const params = { userId: ctx.kcId } - - const policiesByUser = await db.raw( - `select DISTINCT p.id, p.name, p.user_id, p.source_id, u.kc_id from policies p - inner join users u on p.user_id = u.id - where u.kc_id = :userId`, params) - - return policiesByUser.rows - + const params = { userId: ctx.kcId }; + const policiesByUser = await db.raw(`select DISTINCT p.id, p.name, p.user_id, p.source_id, u.kc_id from policies p inner join users u on p.user_id = u.id where u.kc_id = :userId`, params); + return policiesByUser.rows; } catch (error) { - throw new Error(error) + throw new Error(error); } }, - async policyFields(ctx) { - - return await PolicyField.findAll({}) + async policyFields() { + return await PolicyField.findAll({}); }, async getAssignedPolicies(ctx) { - if (!ctx) { - throw Error("The request body is empty!") + if (!ctx || !ctx.policyId) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; } - - const params = { policyId: ctx.policyId } - + const params = { policyId: ctx.policyId }; const assignedPolicies = await db.raw(` select pf.id, sf.field_name, sf.definition_and_comment, sf.field_type, sf.values from policies p inner join policy_fields pf on p.id = pf.policy_id @@ -240,55 +207,46 @@ const PolicyService = { inner join policy_sources ps on p.id = ps.policy_id inner join sources s on ps.source_id = s.id where p.id = :policyId - `, params) - - return assignedPolicies.rows + `, params); + return assignedPolicies.rows; }, - async getPoliciesWithSources(ctx) { - if (!ctx) { - throw Error("The request body is empty!") - } - // remark: list all policies as usual, domain free + async getPoliciesWithSources() { const policiesWIthSource = await db.raw(` select p.id, p.name as policyName, s.name as sourceName from policies p left join policy_sources ps on p.id = ps.policy_id left join sources s on ps.source_id = s.id `) - return policiesWIthSource.rows }, async getPoliciesWithSourcesByUser(ctx) { - if (!ctx) { - throw Error("The request body is empty!") + if (!ctx || !ctx.kcId) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; } - try { - - const params = { userId: ctx.kcId } - + const params = { userId: ctx.kcId }; const policiesByUser = await db.raw(` select p.id, p.name as policyName, s.name as sourceName, p.user_id, p.source_id, u.kc_id from policies p inner join users u on p.user_id = u.id left join policy_sources ps on p.id = ps.policy_id left join sources s on ps.source_id = s.id where u.kc_id = :userId`, params) - - - return policiesByUser.rows - + return policiesByUser.rows; } catch (error) { - throw new Error(error) + throw new Error(error); } }, async getGroupDetailsByPolicy(ctx) { - if (!ctx) { - throw Error("The request body is empty!") + if (!ctx || !ctx.policyId) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; } - - const params = { policyId: ctx.policyId } + const params = { policyId: ctx.policyId }; const groupDetailsByPolicy = await db.raw(` select p.id as policyId, g.id as groupId, gp.id groupPolicyId, g.name as group_name, g.description as group_description, s.name as source_name, s.description as source_description from policies p inner join groups_policies gp on p.id = gp.policy_id @@ -296,13 +254,10 @@ const PolicyService = { left join policy_sources ps on p.id = ps.policy_id left join sources s on ps.source_id = s.id where p.id = :policyId - `, params) - - return groupDetailsByPolicy.rows + `, params); + return groupDetailsByPolicy.rows; } - -} - +}; module.exports = { createPolicy: PolicyService.createPolicy, @@ -322,4 +277,4 @@ module.exports = { getPoliciesWithSources: PolicyService.getPoliciesWithSources, getPoliciesWithSourcesByUser: PolicyService.getPoliciesWithSourcesByUser, getGroupDetailsByPolicy: PolicyService.getGroupDetailsByPolicy, -} \ No newline at end of file +}; diff --git a/app/dal/realmService.js b/app/dal/realmService.js index 1b3049509c16ebed4921004d2ef7162e6b4e691f..c311b9505d2edbf28a2a620b271c47587a7b9487 100644 --- a/app/dal/realmService.js +++ b/app/dal/realmService.js @@ -1,37 +1,30 @@ 'use strict' - const db = require('../../db'); const RealmService = { - async create(ctx) { - const realm = await db('realm').insert({ + return await db('realm').insert({ name: ctx.name }).returning('*').then((result) => result[0]) - return realm }, async update(ctx) { - const realm = await db('realm').where('id', ctx.id).update({ + return db('realm').where('id', ctx.id).update({ name: ctx.name - }) - return realm + }); }, async delete(ctx) { - const result = await db.delete().from('realm').where('id', ctx.id).timeout(1000, { cancel: true }) - return result + return db.delete().from('realm').where('id', ctx.id).timeout(1000, {cancel: true}); }, async realm(ctx) { - const realm = await db.select().from('realm').where('id', ctx.id).timeout(1000, { cancel: true }); - return realm + return db.select().from('realm').where('id', ctx.id).timeout(1000, {cancel: true}); }, - async realms(ctx) { - const realms = await db.select().from('realm').timeout(1000, { cancel: true }); - return realms + async realms() { + return db.select().from('realm').timeout(1000, {cancel: true}); } } @@ -41,4 +34,4 @@ module.exports = { delete: RealmService.delete, realm: RealmService.realm, realms: RealmService.realms -} \ No newline at end of file +} diff --git a/app/dal/roleAllocationService.js b/app/dal/roleAllocationService.js index 3454077e655dc0f0389d06904773d05d16b5c7ed..09af1515ddf944096b05117599333cd95c1c457f 100644 --- a/app/dal/roleAllocationService.js +++ b/app/dal/roleAllocationService.js @@ -1,88 +1,77 @@ 'use strict' -const db = require('../../db') - - -const { Role, RoleUser } = require('../models/Role') +const db = require('../../db'); +const { RoleUser } = require('../models/Role'); const RoleAllocationService = { - - // It allocates the role to user. + // Allocates a role to a user. If a role is already allocated to this user, updates it. async create(ctx) { - if (!ctx) { - throw Error("The request body is empty!") + if (!ctx || !ctx.kc_id) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; } - - const roleUser = RoleUser.findOne({ - where: { - kc_id: ctx.kc_id - } - }) - - if (!roleUser) { - return await RoleUser.create({ - role_id: ctx.role_id, - kc_id: ctx.kc_id - }) - } else { + const [roleUser, created] = await RoleUser.findOrCreate({ + where: { kc_id: ctx.kc_id }, + defaults: { role_id: ctx.role_id } + }); + if (!created) { return await RoleUser.update({ role_id: ctx.role_id, }, { where: { kc_id: ctx.kc_id } - }) + }); } + return roleUser; }, - // It updates allocated user. + // Updates roles allocated to a user. async update(ctx) { - const result = await db('roles_users').where('id', ctx.id) - .update({ + if (!ctx || !ctx.kc_id || !ctx.role_id) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; + } + return await RoleUser.update({ role_id: ctx.role_id, }, { + where: { kc_id: ctx.kc_id - }).returning('*').then((result) => result[0]) - return result + } + }); }, + // Deletes roles allocated to a user. async delete(ctx) { - const result = await db.delete().from('roles_users').where('id', ctx.id).timeout(1000, { cancel: true }) - return result + if (!ctx || !ctx.kc_id) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; + } + return await RoleUser.destroy({ + where: { + kc_id: ctx.kc_id + } + }); }, - // It returns allocated roles by kc_id. + // Get allocated roles by user kc_id. async allocatedRolesByKcId(ctx) { - try { - if (!ctx) { - throw Error("The request body is empty!") - } - if (ctx.kc_id) { - const allocatedRoles = await db.raw(` + if (!ctx || !ctx.kc_id) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; + } + const allocatedRoles = await db.raw(` select roles.id, u.username as user, roles.name as role , roles.description from roles inner join roles_users ru on roles.id = ru.role_id inner join users u on ru.kc_id = u.kc_id - where u.kc_id = ?`, [ctx.kc_id]) - - return allocatedRoles - } - } catch (err) { - throw new Error(error) - } - }, - async allocatedRoles(ctx) { - if (!ctx) { - throw Error("The request body is empty!") - } - - const allocatedRoles = await db.raw(` - select u.username as user,r.name as role from roles r - inner join roles_users ru on r.id = ru.role_id - inner join users u on ru.kc_id = u.kc_id`) - - return allocatedRoles + where u.kc_id = ?`, [ctx.kc_id]); + return allocatedRoles.rows; }, -} +}; module.exports = { create: RoleAllocationService.create, allocatedRoles: RoleAllocationService.allocatedRolesByKcId, update: RoleAllocationService.update, delete: RoleAllocationService.delete -} \ No newline at end of file +}; diff --git a/app/dal/roleService.js b/app/dal/roleService.js index 81641945caf24c388e6965eab55d74b70c340e1e..8589381a2d97c7c304a0c25afe6575b19cb0297a 100644 --- a/app/dal/roleService.js +++ b/app/dal/roleService.js @@ -1,71 +1,69 @@ "use strict" -const db = require('../../db') +const db = require('../../db'); +const { Role, RoleUser } = require('../models/Role'); -const { Role, RoleUser } = require('../models/Role') const RoleService = { - // Get all roles - async roles(ctx) { - const roles = await db.select().from('roles').timeout(1000, { cancel: true }) - return roles + async roles() { + return await Role.findAll(); }, + // Get a role async role(ctx) { - const role = await db.select().from('roles').where('id', ctx.id).timeout(1000, { cancel: true }) - return role - }, - // Delete role by id - async delete(ctx) { - const result = await db.delete().from('roles').where('id', ctx.id).timeout(1000, { cancel: true }) - return result + if (!ctx || !ctx.id) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; + } + return await Role.findAll({where: {'id': ctx.id}}); }, + + // Update role by id async update(ctx) { - const result = await db('roles').where('id', ctx.id) - .update({ - name: ctx.name, - description: ctx.description - }).returning('*').then((result) => result[0]) - return result + if (!ctx || !ctx.id || !ctx.name || !ctx.description) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; + } + return await Role.update({ + 'name': ctx.name, + 'description': ctx.description + }, { + where: {'id': ctx.id} + }); }, + // Create a role async create(ctx) { - const role = await db('roles').insert({ + return await db('roles').insert({ name: ctx.name, description: ctx.description - }).returning('*').then((result) => result[0]) - - return role + }).returning('*').then((result) => result[0]); }, - async deleteRole(ctx) { - if (!ctx) { - throw Error("The request body is empty!") - } - - console.log(ctx) - const roleUser = await RoleUser.destroy({ + // Delete role + async delete(ctx) { + if (!ctx || !ctx.id) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; + } + await RoleUser.destroy({ where: { role_id: ctx.id } - }) - - const role = await Role.destroy({ - where: { - id: ctx.id - } - }) - - return role - }, + }); + return await Role.destroy({where: {'id': ctx.id}}); + }, } module.exports = { create: RoleService.create, roles: RoleService.roles, role: RoleService.role, - delete: RoleService.deleteRole, + delete: RoleService.delete, update: RoleService.update, -} \ No newline at end of file +}; diff --git a/app/dal/searchHistoryService.js b/app/dal/searchHistoryService.js index 2d5a2913831e5acfe2f1403cf888c3c29600dfca..1671d4d5e686409dff0d36c6dd4519e5940994ae 100644 --- a/app/dal/searchHistoryService.js +++ b/app/dal/searchHistoryService.js @@ -1,86 +1,69 @@ 'use strict' const userService = require("./userService"); - const { SearchHistory } = require('../models/UserHistory'); const SearchHistoryService = { - async create(ctx) { - if (!ctx) { - throw Error("The request body is empty!") + if (!ctx || !ctx.kcId || !ctx.query || !ctx.name || !ctx.uiStructure) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; } - - if (ctx.kcId === undefined) - throw Error("kcId did not supported.") - - const user = await userService.detail({ kcId: ctx.kcId }) - - if (user) { - const result = await SearchHistory.create({ - kc_id: user.kc_id, - query: ctx.query, - name: ctx.name, - ui_structure: ctx.uiStructure, - description: ctx.description - }) - - return result - } else { - throw Error('The user account could not found.') + const user = await userService.detail({ kcId: ctx.kcId }); + if (!user) { + const error = new Error("User account not found."); + error.status = 400; + throw error; } + return await SearchHistory.create({ + kc_id: user.kc_id, + query: ctx.query, + name: ctx.name, + ui_structure: ctx.uiStructure, + description: ctx.description + }) }, - async getSearchHistories(ctx) { - if (!ctx) { - throw Error("The request body is empty!") - } - - if (ctx.kcId === undefined) - throw Error("kcId did not supported.") - - const user = await userService.detail({ kcId: ctx.kcId }) - - if (user) { - - const histories = await SearchHistory.findAll({ - where: { - kc_id: user.kc_id - } - }) - - return histories + async fetchUserSearchHistory(ctx) { + if (!ctx || !ctx.kcId) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; } + return await SearchHistory.findAll({ + where: { + kc_id: ctx.kcId + } + }); }, async update(ctx) { - if (!ctx) { - throw Error("The request body is empty!") + if (!ctx || !ctx.kcId) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; } - - if (ctx.kc_id === undefined) - throw Error("kcId did not supported.") + // Not finished ? I don't know why there is no method call to update db. }, async delete(ctx) { - if (!ctx) { - throw Error("The request body is empty!") + if (!ctx || !ctx.id) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; } - - const result = await SearchHistory.destroy({ + return await SearchHistory.destroy({ where: { id: ctx.id } - }) - - return result; + }); } -} - +}; module.exports = { create: SearchHistoryService.create, update: SearchHistoryService.update, delete: SearchHistoryService.delete, - fetch: SearchHistoryService.getSearchHistories -} \ No newline at end of file + fetch: SearchHistoryService.fetchUserSearchHistory +}; diff --git a/app/dal/userFieldsDisplaySettingsService.js b/app/dal/userFieldsDisplaySettingsService.js new file mode 100644 index 0000000000000000000000000000000000000000..48af77e0444767993b827a60ce0ce0cd360d15d4 --- /dev/null +++ b/app/dal/userFieldsDisplaySettingsService.js @@ -0,0 +1,117 @@ +"use strict" + +const {UserFieldsDisplaySettings} = require("../models/UserFieldsDisplaySettings"); + +/* + userFieldsDisplaySettingsService + Manage all users fields display settings + Used in search tool for results table columns +*/ +const userFieldsDisplaySettingsService = { + + // POST create fields settings for a specific user + // userId: id of the user + // stdFieldsIds: array of ids of fields selected by user + async create(ctx) { + if (!ctx || !ctx.userId || !ctx.stdFieldsIds) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; + } + // Check if all fields ids exists + if (!await UserFieldsDisplaySettings.validateStdFieldIds(ctx.stdFieldsIds)) { + const error = new Error("One or more std_field_id do not exists."); + error.status = 400; + throw error; + } + // Insert new row in user settings table + const [newUserFieldsSettings, isCreated] = await UserFieldsDisplaySettings.findOrCreate({ + where: { user_id: ctx.userId }, // Unique field(s) to check for existence + defaults: { + std_fields_ids: ctx.stdFieldsIds, + }, + }); + if (!isCreated) { + const error = new Error("User fields display settings already exists."); + error.status = 400; + throw error; + } + return { newUserFieldsSettings, status: 201 }; + }, + + // GET all users fields settings + async usersFieldsDisplaySettings() { + return await UserFieldsDisplaySettings.findAll({}); + }, + + // GET single user settings + // userId: id of the user + async userFieldsDisplaySettings(ctx) { + if (!ctx || !ctx.userId) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; + } + const result = await UserFieldsDisplaySettings.findOne({ where: { user_id: ctx.userId } }); + if (!result) { + const error = new Error("No settings found for this userId."); + error.status = 404; + throw error; + } + return result; + }, + + // PUT update a user settings + // userId: id of the user + // stdFieldsIds: new array of all fields ids + async update(ctx) { + if (!ctx || !ctx.userId || !ctx.stdFieldsIds) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; + } + // Check if all fields ids exists + if (!await UserFieldsDisplaySettings.validateStdFieldIds(ctx.stdFieldsIds)) { + const error = new Error("One or more std_field_id do not exists."); + error.status = 400; + throw error; + } + const [updatedCount, updatedRows] = await UserFieldsDisplaySettings.update({ + std_fields_ids: ctx.stdFieldsIds, + }, { where: { user_id: ctx.userId }}); + if (updatedCount === 0) { + const error = new Error("No settings found for this userId."); + error.status = 404; + throw error; + } + return updatedRows ? updatedRows[0] : { message: 'User fields display settings updated.'}; + }, + + // DELETE the user settings + async delete(ctx) { + if (!ctx || !ctx.userId) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; + } + const deletedCount = await UserFieldsDisplaySettings.destroy({ + where: { + user_id: ctx.userId + } + }); + if (deletedCount === 0) { + const error = new Error("No settings found for this userId."); + error.status = 404; + throw error; + } + return {message: 'User fields display settings deleted.'}; + }, +} + +module.exports = { + create: userFieldsDisplaySettingsService.create, + usersFieldsDisplaySettings: userFieldsDisplaySettingsService.usersFieldsDisplaySettings, + userFieldsDisplaySettings: userFieldsDisplaySettingsService.userFieldsDisplaySettings, + delete: userFieldsDisplaySettingsService.delete, + update: userFieldsDisplaySettingsService.update, +}; diff --git a/app/dal/userRequestService.js b/app/dal/userRequestService.js index b430bae6802302c6a8c4885712dbbc34678f0489..d0c0c10a657bc222416ab8fc1173dfb06d05b6c9 100644 --- a/app/dal/userRequestService.js +++ b/app/dal/userRequestService.js @@ -1,113 +1,88 @@ 'use strict' const userService = require("./userService"); - const { UserRequest } = require('../models/UserRequest'); -const db = require('../../db'); - const UserRequestService = { - async create(ctx) { - if (!ctx) { - throw Error("The request body is empty!") + if (!ctx || !ctx.kcId || !ctx.message) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; } - - if (ctx.kcId === undefined) - throw Error("kcId did not supported.") - - const user = await userService.detail({ kcId: ctx.kcId }) - - if (user) { - const result = await UserRequest.create({ - user_id: user.id, - request_message: ctx.message, - is_processed: false, - }) - - return result - } else { - throw Error('The user account could not found.') + const user = await userService.detail({ kcId: ctx.kcId }); + if (!user) { + const error = new Error("User account not found."); + error.status = 400; + throw error; } + return await UserRequest.create({ + user_id: user.id, + request_message: ctx.message, + is_processed: false, + }); }, - async getAllRequests(ctx) { - - return await UserRequest.findAll({}) + async getAllRequests() { + return await UserRequest.findAll({}); }, async getUserRequests(ctx) { - if (!ctx) { - throw Error("The request body is empty!") + if (!ctx || !ctx.kcId) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; } - - if (ctx.kcId === undefined) - throw Error("kcId did not supported.") - const user = await userService.detail({ kcId: ctx.kcId }) - if (user) { - - - const requests = await db.select("*").from('user_requests').where('user_id', user.id).timeout(1000, { cancel: true }) - // const requests = await UserRequest.find({ - // where: { - // user_id: user.id - // } - // }) - - return requests + return await UserRequest.findAll({ + where: { + user_id: user.id + } + }); } }, - async getPendingRequests(ctx) { - if (!ctx) { - throw Error("The request body is empty!") - } - console.log("hey") - const requests = await UserRequest.findAll({ + async getPendingRequests() { + return await UserRequest.findAll({ where: { is_processed: false } - }) - - return requests + }); }, - async update(ctx) { - if (!ctx) { - throw Error("The request body is empty!") + async process(ctx) { + if (!ctx || !ctx.id) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; } - - const group = await UserRequest.update({ + return await UserRequest.update({ is_processed: true, }, { - where: { id: ctx.id } - }) - return result + where: {id: ctx.id} + }); }, async delete(ctx) { - if (!ctx) { - throw Error("The request body is empty!") + if (!ctx || !ctx.id) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; } - - const result = await UserRequest.destroy({ + return await UserRequest.destroy({ where: { id: ctx.id } - }) - - return result; + }); } } - module.exports = { create: UserRequestService.create, - process: UserRequestService.update, - delete: UserRequestService.delete, fetch: UserRequestService.getAllRequests, fetchPending: UserRequestService.getPendingRequests, - fetchByUser: UserRequestService.getUserRequests -} \ No newline at end of file + fetchByUser: UserRequestService.getUserRequests, + process: UserRequestService.process, + delete: UserRequestService.delete, +} diff --git a/app/dal/userService.js b/app/dal/userService.js index e03b4ced6fd0661b7fbaa078a969bba62a1f8a35..3ffe89eaeec26b27436b01ba180b746e69b19829 100644 --- a/app/dal/userService.js +++ b/app/dal/userService.js @@ -1,490 +1,394 @@ "use strict" -const KcAdminClient = require("keycloak-admin").default -const { Issuer } = require("openid-client") -const db = require('../../db') -const { User } = require('../models/User') -const { Role, RoleUser } = require('../models/Role') -const { postgresSeq } = require('../config/db') -const { BotService, MailService } = require('@in-sylva/common') +const KcAdminClient = require("keycloak-admin").default; +const db = require('../../db'); +const { User } = require('../models/User'); +const { RoleUser } = require('../models/Role'); +const { postgresSeq } = require('../config/db'); +const { BotService, MailService } = require('@in-sylva/common'); const { Op } = require("sequelize"); -const bcrypt = require('bcrypt') +const bcrypt = require('bcrypt'); -const mailService = new MailService() +const mailService = new MailService(); +mailService.auth_user = process.env.IN_SYLVA_EMAIL; +mailService.auth_pass = process.env.IN_SYLVA_EMAIL_PASSWORD; +mailService.smtp_host = process.env.IN_SYLVA_SMTP_HOST; +mailService.smtp_port = process.env.IN_SYLVA_SMTP_PORT; +mailService.smtp_secure = true; -mailService.auth_user = process.env.IN_SYLVA_EMAIL -mailService.auth_pass = process.env.IN_SYLVA_EMAIL_PASSWORD -mailService.smtp_host = process.env.IN_SYLVA_SMTP_HOST -mailService.smtp_port = process.env.IN_SYLVA_SMTP_PORT -mailService.smtp_secure = true - -const botService = new BotService() - -botService.token = process.env.BOT_SERVICE_TOKEN -botService.channel = process.env.BOT_SERVICE_CHANNEL +const botService = new BotService(); +botService.token = process.env.BOT_SERVICE_TOKEN; +botService.channel = process.env.BOT_SERVICE_CHANNEL; const keycloakAdmin = new KcAdminClient({ baseUrl: `${process.env.IN_SYLVA_KEYCLOAK_HOST}:${process.env.IN_SYLVA_KEYCLOAK_PORT}/keycloak/auth`, realmName: "master" -}) +}); -async function auth() { +const auth = async () => { await keycloakAdmin.auth({ username: process.env.KEYCLOAK_USERNAME, password: process.env.KEYCLOAK_PASSWORD, grantType: process.env.KEYCLOAK_GRANT_TYPE, clientId: process.env.KEYCLOAK_CLIENT_ID, - }) + }); } -async function generatePassword(length) { - const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", - retVal = [] +const generatePassword = async (length) => { + const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", retVal = []; for (let i = 0, n = charset.length; i < length; ++i) { - retVal.push(charset.charAt(Math.floor(Math.random() * n))) + retVal.push(charset.charAt(Math.floor(Math.random() * n))); } - return retVal.join("") -} - -async function tokenRefresher() { - const keycloakIssuer = await Issuer.discover( - `${process.env.IN_SYLVA_KEYCLOAK_HOST}:${process.env.IN_SYLVA_KEYCLOAK_PORT}/auth/realms/master` - ) - - const client = new keycloakIssuer.Client({ - client_id: "admin-cli" // Same as `clientId` passed to client.auth() - }) - - // Periodically using refresh_token grant flow to get new access token here - setInterval(async () => { - const refreshToken = tokenSet.refresh_token - tokenSet = await client.refresh(keycloakAdmin.accessToken) - kcAdminClient.setAccessToken(tokenSet.access_token) - }, 58 * 1000) // 58 seconds + const password = retVal.join(""); + const salt = bcrypt.genSaltSync(); + return bcrypt.hashSync(password, salt); } const UserService = { - async resetPassword(ctx) { + // POST Create a user account + async create(ctx) { + if (!ctx || !ctx.username || !ctx.email || !ctx.password) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; + } + // Check roleId or assign to default role "normal-user" + const roleId = ctx.roleId || 3; + // TODO fetch roles ids and verify that ctx.roleId is included + // TODO assign roleId of normal-user dynamically ? instead of hard-coded value 3 + if (![1, 2, 3].includes(roleId)) { + const error = new Error("RoleId must be either 1, 2 or 3."); + error.status = 400; + throw error; + } const t = await postgresSeq.transaction(); - try { - if (!ctx) { - throw Error("The request body is empty!"); - } - await auth(); - const users = await keycloakAdmin.users.find({ + await auth(); + const [newUser, isCreated] = await User.findOrCreate({ + where: { + username: ctx.username, email: ctx.email, - realm: process.env.KEYCLOAK_REALM, - }); - if (users.length > 0) { - const user = users[0]; - const password = await generatePassword(10); - const salt = bcrypt.genSaltSync() - const hashedPassword = bcrypt.hashSync(password, salt) - console.log("generated password: " + password); - // Update user in insylva db. - const [updatedRows, _] = await User.update({ - password: hashedPassword, - }, { - where: { - kc_id: user.id, - }, - }); - if (updatedRows > 0) { - // Update user in keycloak db. - await keycloakAdmin.users.resetPassword({ - id: user.id, - credential: { - temporary: false, - type: 'password', - value: password, - }, - realm: process.env.KEYCLOAK_REALM, - }); - this.sendMail({ ...ctx, subject: "Password reset", message: `Your new password is ${password}` }); - t.commit(); - return { status: 200, message: "Password reset successfully" }; - } - else { - t.rollback(); - return { status: 500, message: "Password reset failed" }; - } - } + }, + defaults: { + password: ctx.password + }, + }); + if (!isCreated) { + const error = new Error(`User ${ctx.email} or ${ctx.username} already exists.`); + error.status = 400; + throw error; } - catch (err) { - t.rollback(); - ctx.status = err.status || 500 - ctx.body = err.message - throw Error(err) + // Insert new user into keycloak db + const kcUser = await keycloakAdmin.users.create({ + username: ctx.username, + email: ctx.email, + emailVerified: true, + enabled: true, + realm: process.env.KEYCLOAK_REALM, + }); + if (!kcUser.id) { + await t.rollback(); } + // Set new user's password in kc + await keycloakAdmin.users.resetPassword({ + id: kcUser.id, + credential: { + temporary: false, + type: 'password', + value: ctx.password + }, + realm: process.env.KEYCLOAK_REALM, + }); + // Set user kc_id in db + await User.update({ + kc_id: kcUser.id + }, { + where: { + id: newUser.id + } + }); + // User Role allocation, default user is normal-user + await RoleUser.create({ + role_id: roleId, + kc_id: kcUser.id + }) + await t.commit(); + const date = new Date().toLocaleDateString(); + const message = `[INFO]:[User ${ctx.username} is created with this email address: ${ctx.email} successfully.]:[${date}]`; + const subject = "In-Sylva new user added"; + await mailService.send(process.env.IN_SYLVA_EMAIL_FROM, process.env.IN_SYLVA_EMAIL_TO, subject, "", message); + await botService.message(message); + return newUser; }, // GET list users - // Backlog: security vulnerability - // Realm structure should implement here. - async users(ctx) { - try { - await auth() - const users = await keycloakAdmin.users.find({ + // Backlog: security vulnerability. Realm structure should implement here. + async users(){ + await auth(); + return await keycloakAdmin.users.find({ realm: process.env.KEYCLOAK_REALM - }) - return users - } - catch (err) { - ctx.status = err.status || 500 - ctx.body = err.message - throw Error(err) - } - }, - - // PUT update the user. - async update(ctx) { - await auth() - const userId = ctx.id - keycloakAdmin.setConfig({ - realmName: process.env.KEYCLOAK_REALM - }) - - await keycloakAdmin.users.update( - { id: userId }, - { - firstName: ctx.firstName, - lastName: ctx.lastName, - // email: ctx.email, - //requiredActions: [RequiredActionAlias.UPDATE_PASSWORD], - emailVerified: true, - }) - - const user = await keycloakAdmin.users.findOne({ - id: userId, realm: process.env.KEYCLOAK_REALM, - }) - - await db('users').where('kc_id', userId) - .update({ - firstname: ctx.firstName, - lastname: ctx.lastName - }).returning('*').then((result) => result[0]) - - return user + }); }, - // DELETE the user - async delete(ctx) { - try { - if (!ctx) { - throw Error("The request body is empty!") - } - - await auth() - - const userId = ctx.userId - - if (userId) { - const deleted = await User.destroy({ - where: { - kc_id: userId - } - }) - - if (deleted) { - return await keycloakAdmin.users.del({ - id: userId, - realm: process.env.KEYCLOAK_REALM - }) - } - } - } catch (error) { - ctx.status = error.status || 500 - ctx.body = error.message - throw Error(error) - } - }, - // GET single user + // GET Fetch single user async user(ctx) { - try { - await auth() - return await keycloakAdmin.users.findOne({ - id: ctx.id, realm: process.env.KEYCLOAK_REALM, - }) - } catch (err) { - ctx.status = err.status || 500 - ctx.body = err.message - throw Error(err) + if (!ctx || !ctx.id) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; } + await auth(); + return await keycloakAdmin.users.findOne({ + id: ctx.id, realm: process.env.KEYCLOAK_REALM, + }); }, + // GET kc_id from email async kcId(ctx) { - try { - if (!ctx) { - throw Error("The request body is empty!") - } - if (!ctx.email) { - throw Error("The email field is empty!") - } - const { kc_id } = await db.select('kc_id').from('users').where('email', ctx.email).timeout(1000, { cancel: true }).then((result) => result[0]) - const role = await RoleUser.findOne({ - attributes: ['role_id'], - where: { - kc_id: kc_id - } - }) - return { kcId: kc_id, role: role } - } catch (err) { - ctx.status = err.status || 500 - ctx.body = err.message - throw Error(err) + if (!ctx || !ctx.email) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; } + const { kc_id } = await db.select('kc_id').from('users').where('email', ctx.email).timeout(1000, { cancel: true }).then((result) => result[0]); + const role = await RoleUser.findOne({ + attributes: ['role_id'], + where: { + kc_id: kc_id + } + }); + return { kcId: kc_id, role: role }; }, + // GET user account details + // TODO return user details such as roles and policies async detail(ctx) { - try { - if (!ctx) { - throw Error("The request body is empty!") - } - const user = await db.select("*").from('users').where('kc_id', ctx.kcId).timeout(1000, { cancel: true }).then((result) => result[0]) - return user - // To-do - // Return user details such as roles and policies - } catch (error) { - ctx.status = error.status || 500 - ctx.body = error.message - throw Error(error) + if (!ctx || !ctx.kcId) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; } + return await db.select("*").from('users').where('kc_id', ctx.kcId).timeout(1000, {cancel: true}).then((result) => result[0]); }, - async create(ctx) { - const t = await postgresSeq.transaction() - try { - await auth() - if (!ctx) { - throw Error("The request body is empty!") - } - if (ctx.username && ctx.email && ctx.password) { - const checkUser = await User.findAndCountAll({ - where: { - [Op.or]: [ - { username: ctx.username }, - { email: ctx.email } - ] - } - }) - if (checkUser.count > 0) - return { user: null, status: 409, message: `"${ctx.email}" or "${ctx.username}" already exist, please try again with different credentials.` } - const roleId = (ctx.roleId == 0 || ctx.roleId == undefined) ? 3 : ctx.roleId - if (!!roleId && roleId == 0) - throw Error("The roleId is empty!") - // Insert this new user into insylva db. - const newUser = await User.create({ - username: ctx.username, - email: ctx.email, - password: ctx.password - }) - if (newUser.id) { - // Insert new user into keycloak db - const kcUser = await keycloakAdmin.users.create({ - username: ctx.username, - email: ctx.email, - emailVerified: true, - enabled: true, - realm: process.env.KEYCLOAK_REALM, - }) - if (kcUser.id) { - // Set new user's password - await keycloakAdmin.users.resetPassword({ - id: kcUser.id, - credential: { - temporary: false, - type: 'password', - value: ctx.password - }, - realm: process.env.KEYCLOAK_REALM, - }) - const update = await User.update({ - kc_id: kcUser.id - }, { - where: { - id: newUser.id - } - }) - if (update) { - // User Role allocation, default user is normal-user - await RoleUser.create({ - role_id: roleId, - kc_id: kcUser.id - }) - } - - } - } else { - await t.rollback() - } - await t.commit() - const date = new Date().toLocaleDateString() - const message = `[INFO]:[User ${ctx.username} is created with this email address: ${ctx.email} successfully.]:[${date}]` - const subject = "In-Sylva New User Added" - await mailService.send(process.env.IN_SYLVA_EMAIL_FROM, process.env.IN_SYLVA_EMAIL_TO, subject, "", message) - await botService.message(message) - return { user: newUser, status: 201 } - } - } catch (error) { - await t.rollback() - throw new Error(error) + // GET users assigned to a role + async getAssignedUserByRole(ctx) { + if (!ctx || !ctx.id) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; } + const params = { roleId: ctx.id }; + const assignedUserByRole = await db.raw(` + select u.username as username,u.email as useremail, r.name as rolename from roles r + inner join roles_users ru on r.id = ru.role_id + inner join users u on ru.kc_id = u.kc_id + where r.id = :roleId + `, params); + return assignedUserByRole.rows; }, - async sendMail(ctx) { - try { - if (!ctx) { - throw Error("The request body is empty!") - } - if (ctx.subject && ctx.message) { - const subject = ctx.subject - const message = ctx.message - await mailService.send(process.env.IN_SYLVA_EMAIL_FROM, ctx.email, subject, "", message) - await botService.message(message) - return { status: 201 } - } else { - throw Error("The message is missing!") - } - } catch (error) { - ctx.status = error.status || 500 - ctx.body = error.message - throw Error(error) + // PUT update the user. + async update(ctx) { + if (!ctx || !ctx.id) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; } - + await auth(); + const userId = ctx.id + keycloakAdmin.setConfig({ + realmName: process.env.KEYCLOAK_REALM + }); + await keycloakAdmin.users.update( + { id: userId }, + { + firstName: ctx.firstName, + lastName: ctx.lastName, + // email: ctx.email, + emailVerified: true, + }); + const user = await keycloakAdmin.users.findOne({ + id: userId, realm: process.env.KEYCLOAK_REALM, + }); + await db('users').where('kc_id', userId).update({ + firstname: ctx.firstName, + lastname: ctx.lastName + }).returning('*').then((result) => result[0]); + return user; }, - - async getAssignedUserByRole(ctx) { - try { - if (!ctx) { - throw Error("The request body is empty!") - } - - const params = { roleId: ctx.id } - - const assignedUserByRole = await db.raw(` - select u.username as username,u.email as useremail, r.name as rolename from roles r - inner join roles_users ru on r.id = ru.role_id - inner join users u on ru.kc_id = u.kc_id - where r.id = :roleId - `, params) - - return assignedUserByRole.rows - - } catch (error) { - throw new Error(error) + // DELETE a user + async delete(ctx) { + if (!ctx || !ctx.userId) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; } - }, - - async createSystemUser(ctx) { - try { - await auth() - - const checkUser = await User.findAndCountAll({ - where: { - [Op.or]: [ - { username: "admin" }, - { email: "admin@inrae.fr" } - ] - } + await auth(); + const deleted = await User.destroy({ + where: { kc_id: ctx.userId } + }); + if (deleted) { + return await keycloakAdmin.users.del({ + id: ctx.userId, + realm: process.env.KEYCLOAK_REALM }) + } + }, - if (checkUser.count) - return { user: null, status: 409 } - - // Insert new user into keycloak db - const kc_user = await keycloakAdmin.users.create({ - username: "admin", - email: process.env.IN_SYLVA_ADMIN_USERNAME, - emailVerified: true, - enabled: true, - realm: process.env.KEYCLOAK_REALM, - }) - // Set new user's password - if (kc_user) { - await keycloakAdmin.users.resetPassword({ - id: kc_user.id, - credential: { - temporary: false, - type: 'password', - value: process.env.IN_SYLVA_ADMIN_PASSWORD - }, - realm: process.env.KEYCLOAK_REALM, - }) + // POST create the system admin. + // It should be used once at system start-up. + async createSystemUser() { + await auth(); + const checkUser = await User.findAndCountAll({ + where: { + [Op.or]: [ + { username: "admin" }, + { email: "admin@inrae.fr" } + ] } - - const pg_user = await User.create({ - kc_id: kc_user.id, - username: "admin", - email: process.env.IN_SYLVA_ADMIN_USERNAME, - password: process.env.IN_SYLVA_ADMIN_PASSWORD - }) - - - await RoleUser.create({ - role_id: 1, - kc_id: kc_user.id - }) - - return { user: pg_user, status: 201 } - } catch (error) { - throw new Error(error) + }); + if (checkUser.count) { + return { user: null, status: 409 }; + } + // Insert new user into keycloak db + const kc_user = await keycloakAdmin.users.create({ + username: "admin", + email: process.env.IN_SYLVA_ADMIN_USERNAME, + emailVerified: true, + enabled: true, + realm: process.env.KEYCLOAK_REALM, + }); + // Set new user's password + if (kc_user) { + await keycloakAdmin.users.resetPassword({ + id: kc_user.id, + credential: { + temporary: false, + type: 'password', + value: process.env.IN_SYLVA_ADMIN_PASSWORD + }, + realm: process.env.KEYCLOAK_REALM, + }); } + const pg_user = await User.create({ + kc_id: kc_user.id, + username: "admin", + email: process.env.IN_SYLVA_ADMIN_USERNAME, + password: process.env.IN_SYLVA_ADMIN_PASSWORD + }); + await RoleUser.create({ + role_id: 1, + kc_id: kc_user.id + }); + return { user: pg_user, status: 201 }; }, - async usersWithGroupAndRole(ctx) { - try { - - const usersWithGroupsAndRole = await db.raw( + // GET Fetch all users and their group and role + async usersWithGroupAndRole() { + const usersWithGroupsAndRole = await db.raw( `select DISTINCT u.id, u.kc_id, u.username, u.email, g.name as groupName, g.description as groupDescription, r.name as roleName, r.description as roleDescription from users u inner join roles_users ru on u.kc_id = ru.kc_id inner join roles r on ru.role_id = r.id left join group_users gu on u.id = gu.user_id - left join groups g on g.id = gu.group_id`) - - return usersWithGroupsAndRole.rows - - } catch (error) { - throw new Error(error) - } + left join groups g on g.id = gu.group_id`); + return usersWithGroupsAndRole.rows; }, + // GET Fetch a user and their group and role async userWithGroupAndRole(ctx) { - try { - - const params = { userId: ctx.id } - - const userWithGroupAndRole = await db.raw( + if (!ctx || !ctx.id) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; + } + const params = { userId: ctx.id }; + const userWithGroupAndRole = await db.raw( `select DISTINCT u.id, u.kc_id, u.username, u.email, g.id as groupId, g.name as groupName, g.description as groupDescription, r.name as roleName, r.id as roleId, r.description as roleDescription from users u inner join roles_users ru on u.kc_id = ru.kc_id inner join roles r on ru.role_id = r.id left join group_users gu on u.id = gu.user_id left join groups g on g.id = gu.group_id - where u.kc_id = :userId`, params) - - return userWithGroupAndRole.rows + where u.kc_id = :userId`, params); + return userWithGroupAndRole.rows; + }, - } catch (error) { - throw new Error(error) + // POST Email a user + async sendMail(ctx) { + if (!ctx || !ctx.subject || !ctx.message) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; } - } + await mailService.send(process.env.IN_SYLVA_EMAIL_FROM, ctx.email, ctx.subject, "", ctx.message); + await botService.message(ctx.message); + return {message: "Mail sent."}; + }, + // POST Reset a user password. + async resetPassword(ctx) { + if (!ctx || !ctx.email) { + const error = new Error("Required parameters are missing."); + error.status = 400; + throw error; + } + const t = await postgresSeq.transaction(); + await auth(); + const users = await keycloakAdmin.users.find({ + email: ctx.email, + realm: process.env.KEYCLOAK_REALM, + }); + if (!users || users.length === 0) { + const error = new Error("User account not found."); + error.status = 400; + throw error; + } + const user = users[0]; + const hashedPassword = await generatePassword(10); + // Update user in insylva db. + const [updatedRowsCount, updatedRows] = await User.update({ + password: hashedPassword, + }, { + where: { + kc_id: user.id, + }, + }); + if (!updatedRowsCount || updatedRowsCount <= 0) { + t.rollback(); + const error = new Error("Reset password failed."); + error.status = 500; + throw error; + } + // Update user in keycloak db. + await keycloakAdmin.users.resetPassword({ + id: user.id, + credential: { + temporary: false, + type: 'password', + value: password, + }, + realm: process.env.KEYCLOAK_REALM, + }); + await this.sendMail({...ctx, subject: "Password reset", message: `Your new password is ${password}`}); + t.commit(); + return {message: "Password reset successfully"}; + }, } module.exports = { create: UserService.create, - users: UserService.users, user: UserService.user, - delete: UserService.delete, - update: UserService.update, + users: UserService.users, kcId: UserService.kcId, + update: UserService.update, detail: UserService.detail, + delete: UserService.delete, getAssignedUserByRole: UserService.getAssignedUserByRole, createSystemUser: UserService.createSystemUser, usersWithGroupAndRole: UserService.usersWithGroupAndRole, userWithGroupAndRole: UserService.userWithGroupAndRole, sendMail: UserService.sendMail, resetPassword: UserService.resetPassword -} +}; diff --git a/app/middlewares/errorHandler.js b/app/middlewares/errorHandler.js new file mode 100644 index 0000000000000000000000000000000000000000..a31ed06c7874d1bf578814a91a9a9ed0baaa2cad --- /dev/null +++ b/app/middlewares/errorHandler.js @@ -0,0 +1,20 @@ +const logger = require("../utils/logger"); + +/* + * Global error handler middleware + * + * - Catches and handles all errors thrown within services, handlers, and routes. + * - Logs error details for debugging and monitoring. + * - Ensures the application does not crash on unhandled errors. + */ +const errorHandler = async (ctx, next) => { + try { + await next(); + } catch (err) { + logger.error(err.message); + ctx.status = err.status || 500; + ctx.body = { error: err.message || "Internal Server Error" }; + } +}; + +module.exports = errorHandler; diff --git a/app/models/Group.js b/app/models/Group.js index 5966c103ae436d7f1b1540929c360734585c88ad..00c3764a9fc91fb0b015eeaa42d7aef42db7cab7 100644 --- a/app/models/Group.js +++ b/app/models/Group.js @@ -1,4 +1,5 @@ 'use strict' + const { postgresSeq } = require('../config/db') const Sequelize = require('sequelize') const { Policy } = require('./Policy') @@ -26,7 +27,6 @@ Group.init({ modelName: "groups" }) - GroupsPolicy.init({ group_id: { type: Sequelize.INTEGER, allowNull: false, @@ -73,44 +73,8 @@ GroupUser.init({ modelName: "group_users" }) -// Group.belongsTo(Policy, { through: GroupsPolicy, uniqueKey: "group_policy_group_id_fkey" }) -// Policy.belongsTo(Group, { through: GroupsPolicy, uniqueKey: "group_policy_policy_id_fkey" }) - -// User.belongsTo(Group, { through: GroupUser, uniqueKey: "group_user_group_id_fkey" }) -// Group.belongsTo(User, { through: GroupUser, uniqueKey: "group_user_user_id_fkey" }) - -/* -Group.hasMany(GroupsPolicy) -Policy.hasMany(GroupsPolicy) -Group.hasMany(GroupUser) -User.hasMany(GroupUser) - -GroupsPolicy.belongsToMany(Group, { - foreignKey: { - name: "group_policy_group_id_fkey" - } -}) - -GroupsPolicy.belongsToMany(Policy, { - foreignKey: { - name: "group_policy_policy_id_fkey" - } -}) - -GroupUser.belongsToMany(Group, { - foreignKey: { - name: "group_user_group_id_fkey" - } -}) - -GroupUser.belongsTo(User, { - foreignKey: { - name: "group_user_user_id_fkey" - } -}) */ - module.exports = { Group, GroupsPolicy, GroupUser, -} \ No newline at end of file +} diff --git a/app/models/Policy.js b/app/models/Policy.js index 8c4c47e00df8b447f34800d9afbda5e40916cf36..7b2a923a6adc6a84b42e4f2a87f8884cd47d2504 100644 --- a/app/models/Policy.js +++ b/app/models/Policy.js @@ -26,15 +26,6 @@ Policy.init( deferrable: Sequelize.Deferrable.INITIALLY_IMMEDIATE, } }, - /*source_id: { - type: Sequelize.INTEGER, - allowNull: false, - references: { - model: Source, - key: "id", - deferrable: Sequelize.Deferrable.INITIALLY_IMMEDIATE, - }, - },*/ }, { underscored: true, @@ -71,7 +62,7 @@ PolicyField.init( sequelize: postgresSeq, modelName: "policy_fields", }) - + PolicySource.init({ policy_id: { type: Sequelize.INTEGER, @@ -99,78 +90,6 @@ PolicySource.init({ modelName: "policy_sources", }) -// StdField.belongsTo(Policy, { through: PolicyField, foreignKey: "policy_field_policy_id_fkey", constraints: true }) -// Policy.belongsToMany(StdField, { through: PolicyField, foreignKey: "std_fields_id_fkkey", constraints: true }) -// Policy.belongsTo(StdField, { foreignKey: "std_fields_id_fkkey" }) -// StdField.belongsTo(Policy, { foreignKey: "policy_field_policy_id_fkey" }) -// Policy.belongsTo(StdField, { through: PolicyField, foreignKey: "std_fields_id_fkkey", constraints: false }) -// StdField.belongsTo(Policy, { through: PolicyField, foreignKey: "policy_field_policy_id_fkey", constraints: false }) -/* -Policy.belongsToMany(StdField, { - through: PolicyField, - uniqueKey: "policy_field_policy_id_fkey", -}); - -Policy.belongsToMany(Source, { - through: PolicyField, - uniqueKey: "policy_source_id_fkey", -}); - -StdField.belongsToMany(Policy, { - through: PolicyField, - uniqueKey: "std_fields_id_fkkey", -}); */ - - -class UserProfile extends Sequelize.Model { } - -UserProfile.init( - {}, - { - underscored: true, - sequelize: postgresSeq, - modelName: "user_profile", - } -); -/* -Policy.belongsToMany(StdField, { - through: PolicyField, - uniqueKey: "policy_field_policy_id_fkey", -}); - -Policy.belongsToMany(Source, { - through: PolicyField, - uniqueKey: "policy_source_id_fkey", -}); - -StdField.belongsToMany(Policy, { - through: PolicyField, - uniqueKey: "std_fields_id_fkkey", -});*/ - -/* -Policy.hasMany(PolicyField) -Source.hasMany(PolicyField) -StdField.hasMany(PolicyField) - -PolicyField.belongsToMany(Policy, { - foreignKey: { - name: "policy_field_policy_id_fkey" - } -}) - -PolicyField.belongsToMany(Source, { - foreignKey: { - name: "policy_field_source_id_fkey" - } -}) - -PolicyField.hasMany(StdField, { - foreignKey: { - name: "std_fields_id_fkkey" - } -}) */ - module.exports = { Policy, PolicyField, diff --git a/app/models/Role.js b/app/models/Role.js index 3d8ebfd7bdfad96f515bea51328680bf11067597..0c2a95ed884215b58dcfe081c2e3b1a9f2087e69 100644 --- a/app/models/Role.js +++ b/app/models/Role.js @@ -41,24 +41,6 @@ RoleUser.init({ modelName: "roles_users" }) -// Role.belongsTo(User, { through: RoleUser, uniqueKey: "roles_users_role_id_fkey" }) -// User.belongsTo(Role, { through: RoleUser, uniqueKey: "roles_users_kc_id_fkey" }) -/* -Role.hasMany(RoleUser) -User.hasMany(Role) - -RoleUser.belongsToMany(Role, { - foreignKey: { - name: "roles_users_role_id_fkey" - } -}) -RoleUser.hasMany(User, { - foreignKey: { - name: "roles_users_kc_id_fkey" - } -}) */ - - module.exports = { Role, RoleUser diff --git a/app/models/StdField.js b/app/models/StdField.js index 717378218d3c8186bb39a2fadce94282a683f787..5ae463c13d4bfeaff48edc1f8494e7ba5d9b87ae 100644 --- a/app/models/StdField.js +++ b/app/models/StdField.js @@ -3,7 +3,6 @@ const { postgresSeq } = require('../config/db') const Sequelize = require('sequelize') - class StdField extends Sequelize.Model { } StdField.init({ @@ -33,9 +32,3 @@ StdField.init({ module.exports = { StdField } - - - - - - diff --git a/app/models/User.js b/app/models/User.js index 364e98e0f19879ef060216c3ba82443ba84c271e..14f18e329d7f5afe0a5620f4f9e250a3a9a21ad5 100644 --- a/app/models/User.js +++ b/app/models/User.js @@ -27,14 +27,11 @@ User.init({ } }) - User.beforeCreate(async (user, options) => { const salt = bcrypt.genSaltSync() user.password = bcrypt.hashSync(user.password, salt) }) - - module.exports = { User -} \ No newline at end of file +} diff --git a/app/models/UserFieldsDisplaySettings.js b/app/models/UserFieldsDisplaySettings.js new file mode 100644 index 0000000000000000000000000000000000000000..98b7ccbcf1f40bfe21cdcfad5839109a6aa55f26 --- /dev/null +++ b/app/models/UserFieldsDisplaySettings.js @@ -0,0 +1,48 @@ +'use strict' + +const { Model, DataTypes, Deferrable} = require('sequelize'); +const { postgresSeq } = require('../config/db'); +const { User } = require('./User'); +const {StdField} = require("./StdField"); + +class UserFieldsDisplaySettings extends Model { } + +UserFieldsDisplaySettings.init({ + user_id: { + type: DataTypes.INTEGER, + allowNull: false, + unique: true, + references: { + model: User, + key: "id", + deferrable: Deferrable.INITIALLY_IMMEDIATE, + } + }, + std_fields_ids: { + type: DataTypes.ARRAY(DataTypes.INTEGER), + allowNull: false, + references: { + model: StdField, + key: 'id', + deferrable: Deferrable.INITIALLY_IMMEDIATE + }, + } +}, { + underscored: true, + sequelize: postgresSeq, + modelName: "user_fields_display_settings" +}); + +// Verify if all standard fields exists in database +UserFieldsDisplaySettings.validateStdFieldIds = async (stdFieldIds) => { + // Count the number of existing IDs in std_fields + const validIds = await StdField.count({ + where: { id: stdFieldIds }, + }); + // Check if it matches the length of stdFieldIds + return validIds === stdFieldIds.length; +}; + +module.exports = { + UserFieldsDisplaySettings, +}; diff --git a/app/utils/hashPass.js b/app/utils/hashPass.js deleted file mode 100644 index 80b32c50a9e74ebb3c37a299a979983de00ea134..0000000000000000000000000000000000000000 --- a/app/utils/hashPass.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict' - -const bcrypt = require('bcrypt') -const logger = require('winston') - -async function hashPass(valueToHash) { - const rounds = 10 - - try { - const hashedValue = await bcrypt.hash(valueToHash, rounds) - return hashedValue - } catch (err) { - logger.error(err) - throw err - } -} - -module.exports = { - hashPass -} diff --git a/app/utils/format.js b/app/utils/logger.js similarity index 90% rename from app/utils/format.js rename to app/utils/logger.js index 9e60ff74df6be86692474a78cd24f5486a4f1634..9d10265de3c0804835c51c6e2bec19c2a53d582d 100644 --- a/app/utils/format.js +++ b/app/utils/logger.js @@ -4,7 +4,6 @@ const { createLogger, format, transports } = require('winston'); const { combine, timestamp, printf, colorize, splat, label } = format; const path = require('path'); - const mFormat = printf((info) => { if (info.meta && info.meta instanceof Error) { return `${info.timestamp} ${info.level} ${info.message} : ${info.meta.stack}`; @@ -12,12 +11,11 @@ const mFormat = printf((info) => { return `${info.timestamp} ${info.level} [${info.label}]: ${info.message}`; }); -const LOG_LEVEL = process.env.LOG_LEVEL || 'debug'; const logger = createLogger({ transports: [ new (transports.Console)( { - level: LOG_LEVEL, + level: process.env.LOG_LEVEL || 'debug', format: combine( label({ label: path.basename(process.mainModule.filename) }), colorize(), @@ -29,7 +27,5 @@ const logger = createLogger({ ) ] }); -module.exports = logger; - - +module.exports = logger; diff --git a/app/utils/memory-store.js b/app/utils/memory-store.js deleted file mode 100644 index b0308ce4a7c97d38772c126ddc098f7d6a054873..0000000000000000000000000000000000000000 --- a/app/utils/memory-store.js +++ /dev/null @@ -1,29 +0,0 @@ -function MemoryStore () { - this.sessions = Object.create(null); - } - - MemoryStore.prototype.get = function (sessionId) { - var sess = this.sessions[sessionId]; - if (!sess) { - return; - } - sess = JSON.parse(sess); - if (sess.expire && sess.expire <= Date.now()) { - delete this.sessions[sessionId]; - return; - } - return sess; - }; - - MemoryStore.prototype.set = function (sessionId, session, maxAge) { - if (maxAge > 0) { - session.expire = Date.now() + maxAge; - } - this.sessions[sessionId] = JSON.stringify(session); - }; - - MemoryStore.prototype.destroy = function (sessionId) { - delete this.sessions[sessionId]; - }; - - module.exports = MemoryStore; \ No newline at end of file diff --git a/consul.js b/consul.js deleted file mode 100644 index 9ec9b078f891c34383e6e51c5c8c4ddbeefea2a9..0000000000000000000000000000000000000000 --- a/consul.js +++ /dev/null @@ -1,75 +0,0 @@ -const Consul = require("consul"); - -class ConsulConfig { - constructor() { - //Initialize consumer - this.consul = new Consul({ - host: this.ConsulIp, - port: this.ConsulPort, - promisify: true, - }); - - // Service registration and health check configuration - this.consul.agent.service.register( - { - name: this.ServiceName, - Address: this.ServiceIp, - port: this.ServicePort, - /* check: { - http: 'http://147.100.18.116:4000/healthcheck', - interval: '10s', - timeout: '6s', - } */ - }, - function (err, result) { - if (err) { - console.error(err); - throw err; - } - - console.log( - "in-sylva.gatekeeper" + "registered successfully!" + result - ); - } - ); - } - - async getConfig(key) { - const result = await this.consul.kv.get(key); - - if (!result) { - return Promise.reject(key + "does not exist"); - } - - return JSON.parse(result.Value); - } - - //Read user configuration simple package - async getUserConfig(key) { - const result = await this.getConfig("develop/user"); - - if (!key) { - return result; - } - - return result[key]; - } - - //Update user configuration simple package - async setUserConfig(key, val) { - const user = await this.getConfig("develop/user"); - - user[key] = val; - - return this.consul.kv.set("develop/user", JSON.stringify(user)); - } -} - -ConsulConfig.prototype.ConsulIp = null; -ConsulConfig.prototype.ConsulPort = null; -ConsulConfig.prototype.ServiceIp = null; -ConsulConfig.prototype.ServicePort = null; -ConsulConfig.prototype.ServiceName = "in-sylva-source-manager"; - -module.exports = ConsulConfig; - diff --git a/init-keycloak.js b/init-keycloak.js index 7f769228f586ede97e48139a185ee2c83006941c..c0b75b7532be81ec8af441062797a249eb797b2b 100644 --- a/init-keycloak.js +++ b/init-keycloak.js @@ -1,27 +1,13 @@ 'use strict' const KeycloakConnect = require('@in-sylva/keycloak-koa-connect').default -const bodyStore = require('@in-sylva/keycloak-koa-connect/stores/body-store').default // If this option is used, it is legal to include the value of jwt in the body -const queryStore = require('@in-sylva/keycloak-koa-connect/stores/query-store').default // If this option is used, it is also legal to pass a token at http://a.com?jwt=token -// var Keycloak = require('keycloak-connect'); - -// const KeycloakConnect = require('@pixelygroup/keycloak-koa-connect').default -// const bodyStore = require('@pixelygroup/keycloak-koa-connect').default // If this option is used, it is legal to include the value of jwt in the body -// const queryStore = require('@pixelygroup/keycloak-koa-connect').default // If this option is used, it is also legal to pass a token at http://a.com?jwt=token - const config = require('./keycloak.js') -const keycloak = new KeycloakConnect({ store: [queryStore, bodyStore]}, config) - -/* -var keycloak = new Keycloak({ - store: true - }, { - clientId: config.resource, - serverUrl: config["auth-server-url"], - realm: config.realm, - bearerOnly: true - }); */ +// If this option is used, it is legal to include the value of jwt in the body +const bodyStore = require('@in-sylva/keycloak-koa-connect/stores/body-store').default +// If this option is used, it is also legal to pass a token at http://a.com?jwt=token +const queryStore = require('@in-sylva/keycloak-koa-connect/stores/query-store').default +const keycloak = new KeycloakConnect({ store: [queryStore, bodyStore]}, config) -module.exports = { keycloak } \ No newline at end of file +module.exports = { keycloak } diff --git a/keycloak.js b/keycloak.js index dcfe8327656206786bb7194452a96f1f8b2720b4..2724de971a1a1053c4271d929b1eb97f70379f29 100644 --- a/keycloak.js +++ b/keycloak.js @@ -1,5 +1,4 @@ module.exports = { - 'realm': process.env.KEYCLOAK_REALM, 'auth-server-url': process.env.KEYCLOAK_SERVER_URL, "ssl-required": "none", @@ -13,9 +12,4 @@ module.exports = { 'bearer-only':true, 'use-resource-role-mappings': true, 'realm-public-key': `${process.env.KEYCLOAK_SERVER_PUBLIC_KEY}` - /* - 'ssl-required':'external', - "public-client": true, - 'confidential-port': 0, - 'realm-public-key': `${process.env.KEYCLOAK_SERVER_PUBLIC_KEY}`*/ -} \ No newline at end of file +} diff --git a/package.json b/package.json index 6e9070bcf9e43ba285883646cd788e037ef5fa55..8287ebeab8802ee48e4b6b6fc640276a63968acb 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,6 @@ "array.prototype.flatmap": "1.2.4", "bcrypt": "^5.1.0", "bluebird": "3.7.2", - "consul": "^0.37.0", "keycloak-admin": "1.14.8", "keycloak-connect": "12.0.3", "keycloak-koa-connect": "^1.0.5", diff --git a/server.js b/server.js index 6f9d0ecceb7d72d73e782ce238571203463d66d4..62fdcb445d794d7468f1234e4ee2d357e1b7fe1f 100644 --- a/server.js +++ b/server.js @@ -1,68 +1,39 @@ 'use strict' -const Koa = require('koa') -const logger = require('winston') -const api = require('./app/api') -const koaLogger = require('koa-logger') -const cors = require('koa2-cors') +const Koa = require('koa'); +const api = require('./app/api'); +const koaLogger = require('koa-logger'); +const cors = require('koa2-cors'); const { keycloak } = require('./init-keycloak'); -let session = require('koa-session'); -let MemoryStore = require('./app/utils/memory-store') +const errorHandler = require('./app/middlewares/errorHandler'); -let store = new MemoryStore(); - -async function responseTime(ctx, next) { +const responseTime = async (ctx, next) => { const start = Date.now(); await next(); const ms = Date.now() - start; ctx.set('X-Response-Time', `${ms}ms`); } -const app = new Koa() +const app = new Koa(); -app.proxy = false +app.use(errorHandler); const middlewares = keycloak.middleware({ logout: '/logout', admin: '/', protected: '/protected/resource' -}) - +}); middlewares.forEach(function (middleware) { app.use(middleware); }) +app.proxy = false; +app.use(cors({origin: '*'})); +app.use(koaLogger()); +app.use(responseTime); -app - .use(cors({ - origin: '*' - })) - /*.use(session({ - key: 'koa:sess', - maxAge: 86400000, - renew: false, - store: store, - signed: false - }, app))*/ - .use(koaLogger()) - .use(function (ctx, next) { - return next().catch((err) => { - if (err) { - console.log(err) - ctx.status = 401 - ctx.body = err //'Protected resource, use Authorization header to get access\n' - } else { - /* */ - } - }) - }) - .use(api.routes()) - .use(api.allowedMethods()) - .use(responseTime) - -app.on('error', (err) => { - logger.error('Server error', { error: err.message }) - throw err -}) +// Register routes +app.use(api.routes()); +app.use(api.allowedMethods()); -module.exports = app \ No newline at end of file +module.exports = app; diff --git a/web.js b/web.js index dfb191cee8796f944f2b20d6ec871215cf983588..2ed23e27beb96f00f81127637783379998dee7bd 100644 --- a/web.js +++ b/web.js @@ -1,33 +1,17 @@ 'use strict' -const { promisify } = require('util') -const http = require('http') -const logger = require('winston') -const app = require('./server') -const config = require('./app/config/server') +const { promisify } = require('util'); +const http = require('http'); +const app = require('./server'); +const config = require('./app/config/server'); +const logger = require("./app/utils/logger"); -logger.level = config.logger.level - -const server = http.createServer(app.callback()) -const serverListen = promisify(server.listen).bind(server) - -if (process.env.NODE_ENV === 'production') { - - // const ConsulConfig = require('./consul'); - // const consul = new ConsulConfig(); - // consul.ConsulIp = process.env.CONSUL_IP - // consul.ConsulPort = process.env.CONSUL_PORT - // consul.ServiceIp = process.env.SERVICE_IP - // consul.ServicePort = process.env.PORT - // consul.ServiceName = process.env.SERVICE_NAME -} - -serverListen(config.port) - .then(() => { - logger.info(`in-sylva.gatekeeper service is up and running on localhost:${config.port}`) - }) - .catch((err) => { - logger.error(err) - process.exit(1) - }) +const server = http.createServer(app.callback()); +const serverListen = promisify(server.listen).bind(server); +serverListen(config.port).then(() => { + logger.info(`in-sylva.gatekeeper service is up and running on localhost:${config.port}`); + }).catch((error) => { + logger.error(error); + process.exit(1); + });