@things-factory/auth-base 4.0.7 → 4.0.12
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/db.test.sqlite +0 -0
- package/dist-server/router/auth-checkin-router.js +67 -36
- package/dist-server/router/auth-checkin-router.js.map +1 -1
- package/dist-server/service/user/user.js +1 -0
- package/dist-server/service/user/user.js.map +1 -1
- package/package.json +6 -6
- package/server/router/auth-checkin-router.ts +69 -39
- package/server/service/user/user.ts +1 -0
package/db.test.sqlite
ADDED
|
Binary file
|
|
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.authCheckinRouter = void 0;
|
|
7
7
|
const env_1 = require("@things-factory/env");
|
|
8
|
+
const accepts_1 = require("../utils/accepts");
|
|
8
9
|
const shell_1 = require("@things-factory/shell");
|
|
9
10
|
const koa_router_1 = __importDefault(require("koa-router"));
|
|
10
11
|
const login_history_1 = require("../service/login-history/login-history");
|
|
@@ -14,52 +15,82 @@ const debug = require('debug')('things-factory:auth-base:checkin-router');
|
|
|
14
15
|
const domainType = env_1.config.get('domainType');
|
|
15
16
|
exports.authCheckinRouter = new koa_router_1.default();
|
|
16
17
|
exports.authCheckinRouter.get('/auth/checkin/:subdomain?', async (context, next) => {
|
|
17
|
-
const { t } = context;
|
|
18
|
+
const { request, t } = context;
|
|
19
|
+
const header = request.header;
|
|
18
20
|
const { user } = context.state;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
subdomain = (0, shell_1.findSubdomainFromPath)(context, redirectTo);
|
|
31
|
-
}
|
|
32
|
-
let checkInDomain;
|
|
33
|
-
if (subdomain) {
|
|
34
|
-
checkInDomain = domains.find(d => d.subdomain == subdomain);
|
|
21
|
+
let { subdomain } = context.params;
|
|
22
|
+
let domains = await (0, get_user_domains_1.getUserDomains)(user);
|
|
23
|
+
if (domainType)
|
|
24
|
+
domains = domains.filter(d => d.extType == domainType);
|
|
25
|
+
if (!(0, accepts_1.accepts)(header.accept, ['text/html', '*/*'])) {
|
|
26
|
+
// When request expects non html response
|
|
27
|
+
try {
|
|
28
|
+
debug('get:/auth/checkin/:subdomain?', subdomain);
|
|
29
|
+
if (!subdomain)
|
|
30
|
+
throw new Error(t('error.domain not specified', { subdomain })); // When params doesn't have subdomain
|
|
31
|
+
const checkInDomain = domains.find((d) => d.subdomain === subdomain); // When no matched domain with subdomain
|
|
35
32
|
if (!checkInDomain)
|
|
36
|
-
|
|
33
|
+
throw new Error(t('error.domain not specified', { subdomain }));
|
|
34
|
+
await checkIn(checkInDomain, null, context);
|
|
35
|
+
context.body = true;
|
|
37
36
|
}
|
|
38
|
-
|
|
39
|
-
|
|
37
|
+
catch (e) {
|
|
38
|
+
(0, access_token_cookie_1.clearAccessTokenCookie)(context);
|
|
39
|
+
throw e;
|
|
40
40
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
redirectTo
|
|
51
|
-
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
// When request expects html response
|
|
44
|
+
const { redirect_to: redirectTo = '/' } = context.query;
|
|
45
|
+
try {
|
|
46
|
+
let message;
|
|
47
|
+
debug('get:/auth/checkin/:subdomain?', subdomain, redirectTo);
|
|
48
|
+
if (!subdomain) {
|
|
49
|
+
/* try to find domain from redirectTo path */
|
|
50
|
+
subdomain = (0, shell_1.findSubdomainFromPath)(context, redirectTo);
|
|
51
|
+
}
|
|
52
|
+
let checkInDomain;
|
|
53
|
+
if (subdomain) {
|
|
54
|
+
checkInDomain = domains.find(d => d.subdomain == subdomain);
|
|
55
|
+
if (!checkInDomain)
|
|
56
|
+
message = t('error.domain not allowed', { subdomain });
|
|
57
|
+
}
|
|
58
|
+
else if (domains.length === 1) {
|
|
59
|
+
checkInDomain = domains[0];
|
|
52
60
|
}
|
|
53
|
-
|
|
61
|
+
if (checkInDomain)
|
|
62
|
+
return await checkIn(checkInDomain, redirectTo, context);
|
|
63
|
+
await context.render('auth-page', {
|
|
64
|
+
pageElement: 'auth-checkin',
|
|
65
|
+
elementScript: '/auth/checkin.js',
|
|
66
|
+
data: {
|
|
67
|
+
user,
|
|
68
|
+
domains,
|
|
69
|
+
domainType,
|
|
70
|
+
redirectTo,
|
|
71
|
+
message
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
catch (e) {
|
|
76
|
+
(0, access_token_cookie_1.clearAccessTokenCookie)(context);
|
|
77
|
+
context.redirect(`/auth/signin?email=${encodeURIComponent(user.email)}&redirect_to=${encodeURIComponent(redirectTo)}`);
|
|
78
|
+
}
|
|
54
79
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
80
|
+
});
|
|
81
|
+
exports.authCheckinRouter.get('/auth/domains', async (context) => {
|
|
82
|
+
const { user } = context.state;
|
|
83
|
+
var domains = await (0, get_user_domains_1.getUserDomains)(user);
|
|
84
|
+
if (domainType) {
|
|
85
|
+
domains = domains.filter(d => d.extType == domainType);
|
|
58
86
|
}
|
|
87
|
+
context.body = domains;
|
|
59
88
|
});
|
|
60
89
|
async function checkIn(checkInDomain, redirectTo, context) {
|
|
61
90
|
const user = context.state.user;
|
|
62
91
|
await login_history_1.LoginHistory.stamp(checkInDomain, user, context.req.connection.remoteAddress);
|
|
63
|
-
|
|
92
|
+
if (redirectTo) {
|
|
93
|
+
return context.redirect((0, shell_1.getRedirectSubdomainPath)(context, checkInDomain.subdomain, redirectTo));
|
|
94
|
+
}
|
|
64
95
|
}
|
|
65
96
|
//# sourceMappingURL=auth-checkin-router.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-checkin-router.js","sourceRoot":"","sources":["../../server/router/auth-checkin-router.ts"],"names":[],"mappings":";;;;;;AAAA,6CAA4C;AAC5C,iDAA+F;AAC/F,4DAA+B;AAC/B,0EAAqE;AAErE,sEAAqE;AACrE,gEAA0D;AAE1D,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,yCAAyC,CAAC,CAAA;AACzE,MAAM,UAAU,GAAG,YAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;AAE9B,QAAA,iBAAiB,GAAG,IAAI,oBAAM,EAAE,CAAA;AAE7C,yBAAiB,CAAC,GAAG,CAAC,2BAA2B,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;IACzE,MAAM,EAAE,CAAC,EAAE,GAAG,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"auth-checkin-router.js","sourceRoot":"","sources":["../../server/router/auth-checkin-router.ts"],"names":[],"mappings":"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"}
|
|
@@ -260,6 +260,7 @@ __decorate([
|
|
|
260
260
|
User = User_1 = __decorate([
|
|
261
261
|
(0, typeorm_1.Entity)(),
|
|
262
262
|
(0, typeorm_1.Index)('ix_user_0', (user) => [user.email], { unique: true }),
|
|
263
|
+
(0, typeorm_1.Index)('ix_user_1', (user) => [user.id], { unique: true }),
|
|
263
264
|
(0, type_graphql_1.ObjectType)()
|
|
264
265
|
], User);
|
|
265
266
|
exports.User = User;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user.js","sourceRoot":"","sources":["../../../server/service/user/user.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qCAYgB;AAChB,+CAAoD;AAEpD,wDAAmD;AACnD,iDAA8C;AAC9C,uCAAmC;AACnC,uDAA+C;AAC/C,6CAA4C;AAC5C,oDAA2B;AAC3B,gEAA8B;AAC9B,yEAA8E;AAE9E,MAAM,SAAS,GAAG,YAAM,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;AAC7C,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAA;AAEpC,IAAY,UAOX;AAPD,WAAY,UAAU;IACpB,mCAAqB,CAAA;IACrB,qCAAuB,CAAA;IACvB,iCAAmB,CAAA;IACnB,+BAAiB,CAAA;IACjB,+BAAiB,CAAA;IACjB,4DAA8C,CAAA;AAChD,CAAC,EAPW,UAAU,GAAV,kBAAU,KAAV,kBAAU,QAOrB;
|
|
1
|
+
{"version":3,"file":"user.js","sourceRoot":"","sources":["../../../server/service/user/user.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@things-factory/auth-base",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.12",
|
|
4
4
|
"main": "dist-server/index.js",
|
|
5
5
|
"browser": "client/index.js",
|
|
6
6
|
"things-factory": true,
|
|
@@ -27,10 +27,10 @@
|
|
|
27
27
|
"migration:create": "node ../../node_modules/typeorm/cli.js migration:create -d ./server/migrations"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@things-factory/email-base": "^4.0.
|
|
31
|
-
"@things-factory/env": "^4.0.
|
|
32
|
-
"@things-factory/i18n-base": "^4.0.
|
|
33
|
-
"@things-factory/shell": "^4.0.
|
|
30
|
+
"@things-factory/email-base": "^4.0.12",
|
|
31
|
+
"@things-factory/env": "^4.0.12",
|
|
32
|
+
"@things-factory/i18n-base": "^4.0.12",
|
|
33
|
+
"@things-factory/shell": "^4.0.12",
|
|
34
34
|
"jsonwebtoken": "^8.5.1",
|
|
35
35
|
"koa-passport": "^4.1.4",
|
|
36
36
|
"koa-session": "^6.0.0",
|
|
@@ -40,5 +40,5 @@
|
|
|
40
40
|
"passport-local": "^1.0.0",
|
|
41
41
|
"uuid": "^3.4.0"
|
|
42
42
|
},
|
|
43
|
-
"gitHead": "
|
|
43
|
+
"gitHead": "29d59ff95fcb473cb43c6f798cd04f3ec3a779a0"
|
|
44
44
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { config } from '@things-factory/env'
|
|
2
|
+
import { accepts } from '../utils/accepts'
|
|
2
3
|
import { Domain, findSubdomainFromPath, getRedirectSubdomainPath } from '@things-factory/shell'
|
|
3
4
|
import Router from 'koa-router'
|
|
4
5
|
import { LoginHistory } from '../service/login-history/login-history'
|
|
@@ -12,58 +13,87 @@ const domainType = config.get('domainType')
|
|
|
12
13
|
export const authCheckinRouter = new Router()
|
|
13
14
|
|
|
14
15
|
authCheckinRouter.get('/auth/checkin/:subdomain?', async (context, next) => {
|
|
15
|
-
const { t } = context
|
|
16
|
+
const { request, t } = context
|
|
17
|
+
const header = request.header
|
|
16
18
|
const { user } = context.state
|
|
17
|
-
|
|
18
|
-
var { subdomain } = context.params
|
|
19
|
+
let { subdomain } = context.params
|
|
19
20
|
|
|
20
|
-
|
|
21
|
+
let domains: Domain[] = await getUserDomains(user)
|
|
22
|
+
if (domainType) domains = domains.filter(d => d.extType == domainType)
|
|
21
23
|
|
|
22
|
-
|
|
24
|
+
if (!accepts(header.accept, ['text/html', '*/*'])) {
|
|
25
|
+
// When request expects non html response
|
|
26
|
+
try {
|
|
27
|
+
debug('get:/auth/checkin/:subdomain?', subdomain)
|
|
28
|
+
if (!subdomain) throw new Error(t('error.domain not specified', { subdomain })) // When params doesn't have subdomain
|
|
29
|
+
const checkInDomain: Domain | undefined = domains.find((d: Domain) => d.subdomain === subdomain) // When no matched domain with subdomain
|
|
30
|
+
if (!checkInDomain) throw new Error(t('error.domain not specified', { subdomain }))
|
|
23
31
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
32
|
+
await checkIn(checkInDomain, null, context)
|
|
33
|
+
context.body = true
|
|
34
|
+
} catch (e) {
|
|
35
|
+
clearAccessTokenCookie(context)
|
|
36
|
+
throw e
|
|
28
37
|
}
|
|
38
|
+
} else {
|
|
39
|
+
// When request expects html response
|
|
40
|
+
const { redirect_to: redirectTo = '/' } = context.query
|
|
29
41
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
subdomain = findSubdomainFromPath(context, redirectTo)
|
|
33
|
-
}
|
|
42
|
+
try {
|
|
43
|
+
let message: string
|
|
34
44
|
|
|
35
|
-
|
|
45
|
+
debug('get:/auth/checkin/:subdomain?', subdomain, redirectTo)
|
|
36
46
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
checkInDomain = domains[0]
|
|
42
|
-
}
|
|
47
|
+
if (!subdomain) {
|
|
48
|
+
/* try to find domain from redirectTo path */
|
|
49
|
+
subdomain = findSubdomainFromPath(context, redirectTo)
|
|
50
|
+
}
|
|
43
51
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
user,
|
|
51
|
-
domains,
|
|
52
|
-
domainType,
|
|
53
|
-
redirectTo,
|
|
54
|
-
message
|
|
52
|
+
let checkInDomain: Domain
|
|
53
|
+
if (subdomain) {
|
|
54
|
+
checkInDomain = domains.find(d => d.subdomain == subdomain)
|
|
55
|
+
if (!checkInDomain) message = t('error.domain not allowed', { subdomain })
|
|
56
|
+
} else if (domains.length === 1) {
|
|
57
|
+
checkInDomain = domains[0]
|
|
55
58
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
59
|
+
|
|
60
|
+
if (checkInDomain) return await checkIn(checkInDomain, redirectTo, context)
|
|
61
|
+
|
|
62
|
+
await context.render('auth-page', {
|
|
63
|
+
pageElement: 'auth-checkin',
|
|
64
|
+
elementScript: '/auth/checkin.js',
|
|
65
|
+
data: {
|
|
66
|
+
user,
|
|
67
|
+
domains,
|
|
68
|
+
domainType,
|
|
69
|
+
redirectTo,
|
|
70
|
+
message
|
|
71
|
+
}
|
|
72
|
+
})
|
|
73
|
+
} catch (e) {
|
|
74
|
+
clearAccessTokenCookie(context)
|
|
75
|
+
context.redirect(
|
|
76
|
+
`/auth/signin?email=${encodeURIComponent(user.email)}&redirect_to=${encodeURIComponent(redirectTo)}`
|
|
77
|
+
)
|
|
78
|
+
}
|
|
62
79
|
}
|
|
63
80
|
})
|
|
64
81
|
|
|
65
|
-
|
|
82
|
+
authCheckinRouter.get('/auth/domains', async context => {
|
|
83
|
+
const { user } = context.state
|
|
84
|
+
var domains = await getUserDomains(user)
|
|
85
|
+
if (domainType) {
|
|
86
|
+
domains = domains.filter(d => d.extType == domainType)
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
context.body = domains
|
|
90
|
+
})
|
|
91
|
+
|
|
92
|
+
async function checkIn(checkInDomain: Domain, redirectTo: string | null, context: any): Promise<void> {
|
|
66
93
|
const user: User = context.state.user
|
|
67
94
|
await LoginHistory.stamp(checkInDomain, user, context.req.connection.remoteAddress)
|
|
68
|
-
|
|
95
|
+
|
|
96
|
+
if (redirectTo) {
|
|
97
|
+
return context.redirect(getRedirectSubdomainPath(context, checkInDomain.subdomain, redirectTo))
|
|
98
|
+
}
|
|
69
99
|
}
|