@things-factory/auth-base 6.2.170 → 6.2.178
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-client/auth.js.map +1 -1
- package/dist-client/directive/privileged.d.ts +4 -4
- package/dist-client/directive/privileged.js.map +1 -1
- package/dist-client/profiled.js.map +1 -1
- package/dist-client/reducers/auth.js.map +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-server/controllers/change-pwd.js +1 -2
- package/dist-server/controllers/change-pwd.js.map +1 -1
- package/dist-server/controllers/checkin.js +1 -2
- package/dist-server/controllers/checkin.js.map +1 -1
- package/dist-server/controllers/delete-user.js +2 -3
- package/dist-server/controllers/delete-user.js.map +1 -1
- package/dist-server/controllers/invitation.js +7 -7
- package/dist-server/controllers/invitation.js.map +1 -1
- package/dist-server/controllers/profile.js +1 -2
- package/dist-server/controllers/profile.js.map +1 -1
- package/dist-server/controllers/reset-password.js +5 -5
- package/dist-server/controllers/reset-password.js.map +1 -1
- package/dist-server/controllers/signin.js +1 -2
- package/dist-server/controllers/signin.js.map +1 -1
- package/dist-server/controllers/signup.js +1 -2
- package/dist-server/controllers/signup.js.map +1 -1
- package/dist-server/controllers/unlock-user.js +5 -5
- package/dist-server/controllers/unlock-user.js.map +1 -1
- package/dist-server/controllers/utils/make-invitation-token.js +1 -2
- package/dist-server/controllers/utils/make-invitation-token.js.map +1 -1
- package/dist-server/controllers/utils/make-verification-token.js +1 -2
- package/dist-server/controllers/utils/make-verification-token.js.map +1 -1
- package/dist-server/controllers/utils/password-rule.js +10 -10
- package/dist-server/controllers/utils/password-rule.js.map +1 -1
- package/dist-server/controllers/utils/save-invitation-token.js +1 -2
- package/dist-server/controllers/utils/save-invitation-token.js.map +1 -1
- package/dist-server/controllers/utils/save-verification-token.js +1 -2
- package/dist-server/controllers/utils/save-verification-token.js.map +1 -1
- package/dist-server/controllers/verification.js +6 -6
- package/dist-server/controllers/verification.js.map +1 -1
- package/dist-server/index.js.map +1 -1
- package/dist-server/middlewares/authenticate-401-middleware.js +1 -2
- package/dist-server/middlewares/authenticate-401-middleware.js.map +1 -1
- package/dist-server/middlewares/domain-authenticate-middleware.js +1 -2
- package/dist-server/middlewares/domain-authenticate-middleware.js.map +1 -1
- package/dist-server/middlewares/graphql-authenticate-middleware.js +1 -2
- package/dist-server/middlewares/graphql-authenticate-middleware.js.map +1 -1
- package/dist-server/middlewares/index.js +1 -2
- package/dist-server/middlewares/index.js.map +1 -1
- package/dist-server/middlewares/jwt-authenticate-middleware.js +1 -2
- package/dist-server/middlewares/jwt-authenticate-middleware.js.map +1 -1
- package/dist-server/middlewares/signin-middleware.js +1 -2
- package/dist-server/middlewares/signin-middleware.js.map +1 -1
- package/dist-server/migrations/1548206416130-SeedUser.js.map +1 -1
- package/dist-server/migrations/1566805283882-SeedPrivilege.js.map +1 -1
- package/dist-server/router/auth-checkin-router.js.map +1 -1
- package/dist-server/router/auth-private-process-router.js.map +1 -1
- package/dist-server/router/auth-public-process-router.js.map +1 -1
- package/dist-server/router/auth-signin-router.js.map +1 -1
- package/dist-server/router/auth-signup-router.js.map +1 -1
- package/dist-server/router/oauth2/oauth2-authorize-router.js.map +1 -1
- package/dist-server/router/oauth2/oauth2-router.js.map +1 -1
- package/dist-server/router/oauth2/oauth2-server.js.map +1 -1
- package/dist-server/router/oauth2/passport-oauth2-client-password.js +1 -2
- package/dist-server/router/oauth2/passport-oauth2-client-password.js.map +1 -1
- package/dist-server/router/oauth2/passport-refresh-token.js +1 -2
- package/dist-server/router/oauth2/passport-refresh-token.js.map +1 -1
- package/dist-server/router/site-root-router.js.map +1 -1
- package/dist-server/routes.js.map +1 -1
- package/dist-server/service/app-binding/app-binding-mutation.js +2 -2
- package/dist-server/service/app-binding/app-binding-mutation.js.map +1 -1
- package/dist-server/service/app-binding/app-binding-query.js +2 -2
- package/dist-server/service/app-binding/app-binding-query.js.map +1 -1
- package/dist-server/service/app-binding/app-binding-types.js +2 -2
- package/dist-server/service/app-binding/app-binding-types.js.map +1 -1
- package/dist-server/service/app-binding/app-binding.js +2 -2
- package/dist-server/service/app-binding/app-binding.js.map +1 -1
- package/dist-server/service/appliance/appliance-mutation.js +2 -2
- package/dist-server/service/appliance/appliance-mutation.js.map +1 -1
- package/dist-server/service/appliance/appliance-query.js +2 -2
- package/dist-server/service/appliance/appliance-query.js.map +1 -1
- package/dist-server/service/appliance/appliance-types.js +6 -6
- package/dist-server/service/appliance/appliance-types.js.map +1 -1
- package/dist-server/service/appliance/appliance.js +2 -2
- package/dist-server/service/appliance/appliance.js.map +1 -1
- package/dist-server/service/application/application-mutation.js +2 -2
- package/dist-server/service/application/application-mutation.js.map +1 -1
- package/dist-server/service/application/application-query.js +2 -2
- package/dist-server/service/application/application-query.js.map +1 -1
- package/dist-server/service/application/application-types.js +8 -8
- package/dist-server/service/application/application-types.js.map +1 -1
- package/dist-server/service/application/application.js +4 -4
- package/dist-server/service/application/application.js.map +1 -1
- package/dist-server/service/auth-provider/auth-provider-mutation.js +2 -2
- package/dist-server/service/auth-provider/auth-provider-mutation.js.map +1 -1
- package/dist-server/service/auth-provider/auth-provider-parameter-spec.js +2 -2
- package/dist-server/service/auth-provider/auth-provider-parameter-spec.js.map +1 -1
- package/dist-server/service/auth-provider/auth-provider-query.js +2 -2
- package/dist-server/service/auth-provider/auth-provider-query.js.map +1 -1
- package/dist-server/service/auth-provider/auth-provider-type.js +6 -6
- package/dist-server/service/auth-provider/auth-provider-type.js.map +1 -1
- package/dist-server/service/auth-provider/auth-provider.js +7 -7
- package/dist-server/service/auth-provider/auth-provider.js.map +1 -1
- package/dist-server/service/domain-generator/domain-generator-mutation.js +2 -2
- package/dist-server/service/domain-generator/domain-generator-mutation.js.map +1 -1
- package/dist-server/service/domain-generator/domain-generator-types.js +6 -6
- package/dist-server/service/domain-generator/domain-generator-types.js.map +1 -1
- package/dist-server/service/granted-role/granted-role-mutation.js +6 -6
- package/dist-server/service/granted-role/granted-role-mutation.js.map +1 -1
- package/dist-server/service/granted-role/granted-role-query.js +2 -2
- package/dist-server/service/granted-role/granted-role-query.js.map +1 -1
- package/dist-server/service/granted-role/granted-role.js +2 -2
- package/dist-server/service/granted-role/granted-role.js.map +1 -1
- package/dist-server/service/invitation/invitation-mutation.js +2 -2
- package/dist-server/service/invitation/invitation-mutation.js.map +1 -1
- package/dist-server/service/invitation/invitation-query.js +2 -2
- package/dist-server/service/invitation/invitation-query.js.map +1 -1
- package/dist-server/service/invitation/invitation-types.js +2 -2
- package/dist-server/service/invitation/invitation-types.js.map +1 -1
- package/dist-server/service/invitation/invitation.js +2 -2
- package/dist-server/service/invitation/invitation.js.map +1 -1
- package/dist-server/service/login-history/login-history-query.js +2 -2
- package/dist-server/service/login-history/login-history-query.js.map +1 -1
- package/dist-server/service/login-history/login-history-type.js +2 -2
- package/dist-server/service/login-history/login-history-type.js.map +1 -1
- package/dist-server/service/login-history/login-history.js +2 -2
- package/dist-server/service/login-history/login-history.js.map +1 -1
- package/dist-server/service/partner/partner-mutation.js +2 -2
- package/dist-server/service/partner/partner-mutation.js.map +1 -1
- package/dist-server/service/partner/partner-query.js +2 -2
- package/dist-server/service/partner/partner-query.js.map +1 -1
- package/dist-server/service/partner/partner-types.js +2 -2
- package/dist-server/service/partner/partner-types.js.map +1 -1
- package/dist-server/service/partner/partner.js +2 -2
- package/dist-server/service/partner/partner.js.map +1 -1
- package/dist-server/service/password-history/password-history.js +2 -2
- package/dist-server/service/password-history/password-history.js.map +1 -1
- package/dist-server/service/privilege/privilege-directive.js.map +1 -1
- package/dist-server/service/privilege/privilege-mutation.js +2 -2
- package/dist-server/service/privilege/privilege-mutation.js.map +1 -1
- package/dist-server/service/privilege/privilege-query.js +2 -2
- package/dist-server/service/privilege/privilege-query.js.map +1 -1
- package/dist-server/service/privilege/privilege-types.js +8 -8
- package/dist-server/service/privilege/privilege-types.js.map +1 -1
- package/dist-server/service/privilege/privilege.js +6 -6
- package/dist-server/service/privilege/privilege.js.map +1 -1
- package/dist-server/service/role/role-mutation.js +2 -2
- package/dist-server/service/role/role-mutation.js.map +1 -1
- package/dist-server/service/role/role-query.js +2 -2
- package/dist-server/service/role/role-query.js.map +1 -1
- package/dist-server/service/role/role-types.js +10 -10
- package/dist-server/service/role/role-types.js.map +1 -1
- package/dist-server/service/role/role.js +2 -2
- package/dist-server/service/role/role.js.map +1 -1
- package/dist-server/service/user/domain-query.js +2 -2
- package/dist-server/service/user/domain-query.js.map +1 -1
- package/dist-server/service/user/user-mutation.js +35 -19
- package/dist-server/service/user/user-mutation.js.map +1 -1
- package/dist-server/service/user/user-query.js +2 -2
- package/dist-server/service/user/user-query.js.map +1 -1
- package/dist-server/service/user/user-types.js +6 -6
- package/dist-server/service/user/user-types.js.map +1 -1
- package/dist-server/service/user/user.js +5 -5
- package/dist-server/service/user/user.js.map +1 -1
- package/dist-server/service/users-auth-providers/users-auth-providers.js +2 -2
- package/dist-server/service/users-auth-providers/users-auth-providers.js.map +1 -1
- package/dist-server/service/verification-token/verification-token.js +3 -3
- package/dist-server/service/verification-token/verification-token.js.map +1 -1
- package/dist-server/templates/account-unlock-email.js +1 -2
- package/dist-server/templates/account-unlock-email.js.map +1 -1
- package/dist-server/templates/invitation-email.js +1 -2
- package/dist-server/templates/invitation-email.js.map +1 -1
- package/dist-server/templates/reset-password-email.js +1 -2
- package/dist-server/templates/reset-password-email.js.map +1 -1
- package/dist-server/templates/verification-email.js +1 -2
- package/dist-server/templates/verification-email.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/dist-server/utils/accepts.js +1 -2
- package/dist-server/utils/accepts.js.map +1 -1
- package/dist-server/utils/access-token-cookie.js +3 -4
- package/dist-server/utils/access-token-cookie.js.map +1 -1
- package/dist-server/utils/check-permission.js +1 -2
- package/dist-server/utils/check-permission.js.map +1 -1
- package/dist-server/utils/check-user-belongs-domain.js +1 -2
- package/dist-server/utils/check-user-belongs-domain.js.map +1 -1
- package/dist-server/utils/encrypt-state.js +2 -3
- package/dist-server/utils/encrypt-state.js.map +1 -1
- package/dist-server/utils/get-aes-256-key.js.map +1 -1
- package/dist-server/utils/get-domain-from-hostname.js +1 -2
- package/dist-server/utils/get-domain-from-hostname.js.map +1 -1
- package/dist-server/utils/get-domain-users.js +2 -3
- package/dist-server/utils/get-domain-users.js.map +1 -1
- package/dist-server/utils/get-secret.js.map +1 -1
- package/dist-server/utils/get-user-domains.js +4 -5
- package/dist-server/utils/get-user-domains.js.map +1 -1
- package/package.json +5 -5
- package/server/controllers/invitation.ts +2 -1
- package/server/controllers/reset-password.ts +2 -1
- package/server/controllers/unlock-user.ts +2 -1
- package/server/controllers/verification.ts +2 -1
- package/server/service/user/user-mutation.ts +44 -36
@@ -1,6 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.accepts =
|
3
|
+
exports.accepts = accepts;
|
4
4
|
function accepts(header, accepts) {
|
5
5
|
accepts = accepts || ['text/html', '*/*'];
|
6
6
|
for (let i = 0; i < accepts.length; i++) {
|
@@ -10,5 +10,4 @@ function accepts(header, accepts) {
|
|
10
10
|
}
|
11
11
|
return false;
|
12
12
|
}
|
13
|
-
exports.accepts = accepts;
|
14
13
|
//# sourceMappingURL=accepts.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"accepts.js","sourceRoot":"","sources":["../../server/utils/accepts.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"accepts.js","sourceRoot":"","sources":["../../server/utils/accepts.ts"],"names":[],"mappings":";;AAAA,0BAUC;AAVD,SAAgB,OAAO,CAAC,MAAW,EAAE,OAAQ;IAC3C,OAAO,GAAG,OAAO,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;IAEzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YAC9C,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC","sourcesContent":["export function accepts(header: any, accepts?) {\n accepts = accepts || ['text/html', '*/*']\n \n for (let i = 0; i < accepts.length; i++) {\n if ((header || '').indexOf(accepts[i]) !== -1) {\n return true\n }\n }\n\n return false\n}\n"]}
|
@@ -1,6 +1,8 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.
|
3
|
+
exports.getAccessTokenCookie = getAccessTokenCookie;
|
4
|
+
exports.setAccessTokenCookie = setAccessTokenCookie;
|
5
|
+
exports.clearAccessTokenCookie = clearAccessTokenCookie;
|
4
6
|
const shell_1 = require("@things-factory/shell");
|
5
7
|
const env_1 = require("@things-factory/env");
|
6
8
|
const max_age_1 = require("../constants/max-age");
|
@@ -9,7 +11,6 @@ function getAccessTokenCookie(context) {
|
|
9
11
|
var _a;
|
10
12
|
return (_a = context === null || context === void 0 ? void 0 : context.cookies) === null || _a === void 0 ? void 0 : _a.get(accessTokenCookieKey);
|
11
13
|
}
|
12
|
-
exports.getAccessTokenCookie = getAccessTokenCookie;
|
13
14
|
function setAccessTokenCookie(context, token) {
|
14
15
|
const { secure } = context;
|
15
16
|
var cookie = {
|
@@ -24,7 +25,6 @@ function setAccessTokenCookie(context, token) {
|
|
24
25
|
}
|
25
26
|
context.cookies.set(accessTokenCookieKey, token, cookie);
|
26
27
|
}
|
27
|
-
exports.setAccessTokenCookie = setAccessTokenCookie;
|
28
28
|
function clearAccessTokenCookie(context) {
|
29
29
|
const { secure } = context;
|
30
30
|
var cookie = {
|
@@ -43,5 +43,4 @@ function clearAccessTokenCookie(context) {
|
|
43
43
|
*/
|
44
44
|
context.cookies.set('i18next', '', cookie);
|
45
45
|
}
|
46
|
-
exports.clearAccessTokenCookie = clearAccessTokenCookie;
|
47
46
|
//# sourceMappingURL=access-token-cookie.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"access-token-cookie.js","sourceRoot":"","sources":["../../server/utils/access-token-cookie.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"access-token-cookie.js","sourceRoot":"","sources":["../../server/utils/access-token-cookie.ts"],"names":[],"mappings":";;AAMA,oDAEC;AAED,oDAgBC;AAED,wDAoBC;AAhDD,iDAAmE;AACnE,6CAA4C;AAC5C,kDAA8C;AAE9C,MAAM,oBAAoB,GAAG,YAAM,CAAC,GAAG,CAAC,sBAAsB,EAAE,cAAc,CAAC,CAAA;AAE/E,SAAgB,oBAAoB,CAAC,OAAO;;IAC1C,OAAO,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,0CAAE,GAAG,CAAC,oBAAoB,CAAC,CAAA;AACpD,CAAC;AAED,SAAgB,oBAAoB,CAAC,OAAO,EAAE,KAAK;IACjD,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;IAE1B,IAAI,MAAM,GAAG;QACX,MAAM;QACN,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE,iBAAO;QACf,QAAQ,EAAE,KAAK;KAChB,CAAA;IAED,MAAM,YAAY,GAAG,IAAA,mCAA2B,EAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IAClE,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,CAAC,QAAQ,CAAC,GAAG,YAAY,CAAA;IACjC,CAAC;IAED,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;AAC1D,CAAC;AAED,SAAgB,sBAAsB,CAAC,OAAO;IAC5C,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;IAE1B,IAAI,MAAM,GAAG;QACX,MAAM;QACN,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,KAAK;KAChB,CAAA;IAED,MAAM,YAAY,GAAG,IAAA,mCAA2B,EAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IAClE,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,CAAC,QAAQ,CAAC,GAAG,YAAY,CAAA;IACjC,CAAC;IAED,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,EAAE,EAAE,MAAM,CAAC,CAAA;IACrD;;;OAGG;IACH,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,EAAE,MAAM,CAAC,CAAA;AAC5C,CAAC","sourcesContent":["import { getCookieDomainFromHostname } from '@things-factory/shell'\nimport { config } from '@things-factory/env'\nimport { MAX_AGE } from '../constants/max-age'\n\nconst accessTokenCookieKey = config.get('accessTokenCookieKey', 'access_token')\n\nexport function getAccessTokenCookie(context) {\n return context?.cookies?.get(accessTokenCookieKey)\n}\n\nexport function setAccessTokenCookie(context, token) {\n const { secure } = context\n\n var cookie = {\n secure,\n httpOnly: true,\n maxAge: MAX_AGE,\n sameSite: 'Lax'\n }\n\n const cookieDomain = getCookieDomainFromHostname(context.hostname)\n if (cookieDomain) {\n cookie['domain'] = cookieDomain\n }\n\n context.cookies.set(accessTokenCookieKey, token, cookie)\n}\n\nexport function clearAccessTokenCookie(context) {\n const { secure } = context\n\n var cookie = {\n secure,\n httpOnly: true,\n sameSite: 'Lax'\n }\n\n const cookieDomain = getCookieDomainFromHostname(context.hostname)\n if (cookieDomain) {\n cookie['domain'] = cookieDomain\n }\n\n context.cookies.set(accessTokenCookieKey, '', cookie)\n /*\n * TODO clear i18next cookie as well - need to support domain\n * https://github.com/hatiolab/things-factory/issues/70\n */\n context.cookies.set('i18next', '', cookie)\n}\n"]}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.checkPermission =
|
3
|
+
exports.checkPermission = checkPermission;
|
4
4
|
const user_1 = require("../service/user/user");
|
5
5
|
async function checkPermission(privilegeObject, user, domain, unsafeIP, prohibitedPrivileges) {
|
6
6
|
if (!privilegeObject) {
|
@@ -34,5 +34,4 @@ async function checkPermission(privilegeObject, user, domain, unsafeIP, prohibit
|
|
34
34
|
return await user_1.User.hasPrivilege(privilege, category, domain, user);
|
35
35
|
}
|
36
36
|
}
|
37
|
-
exports.checkPermission = checkPermission;
|
38
37
|
//# sourceMappingURL=check-permission.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"check-permission.js","sourceRoot":"","sources":["../../server/utils/check-permission.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"check-permission.js","sourceRoot":"","sources":["../../server/utils/check-permission.ts"],"names":[],"mappings":";;AAIA,0CA+CC;AAjDD,+CAA2C;AAEpC,KAAK,UAAU,eAAe,CACnC,eAAgC,EAChC,IAAU,EACV,MAAc,EACd,QAAkB,EAClB,oBAAgE;IAEhE,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,eAAe,CAAA;IAEnG,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,SAAS,IAAI,QAAQ,EAAE,CAAC;YAC1B,8CAA8C;YAC9C,IAAI,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,IAAI,QAAQ,IAAI,EAAE,CAAC,SAAS,IAAI,SAAS,CAAC,EAAE,CAAC;gBAClG,OAAO,KAAK,CAAA;YACd,CAAC;YAED,OAAO,MAAM,WAAI,CAAC,YAAY,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;QACnE,CAAC;QAED,wEAAwE;QACxE,OAAO,CAAC,kBAAkB,IAAI,CAAC,gBAAgB,CAAA;IACjD,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,SAAS,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5B,8DAA8D;YAC9D,OAAO,CACL,CAAC,kBAAkB,IAAI,CAAC,MAAM,OAAO,CAAC,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;gBACxE,CAAC,gBAAgB,IAAI,CAAC,MAAM,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CACrE,CAAA;QACH,CAAC;QAED,IACE,CAAC,kBAAkB,IAAI,CAAC,MAAM,OAAO,CAAC,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;YACxE,CAAC,gBAAgB,IAAI,CAAC,MAAM,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EACpE,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;QAED,IAAI,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,IAAI,QAAQ,IAAI,EAAE,CAAC,SAAS,IAAI,SAAS,CAAC,EAAE,CAAC;YAClG,OAAO,KAAK,CAAA;QACd,CAAC;QAED,OAAO,MAAM,WAAI,CAAC,YAAY,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;IACnE,CAAC;AACH,CAAC","sourcesContent":["import { Domain } from '@things-factory/shell'\nimport { PrivilegeObject } from '../service/privilege/privilege'\nimport { User } from '../service/user/user'\n\nexport async function checkPermission(\n privilegeObject: PrivilegeObject,\n user: User,\n domain: Domain,\n unsafeIP?: boolean,\n prohibitedPrivileges?: { category: string; privilege: string }[]\n): Promise<boolean> {\n if (!privilegeObject) {\n return true\n }\n\n const { owner: domainOwnerGranted, super: superUserGranted, category, privilege } = privilegeObject\n\n if (unsafeIP) {\n if (privilege && category) {\n // unsafeIP 상황에서는 ownership granted는 적용되지 않는다.\n if ((prohibitedPrivileges || []).find(pp => pp.category == category && pp.privilege == privilege)) {\n return false\n }\n\n return await User.hasPrivilege(privilege, category, domain, user)\n }\n\n // privilege, category가 설정되지 않은 경우에는 ownership granted가 설정되었다면 허가하지 않는다.\n return !domainOwnerGranted && !superUserGranted\n } else {\n if (!privilege || !category) {\n // privilege, category가 설정되지 않은 경우에는 ownership granted만을 적용한다.\n return (\n (domainOwnerGranted && (await process.domainOwnerGranted(domain, user))) ||\n (superUserGranted && (await process.superUserGranted(domain, user)))\n )\n }\n\n if (\n (domainOwnerGranted && (await process.domainOwnerGranted(domain, user))) ||\n (superUserGranted && (await process.superUserGranted(domain, user)))\n ) {\n return true\n }\n\n if ((prohibitedPrivileges || []).find(pp => pp.category == category && pp.privilege == privilege)) {\n return false\n }\n\n return await User.hasPrivilege(privilege, category, domain, user)\n }\n}\n"]}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.checkUserBelongsDomain =
|
3
|
+
exports.checkUserBelongsDomain = checkUserBelongsDomain;
|
4
4
|
const shell_1 = require("@things-factory/shell");
|
5
5
|
const user_1 = require("../service/user/user");
|
6
6
|
/**
|
@@ -18,5 +18,4 @@ async function checkUserBelongsDomain(domain, user) {
|
|
18
18
|
const { domains: userDomains } = user;
|
19
19
|
return Boolean(userDomains.find((userDomain) => userDomain.id === domain.id));
|
20
20
|
}
|
21
|
-
exports.checkUserBelongsDomain = checkUserBelongsDomain;
|
22
21
|
//# sourceMappingURL=check-user-belongs-domain.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"check-user-belongs-domain.js","sourceRoot":"","sources":["../../server/utils/check-user-belongs-domain.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"check-user-belongs-domain.js","sourceRoot":"","sources":["../../server/utils/check-user-belongs-domain.ts"],"names":[],"mappings":";;AAWA,wDAOC;AAlBD,iDAA6D;AAE7D,+CAA2C;AAE3C;;;;;;GAMG;AACI,KAAK,UAAU,sBAAsB,CAAC,MAAc,EAAE,IAAU;;IACrE,IAAI,CAAC,CAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,MAAM,CAAA,EAAE,CAAC;QAC1B,IAAI,GAAG,MAAM,IAAA,qBAAa,EAAC,WAAI,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;IAC9F,CAAC;IAED,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAS,IAAI,CAAA;IAC3C,OAAO,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,UAAkB,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;AACvF,CAAC","sourcesContent":["import { Domain, getRepository } from '@things-factory/shell'\n\nimport { User } from '../service/user/user'\n\n/**\n * @description Based on domain and user information,\n * Find out whether the user belongs domain or user has partnership with domain\n *\n * @param domain\n * @param user\n */\nexport async function checkUserBelongsDomain(domain: Domain, user: User): Promise<Boolean> {\n if (!user.domains?.length) {\n user = await getRepository(User).findOne({ where: { id: user.id }, relations: ['domains'] })\n }\n\n const { domains: userDomains }: User = user\n return Boolean(userDomains.find((userDomain: Domain) => userDomain.id === domain.id))\n}\n"]}
|
@@ -1,6 +1,7 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.
|
3
|
+
exports.encryptState = encryptState;
|
4
|
+
exports.decryptState = decryptState;
|
4
5
|
const tslib_1 = require("tslib");
|
5
6
|
const crypto_1 = tslib_1.__importDefault(require("crypto"));
|
6
7
|
/* only for short-term life state encryption */
|
@@ -11,7 +12,6 @@ function encryptState(text) {
|
|
11
12
|
const encrypted = cipher.update(text);
|
12
13
|
return iv.toString('hex') + ':' + Buffer.concat([encrypted, cipher.final()]).toString('hex');
|
13
14
|
}
|
14
|
-
exports.encryptState = encryptState;
|
15
15
|
function decryptState(text) {
|
16
16
|
const textParts = text.split(':');
|
17
17
|
const iv = Buffer.from(textParts.shift(), 'hex');
|
@@ -20,5 +20,4 @@ function decryptState(text) {
|
|
20
20
|
const decrypted = decipher.update(encryptedText);
|
21
21
|
return Buffer.concat([decrypted, decipher.final()]).toString();
|
22
22
|
}
|
23
|
-
exports.decryptState = decryptState;
|
24
23
|
//# sourceMappingURL=encrypt-state.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"encrypt-state.js","sourceRoot":"","sources":["../../server/utils/encrypt-state.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"encrypt-state.js","sourceRoot":"","sources":["../../server/utils/encrypt-state.ts"],"names":[],"mappings":";;AAKA,oCAMC;AAED,oCAQC;;AArBD,4DAA2B;AAE3B,+CAA+C;AAC/C,MAAM,GAAG,GAAG,gBAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;AAElC,SAAgB,YAAY,CAAC,IAAY;IACvC,MAAM,EAAE,GAAG,gBAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;IACjC,MAAM,MAAM,GAAG,gBAAM,CAAC,cAAc,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAA;IACzE,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAErC,OAAO,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AAC9F,CAAC;AAED,SAAgB,YAAY,CAAC,IAAY;IACvC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACjC,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,CAAA;IAChD,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAA;IAC7D,MAAM,QAAQ,GAAG,gBAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAA;IAC7E,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;IAEhD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;AAChE,CAAC","sourcesContent":["import crypto from 'crypto'\n\n/* only for short-term life state encryption */\nconst KEY = crypto.randomBytes(32)\n\nexport function encryptState(text: string) {\n const iv = crypto.randomBytes(16)\n const cipher = crypto.createCipheriv('aes-256-cbc', Buffer.from(KEY), iv)\n const encrypted = cipher.update(text)\n\n return iv.toString('hex') + ':' + Buffer.concat([encrypted, cipher.final()]).toString('hex')\n}\n\nexport function decryptState(text: string) {\n const textParts = text.split(':')\n const iv = Buffer.from(textParts.shift(), 'hex')\n const encryptedText = Buffer.from(textParts.join(':'), 'hex')\n const decipher = crypto.createDecipheriv('aes-256-cbc', Buffer.from(KEY), iv)\n const decrypted = decipher.update(encryptedText)\n\n return Buffer.concat([decrypted, decipher.final()]).toString()\n}\n"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"get-aes-256-key.js","sourceRoot":"","sources":["../../server/utils/get-aes-256-key.ts"],"names":[],"mappings":";;;AAAA,6CAA4C;AAE5C,IAAI,YAAY,GAAG,YAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;AAE5C,IAAI,CAAC,YAAY,EAAE;
|
1
|
+
{"version":3,"file":"get-aes-256-key.js","sourceRoot":"","sources":["../../server/utils/get-aes-256-key.ts"],"names":[],"mappings":";;;AAAA,6CAA4C;AAE5C,IAAI,YAAY,GAAG,YAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;AAE5C,IAAI,CAAC,YAAY,EAAE,CAAC;IAClB,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,YAAY,EAAE,CAAC;QACzC,MAAM,IAAI,SAAS,CAAC,6BAA6B,CAAC,CAAA;IACpD,CAAC;SAAM,CAAC;QACN,YAAY,GAAG,kCAAkC,CAAA;IACnD,CAAC;AACH,CAAC;AAEY,QAAA,WAAW,GAAG,YAAY,CAAA","sourcesContent":["import { config } from '@things-factory/env'\n\nvar _AES_256_KEY = config.get('AES_256_KEY')\n\nif (!_AES_256_KEY) {\n if (process.env.NODE_ENV == 'production') {\n throw new TypeError('AES_256_KEY not configured.')\n } else {\n _AES_256_KEY = 'V6g5oHJZb7KcYzIyL6cM95XvIDouon5b'\n }\n}\n\nexport const AES_256_KEY = _AES_256_KEY\n"]}
|
@@ -1,10 +1,9 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.getDomainFromHostname =
|
3
|
+
exports.getDomainFromHostname = getDomainFromHostname;
|
4
4
|
const env_1 = require("@things-factory/env");
|
5
5
|
var subdomainOffset = env_1.config.get('subdomainOffset', 2);
|
6
6
|
function getDomainFromHostname(hostname) {
|
7
7
|
return hostname.split('.').slice(-subdomainOffset).join('.');
|
8
8
|
}
|
9
|
-
exports.getDomainFromHostname = getDomainFromHostname;
|
10
9
|
//# sourceMappingURL=get-domain-from-hostname.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"get-domain-from-hostname.js","sourceRoot":"","sources":["../../server/utils/get-domain-from-hostname.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"get-domain-from-hostname.js","sourceRoot":"","sources":["../../server/utils/get-domain-from-hostname.ts"],"names":[],"mappings":";;AAIA,sDAEC;AAND,6CAA4C;AAE5C,IAAI,eAAe,GAAG,YAAM,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAA;AAEtD,SAAgB,qBAAqB,CAAC,QAAQ;IAC5C,OAAO,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC9D,CAAC","sourcesContent":["import { config } from '@things-factory/env'\n\nvar subdomainOffset = config.get('subdomainOffset', 2)\n\nexport function getDomainFromHostname(hostname) {\n return hostname.split('.').slice(-subdomainOffset).join('.')\n}\n"]}
|
@@ -1,6 +1,7 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.
|
3
|
+
exports.getDomainUsers = getDomainUsers;
|
4
|
+
exports.buildDomainUsersQueryBuilder = buildDomainUsersQueryBuilder;
|
4
5
|
const shell_1 = require("@things-factory/shell");
|
5
6
|
const user_1 = require("../service/user/user");
|
6
7
|
async function getDomainUsers(domain, trxMgr) {
|
@@ -14,7 +15,6 @@ async function getDomainUsers(domain, trxMgr) {
|
|
14
15
|
const qb = buildDomainUsersQueryBuilder(domain.id);
|
15
16
|
return await qb.getMany();
|
16
17
|
}
|
17
|
-
exports.getDomainUsers = getDomainUsers;
|
18
18
|
function buildDomainUsersQueryBuilder(domainId, alias = 'USER', trxMgr) {
|
19
19
|
const userRepo = (trxMgr === null || trxMgr === void 0 ? void 0 : trxMgr.getRepository(user_1.User)) || (0, shell_1.getRepository)(user_1.User);
|
20
20
|
const qb = userRepo.createQueryBuilder(alias);
|
@@ -26,5 +26,4 @@ function buildDomainUsersQueryBuilder(domainId, alias = 'USER', trxMgr) {
|
|
26
26
|
.getQuery()}`);
|
27
27
|
return qb;
|
28
28
|
}
|
29
|
-
exports.buildDomainUsersQueryBuilder = buildDomainUsersQueryBuilder;
|
30
29
|
//# sourceMappingURL=get-domain-users.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"get-domain-users.js","sourceRoot":"","sources":["../../server/utils/get-domain-users.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"get-domain-users.js","sourceRoot":"","sources":["../../server/utils/get-domain-users.ts"],"names":[],"mappings":";;AAMA,wCAYC;AAED,oEAiBC;AAnCD,iDAA6D;AAE7D,+CAA2C;AAEpC,KAAK,UAAU,cAAc,CAAC,MAAuB,EAAE,MAAsB;IAClF,MAAM,UAAU,GAAuB,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,aAAa,CAAC,cAAM,CAAC,KAAI,IAAA,qBAAa,EAAC,cAAM,CAAC,CAAA;IAE7F,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,WAAW,GAAW,MAAM,UAAU,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;QAClF,IAAI,CAAC,WAAW;YAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,MAAM,EAAE,CAAC,CAAA;QAEzF,MAAM,GAAG,WAAW,CAAA;IACtB,CAAC;IAED,MAAM,EAAE,GAA6B,4BAA4B,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IAC5E,OAAO,MAAM,EAAE,CAAC,OAAO,EAAE,CAAA;AAC3B,CAAC;AAED,SAAgB,4BAA4B,CAC1C,QAAgB,EAChB,QAAgB,MAAM,EACtB,MAAsB;IAEtB,MAAM,QAAQ,GAAqB,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,aAAa,CAAC,WAAI,CAAC,KAAI,IAAA,qBAAa,EAAC,WAAI,CAAC,CAAA;IACrF,MAAM,EAAE,GAA6B,QAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAA;IACvE,EAAE,CAAC,MAAM,EAAE,CAAC,QAAQ,CAClB,GAAG,KAAK,UAAU,EAAE;SACjB,QAAQ,EAAE;SACV,MAAM,CAAC,wBAAwB,CAAC;SAChC,IAAI,CAAC,eAAe,EAAE,eAAe,CAAC;SACtC,KAAK,CAAC,sCAAsC,EAAE,EAAE,QAAQ,EAAE,CAAC;SAC3D,QAAQ,EAAE,EAAE,CAChB,CAAA;IAED,OAAO,EAAE,CAAA;AACX,CAAC","sourcesContent":["import { EntityManager, Repository, SelectQueryBuilder } from 'typeorm'\n\nimport { Domain, getRepository } from '@things-factory/shell'\n\nimport { User } from '../service/user/user'\n\nexport async function getDomainUsers(domain: Partial<Domain>, trxMgr?: EntityManager): Promise<User[]> {\n const domainRepo: Repository<Domain> = trxMgr?.getRepository(Domain) || getRepository(Domain)\n\n if (!domain.id) {\n const foundDomain: Domain = await domainRepo.findOne({ where: { id: domain.id } })\n if (!foundDomain) throw new Error(`Failed to find domain by passed condition, ${domain}`)\n\n domain = foundDomain\n }\n\n const qb: SelectQueryBuilder<User> = buildDomainUsersQueryBuilder(domain.id)\n return await qb.getMany()\n}\n\nexport function buildDomainUsersQueryBuilder(\n domainId: string,\n alias: string = 'USER',\n trxMgr?: EntityManager\n): SelectQueryBuilder<User> {\n const userRepo: Repository<User> = trxMgr?.getRepository(User) || getRepository(User)\n const qb: SelectQueryBuilder<User> = userRepo.createQueryBuilder(alias)\n qb.select().andWhere(\n `${alias}.id IN ${qb\n .subQuery()\n .select('USERS_DOMAINS.users_id')\n .from('users_domains', 'USERS_DOMAINS')\n .where('USERS_DOMAINS.domains_id = :domainId', { domainId })\n .getQuery()}`\n )\n\n return qb\n}\n"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"get-secret.js","sourceRoot":"","sources":["../../server/utils/get-secret.ts"],"names":[],"mappings":";;;AAAA,6CAA4C;AAE5C,IAAI,OAAO,GAAG,YAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;AAElC,IAAI,CAAC,OAAO,EAAE;
|
1
|
+
{"version":3,"file":"get-secret.js","sourceRoot":"","sources":["../../server/utils/get-secret.ts"],"names":[],"mappings":";;;AAAA,6CAA4C;AAE5C,IAAI,OAAO,GAAG,YAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;AAElC,IAAI,CAAC,OAAO,EAAE,CAAC;IACb,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,YAAY,EAAE,CAAC;QACzC,MAAM,IAAI,SAAS,CAAC,4BAA4B,CAAC,CAAA;IACnD,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,4CAA4C,CAAA;IACxD,CAAC;AACH,CAAC;AAEY,QAAA,MAAM,GAAG,OAAO,CAAA","sourcesContent":["import { config } from '@things-factory/env'\n\nvar _SECRET = config.get('SECRET')\n\nif (!_SECRET) {\n if (process.env.NODE_ENV == 'production') {\n throw new TypeError('SECRET key not configured.')\n } else {\n _SECRET = '0xD58F835B69D207A76CC5F84a70a1D0d4C79dAC95'\n }\n}\n\nexport const SECRET = _SECRET\n"]}
|
@@ -1,6 +1,9 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.
|
3
|
+
exports.getUserDomains = getUserDomains;
|
4
|
+
exports.getRoleBasedDomains = getRoleBasedDomains;
|
5
|
+
exports.getDomainsWithPrivilege = getDomainsWithPrivilege;
|
6
|
+
exports.getDomainsAsOwner = getDomainsAsOwner;
|
4
7
|
const shell_1 = require("@things-factory/shell");
|
5
8
|
const user_1 = require("../service/user/user");
|
6
9
|
async function getUserDomains(user) {
|
@@ -33,7 +36,6 @@ async function getUserDomains(user) {
|
|
33
36
|
return { id, name, description, subdomain, extType, brandName, brandImage };
|
34
37
|
});
|
35
38
|
}
|
36
|
-
exports.getUserDomains = getUserDomains;
|
37
39
|
async function getRoleBasedDomains(user) {
|
38
40
|
return (await (0, shell_1.getRepository)(shell_1.Domain)
|
39
41
|
.createQueryBuilder('DOMAIN')
|
@@ -54,7 +56,6 @@ async function getRoleBasedDomains(user) {
|
|
54
56
|
return { id, name, description, subdomain, extType, brandName, brandImage };
|
55
57
|
});
|
56
58
|
}
|
57
|
-
exports.getRoleBasedDomains = getRoleBasedDomains;
|
58
59
|
async function getDomainsWithPrivilege(user, privilege, category) {
|
59
60
|
return (await (0, shell_1.getRepository)(shell_1.Domain)
|
60
61
|
.createQueryBuilder('DOMAIN')
|
@@ -88,7 +89,6 @@ async function getDomainsWithPrivilege(user, privilege, category) {
|
|
88
89
|
return { id, name, description, subdomain, extType, brandName, brandImage };
|
89
90
|
});
|
90
91
|
}
|
91
|
-
exports.getDomainsWithPrivilege = getDomainsWithPrivilege;
|
92
92
|
async function getDomainsAsOwner(user) {
|
93
93
|
return (await (0, shell_1.getRepository)(shell_1.Domain).find({
|
94
94
|
where: { owner: user.id }
|
@@ -97,5 +97,4 @@ async function getDomainsAsOwner(user) {
|
|
97
97
|
return { id, name, description, subdomain, extType, brandName, brandImage };
|
98
98
|
});
|
99
99
|
}
|
100
|
-
exports.getDomainsAsOwner = getDomainsAsOwner;
|
101
100
|
//# sourceMappingURL=get-user-domains.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"get-user-domains.js","sourceRoot":"","sources":["../../server/utils/get-user-domains.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"get-user-domains.js","sourceRoot":"","sources":["../../server/utils/get-user-domains.ts"],"names":[],"mappings":"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","sourcesContent":["import { In } from 'typeorm'\n\nimport { Domain, getRepository } from '@things-factory/shell'\n\nimport { User } from '../service/user/user'\n\nexport async function getUserDomains(user: User): Promise<Partial<Domain>[]> {\n return (\n await getRepository(Domain)\n .createQueryBuilder('DOMAIN')\n .where(qb => {\n const subQuery = qb\n .subQuery()\n .distinct(true)\n .select('DOMAIN.id')\n .from(User, 'USER')\n .leftJoin('USER.roles', 'ROLE')\n .leftJoin('ROLE.domain', 'DOMAIN')\n .where('USER.id = :userId', { userId: user.id })\n .getQuery()\n return 'DOMAIN.id IN ' + subQuery\n })\n .orWhere(qb => {\n const subQuery = qb\n .subQuery()\n .select('DOMAIN.id')\n .from(Domain, 'DOMAIN')\n .where('DOMAIN.owner = :owner', { owner: user.id })\n .getQuery()\n return 'DOMAIN.id IN ' + subQuery\n })\n .orderBy('DOMAIN.name', 'ASC')\n .getMany()\n ).map(domain => {\n const { id, name, description, subdomain, extType, brandName, brandImage } = domain\n return { id, name, description, subdomain, extType, brandName, brandImage }\n })\n}\n\nexport async function getRoleBasedDomains(user: User): Promise<Partial<Domain>[]> {\n return (\n await getRepository(Domain)\n .createQueryBuilder('DOMAIN')\n .where(qb => {\n const subQuery = qb\n .subQuery()\n .distinct(true)\n .select('DOMAIN.id')\n .from(User, 'USER')\n .leftJoin('USER.roles', 'ROLE')\n .leftJoin('ROLE.domain', 'DOMAIN')\n .where('USER.id = :userId', { userId: user.id })\n .getQuery()\n return 'DOMAIN.id IN ' + subQuery\n })\n .getMany()\n ).map(domain => {\n const { id, name, description, subdomain, extType, brandName, brandImage } = domain\n return { id, name, description, subdomain, extType, brandName, brandImage }\n })\n}\n\nexport async function getDomainsWithPrivilege(\n user: User,\n privilege: string,\n category: string\n): Promise<Partial<Domain>[]> {\n return (\n await getRepository(Domain)\n .createQueryBuilder('DOMAIN')\n .where(qb => {\n const subQuery = qb\n .subQuery()\n .distinct(true)\n .select('DOMAIN.id')\n .from(User, 'USER')\n .leftJoin('USER.roles', 'ROLE')\n .leftJoin('ROLE.domain', 'DOMAIN')\n .leftJoin('ROLE.privileges', 'PRIVILEGE')\n .where('USER.id = :userId', { userId: user.id })\n .andWhere('PRIVILEGE.name = :privilege', { privilege })\n .andWhere('PRIVILEGE.category = :category', { category })\n .getQuery()\n return 'DOMAIN.id IN ' + subQuery\n })\n .orWhere(qb => {\n const subQuery = qb\n .subQuery()\n .select('DOMAIN.id')\n .from(Domain, 'DOMAIN')\n .where('DOMAIN.owner = :owner', { owner: user.id })\n .getQuery()\n return 'DOMAIN.id IN ' + subQuery\n })\n .orderBy('DOMAIN.name', 'ASC')\n .getMany()\n ).map(domain => {\n const { id, name, description, subdomain, extType, brandName, brandImage } = domain\n return { id, name, description, subdomain, extType, brandName, brandImage }\n })\n}\n\nexport async function getDomainsAsOwner(user: User): Promise<Partial<Domain>[]> {\n return (\n await getRepository(Domain).find({\n where: { owner: user.id }\n })\n ).map(domain => {\n const { id, name, description, subdomain, extType, brandName, brandImage } = domain\n return { id, name, description, subdomain, extType, brandName, brandImage }\n })\n}\n"]}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@things-factory/auth-base",
|
3
|
-
"version": "6.2.
|
3
|
+
"version": "6.2.178",
|
4
4
|
"main": "dist-server/index.js",
|
5
5
|
"browser": "dist-client/index.js",
|
6
6
|
"things-factory": true,
|
@@ -30,10 +30,10 @@
|
|
30
30
|
"migration:create": "node ../../node_modules/typeorm/cli.js migration:create -d ./server/migrations"
|
31
31
|
},
|
32
32
|
"dependencies": {
|
33
|
-
"@things-factory/email-base": "^6.2.
|
33
|
+
"@things-factory/email-base": "^6.2.178",
|
34
34
|
"@things-factory/env": "^6.2.170",
|
35
|
-
"@things-factory/i18n-base": "^6.2.
|
36
|
-
"@things-factory/shell": "^6.2.
|
35
|
+
"@things-factory/i18n-base": "^6.2.178",
|
36
|
+
"@things-factory/shell": "^6.2.178",
|
37
37
|
"@things-factory/utils": "^6.2.170",
|
38
38
|
"jsonwebtoken": "^9.0.0",
|
39
39
|
"koa-passport": "^6.0.0",
|
@@ -43,5 +43,5 @@
|
|
43
43
|
"passport-local": "^1.0.0",
|
44
44
|
"popsicle-cookie-jar": "^1.0.0"
|
45
45
|
},
|
46
|
-
"gitHead": "
|
46
|
+
"gitHead": "b21612202e8acb60a6d29e3e5913a06346352bc5"
|
47
47
|
}
|
@@ -1,8 +1,8 @@
|
|
1
1
|
import { ILike } from 'typeorm'
|
2
2
|
import { URL } from 'url'
|
3
3
|
|
4
|
-
import { sendEmail } from '@things-factory/email-base'
|
5
4
|
import { Domain, getRepository } from '@things-factory/shell'
|
5
|
+
import { sendEmail } from '@things-factory/email-base/dist-server/controllers/email'
|
6
6
|
|
7
7
|
import { Invitation } from '../service/invitation/invitation'
|
8
8
|
import { User } from '../service/user/user'
|
@@ -98,6 +98,7 @@ export async function sendInvitationEmail({ invitation, context }) {
|
|
98
98
|
var serviceUrl = new URL(`/auth/accept/${token}`, context.header.referer)
|
99
99
|
|
100
100
|
await sendEmail({
|
101
|
+
sender: null,
|
101
102
|
receiver: invitation.email,
|
102
103
|
subject: 'Invitation',
|
103
104
|
content: getInvitationEmailForm({
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import { URL } from 'url'
|
2
2
|
|
3
|
-
import { sendEmail } from '@things-factory/email-base'
|
3
|
+
import { sendEmail } from '@things-factory/email-base/dist-server/controllers/email'
|
4
4
|
import { config } from '@things-factory/env'
|
5
5
|
import { getRepository } from '@things-factory/shell'
|
6
6
|
|
@@ -23,6 +23,7 @@ export async function sendPasswordResetEmail({ user, context }) {
|
|
23
23
|
if (verifaction) {
|
24
24
|
var serviceUrl = new URL(`/auth/reset-password?token=${token}`, context.header.referer)
|
25
25
|
await sendEmail({
|
26
|
+
sender: null,
|
26
27
|
receiver: user.email,
|
27
28
|
subject: 'Reset your password',
|
28
29
|
content: getResetPasswordEmailForm({
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import { URL } from 'url'
|
2
2
|
|
3
|
-
import { sendEmail } from '@things-factory/email-base'
|
3
|
+
import { sendEmail } from '@things-factory/email-base/dist-server/controllers/email'
|
4
4
|
import { getRepository } from '@things-factory/shell'
|
5
5
|
|
6
6
|
import { User, UserStatus } from '../service/user/user'
|
@@ -17,6 +17,7 @@ export async function sendUnlockUserEmail({ user, context }) {
|
|
17
17
|
if (verifaction) {
|
18
18
|
var serviceUrl = new URL(`/auth/unlock-user?token=${token}`, context.header.referer)
|
19
19
|
await sendEmail({
|
20
|
+
sender: null,
|
20
21
|
receiver: user.email,
|
21
22
|
subject: 'Your account is locked',
|
22
23
|
content: getUnlockUserEmailForm({
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import { URL } from 'url'
|
2
2
|
|
3
|
-
import { sendEmail } from '@things-factory/email-base'
|
3
|
+
import { sendEmail } from '@things-factory/email-base/dist-server/controllers/email'
|
4
4
|
import { getRepository } from '@things-factory/shell'
|
5
5
|
|
6
6
|
import { AuthError } from '../errors/auth-error'
|
@@ -18,6 +18,7 @@ export async function sendVerificationEmail({ user, context }) {
|
|
18
18
|
if (verifaction) {
|
19
19
|
var serviceUrl = new URL(`/auth/verify/${token}`, context.header.referer)
|
20
20
|
await sendEmail({
|
21
|
+
sender: null,
|
21
22
|
receiver: user.email,
|
22
23
|
subject: 'Verify your email',
|
23
24
|
content: getVerificationEmailForm({
|
@@ -1,9 +1,9 @@
|
|
1
1
|
import { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'
|
2
2
|
import { GraphQLEmailAddress } from 'graphql-scalars'
|
3
|
-
import { ILike, In, SelectQueryBuilder } from 'typeorm'
|
3
|
+
import { ILike, In, SelectQueryBuilder, EntityManager } from 'typeorm'
|
4
4
|
|
5
5
|
import { config } from '@things-factory/env'
|
6
|
-
import { Domain,
|
6
|
+
import { Domain, ObjectRef } from '@things-factory/shell'
|
7
7
|
|
8
8
|
import { deleteUser as commonDeleteUser, deleteUsers as commonDeleteUsers } from '../../controllers/delete-user'
|
9
9
|
import { buildDomainUsersQueryBuilder } from '../../utils/get-domain-users'
|
@@ -17,13 +17,13 @@ export class UserMutation {
|
|
17
17
|
@Directive('@transaction')
|
18
18
|
@Mutation(returns => User, { description: 'To create new user' })
|
19
19
|
async createUser(@Arg('user') user: NewUser, @Ctx() context: ResolverContext) {
|
20
|
-
const { domain } = context.state
|
20
|
+
const { domain, tx } = context.state
|
21
21
|
const { defaultPassword } = config.get('password')
|
22
22
|
const { email } = user
|
23
23
|
|
24
24
|
user.email = email.trim()
|
25
25
|
|
26
|
-
const oldUser: User = await getRepository(User).findOne({ where: { email: ILike(user.email) } })
|
26
|
+
const oldUser: User = await tx.getRepository(User).findOne({ where: { email: ILike(user.email) } })
|
27
27
|
if (oldUser) {
|
28
28
|
throw new Error(context.t('error.x already exists in y', { x: context.t('field.user'), y: 'operato' }))
|
29
29
|
}
|
@@ -34,14 +34,14 @@ export class UserMutation {
|
|
34
34
|
|
35
35
|
const salt = User.generateSalt()
|
36
36
|
|
37
|
-
return await getRepository(User).save({
|
37
|
+
return await tx.getRepository(User).save({
|
38
38
|
creator: context.state.user,
|
39
39
|
updater: context.state.user,
|
40
40
|
...user,
|
41
41
|
domains: [domain],
|
42
42
|
roles:
|
43
43
|
user.roles && user.roles.length
|
44
|
-
? await getRepository(Role).findBy({
|
44
|
+
? await tx.getRepository(Role).findBy({
|
45
45
|
id: In(user.roles.map(role => role.id)),
|
46
46
|
domain: { id: domain.id }
|
47
47
|
})
|
@@ -55,12 +55,8 @@ export class UserMutation {
|
|
55
55
|
@Directive('@privilege(category: "user", privilege: "mutation", domainOwnerGranted: true)')
|
56
56
|
@Directive('@transaction')
|
57
57
|
@Mutation(returns => User, { description: 'To modify user information' })
|
58
|
-
async updateUser(
|
59
|
-
|
60
|
-
@Arg('patch') patch: UserPatch,
|
61
|
-
@Ctx() context: ResolverContext
|
62
|
-
) {
|
63
|
-
const { domain, user: updater }: { domain: Domain; user: User } = context.state
|
58
|
+
async updateUser(@Arg('email', type => GraphQLEmailAddress) email: string, @Arg('patch') patch: UserPatch, @Ctx() context: ResolverContext) {
|
59
|
+
const { domain, user: updater, tx }: { domain: Domain; user: User; tx?: EntityManager } = context.state
|
64
60
|
const qb: SelectQueryBuilder<User> = buildDomainUsersQueryBuilder(domain.id, 'USER')
|
65
61
|
const user: User = await qb
|
66
62
|
.andWhere('LOWER(USER.email) = :email', { email: email?.toLowerCase().trim() || '' })
|
@@ -69,14 +65,16 @@ export class UserMutation {
|
|
69
65
|
.getOne()
|
70
66
|
|
71
67
|
if (patch.roles) {
|
72
|
-
patch.roles = await getRepository(Role).find({
|
68
|
+
patch.roles = await tx.getRepository(Role).find({
|
69
|
+
where: { id: In(patch.roles.map((r: Partial<Role>) => r.id)) }
|
70
|
+
})
|
73
71
|
}
|
74
72
|
|
75
73
|
if (patch.status && patch.status === 'activated') {
|
76
74
|
user.status = UserStatus.ACTIVATED
|
77
75
|
}
|
78
76
|
|
79
|
-
return await getRepository(User).save({
|
77
|
+
return await tx.getRepository(User).save({
|
80
78
|
...user,
|
81
79
|
...patch,
|
82
80
|
updater
|
@@ -199,12 +197,9 @@ export class UserMutation {
|
|
199
197
|
|
200
198
|
@Directive('@transaction')
|
201
199
|
@Mutation(returns => Boolean, { description: 'To invite new user' })
|
202
|
-
async inviteUser(
|
203
|
-
|
204
|
-
|
205
|
-
): Promise<boolean> {
|
206
|
-
const { domain } = context.state
|
207
|
-
const invitee: User = await getRepository(User).findOne({
|
200
|
+
async inviteUser(@Arg('email', type => GraphQLEmailAddress) email: string, @Ctx() context: ResolverContext): Promise<boolean> {
|
201
|
+
const { domain, tx } = context.state
|
202
|
+
const invitee: User = await tx.getRepository(User).findOne({
|
208
203
|
where: { email: ILike(email) },
|
209
204
|
relations: ['domains']
|
210
205
|
})
|
@@ -218,7 +213,7 @@ export class UserMutation {
|
|
218
213
|
throw new Error(context.t('error.x already exists in y', { x: context.t('field.user'), y: domain.name }))
|
219
214
|
}
|
220
215
|
invitee.domains = [...existingDomains, domain]
|
221
|
-
await getRepository(User).save(invitee)
|
216
|
+
await tx.getRepository(User).save(invitee)
|
222
217
|
|
223
218
|
return true
|
224
219
|
}
|
@@ -226,15 +221,13 @@ export class UserMutation {
|
|
226
221
|
@Directive('@transaction')
|
227
222
|
@Directive('@privilege(category: "user", privilege: "mutation", domainOwnerGranted: true)')
|
228
223
|
@Mutation(returns => Boolean, { description: 'To delete domain user' })
|
229
|
-
async deleteDomainUser(
|
230
|
-
@Arg('email', type => GraphQLEmailAddress) email: string,
|
231
|
-
@Ctx() context: ResolverContext
|
232
|
-
): Promise<boolean> {
|
224
|
+
async deleteDomainUser(@Arg('email', type => GraphQLEmailAddress) email: string, @Ctx() context: ResolverContext): Promise<boolean> {
|
233
225
|
const { tx, domain } = context.state
|
234
226
|
|
235
|
-
let user: User = await tx
|
236
|
-
|
237
|
-
|
227
|
+
let user: User = await tx.getRepository(User).findOne({
|
228
|
+
where: { email: ILike(email) },
|
229
|
+
relations: ['domains', 'roles', 'roles.domain']
|
230
|
+
})
|
238
231
|
if (!user) {
|
239
232
|
throw new Error(context.t('error.failed to find x', { x: context.t('field.user') }))
|
240
233
|
}
|
@@ -258,16 +251,31 @@ export class UserMutation {
|
|
258
251
|
@Directive('@privilege(domainOwnerGranted: true, superUserGranted: true)')
|
259
252
|
@Directive('@transaction')
|
260
253
|
@Mutation(returns => Boolean, { description: 'To transfer owner of domain' })
|
261
|
-
async transferOwner(
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
const user: User = await getRepository(User).findOne({
|
267
|
-
where: { email: ILike(email) }
|
254
|
+
async transferOwner(@Arg('email', type => GraphQLEmailAddress) email: string, @Ctx() context: ResolverContext): Promise<boolean> {
|
255
|
+
const { domain, tx } = context.state
|
256
|
+
const user: User = await tx.getRepository(User).findOne({
|
257
|
+
where: { email: ILike(email) },
|
258
|
+
relations: ['domains', 'roles']
|
268
259
|
})
|
260
|
+
|
261
|
+
if (!user) {
|
262
|
+
throw new Error('Failed to find user')
|
263
|
+
}
|
264
|
+
|
265
|
+
if (user.status !== UserStatus.ACTIVATED) {
|
266
|
+
throw new Error('Only activated users are eligible to receive admin privileges.')
|
267
|
+
}
|
268
|
+
|
269
|
+
if (user.domains.map((d: Domain) => d.id).indexOf(domain.id) < 0) {
|
270
|
+
throw new Error(`User is not belongs to current domain`)
|
271
|
+
}
|
272
|
+
|
273
|
+
if (user.roles.filter((r: Role) => r.domainId == domain.id).length == 0) {
|
274
|
+
throw new Error(`Only users with at least one role in this domain are eligible to receive admin privileges.`)
|
275
|
+
}
|
276
|
+
|
269
277
|
domain.owner = user.id
|
270
|
-
await getRepository(Domain).save(domain)
|
278
|
+
await tx.getRepository(Domain).save(domain)
|
271
279
|
|
272
280
|
return true
|
273
281
|
}
|