fa-mcp-sdk 0.2.146 → 0.2.174
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/README.md +1 -1
- package/bin/fa-mcp.js +66 -54
- package/cli-template/.env.example +2 -2
- package/cli-template/README.md +2 -2
- package/cli-template/fa-mcp-sdk-spec.md +122 -41
- package/cli-template/package.json +3 -3
- package/cli-template/r/TEST HTTP.xml +9 -0
- package/cli-template/{run/TEST SSE.run.xml → r/TEST SSE.xml } +2 -2
- package/cli-template/{run/TEST STDIO.run.xml → r/TEST STDIO.xml } +2 -2
- package/cli-template/r/generate-token.xml +14 -0
- package/cli-template/{run/kill-server.run.xml → r/kill-server.xml} +2 -2
- package/cli-template/{run/kill-token-gen-server.xml → r/remove-nul.xml} +4 -5
- package/{cli-template/config → config}/_local.yaml +28 -14
- package/{cli-template/config → config}/custom-environment-variables.yaml +3 -0
- package/{cli-template/config → config}/default.yaml +50 -10
- package/{cli-template/config → config}/development.yaml +4 -4
- package/config/local.yaml +81 -0
- package/{cli-template/config → config}/production.yaml +4 -4
- package/dist/core/_types_/active-directory-config.d.ts +3 -0
- package/dist/core/_types_/active-directory-config.d.ts.map +1 -1
- package/dist/core/_types_/config.d.ts +5 -1
- package/dist/core/_types_/config.d.ts.map +1 -1
- package/dist/core/_types_/types.d.ts +5 -1
- package/dist/core/_types_/types.d.ts.map +1 -1
- package/dist/core/ad/group-checker.d.ts +13 -0
- package/dist/core/ad/group-checker.d.ts.map +1 -0
- package/dist/core/ad/group-checker.js +86 -0
- package/dist/core/ad/group-checker.js.map +1 -0
- package/dist/core/auth/admin-auth.d.ts +16 -0
- package/dist/core/auth/admin-auth.d.ts.map +1 -0
- package/dist/core/auth/admin-auth.js +159 -0
- package/dist/core/auth/admin-auth.js.map +1 -0
- package/dist/core/auth/basic.d.ts +6 -0
- package/dist/core/auth/basic.d.ts.map +1 -0
- package/dist/core/auth/basic.js +26 -0
- package/dist/core/auth/basic.js.map +1 -0
- package/dist/core/auth/{jwt-validation.d.ts → jwt.d.ts} +4 -3
- package/dist/core/auth/jwt.d.ts.map +1 -0
- package/dist/core/auth/{jwt-validation.js → jwt.js} +9 -19
- package/dist/core/auth/jwt.js.map +1 -0
- package/dist/core/auth/middleware.d.ts.map +1 -1
- package/dist/core/auth/middleware.js +3 -3
- package/dist/core/auth/middleware.js.map +1 -1
- package/dist/core/auth/multi-auth.d.ts +14 -6
- package/dist/core/auth/multi-auth.d.ts.map +1 -1
- package/dist/core/auth/multi-auth.js +151 -141
- package/dist/core/auth/multi-auth.js.map +1 -1
- package/dist/core/auth/permanent.d.ts +6 -0
- package/dist/core/auth/permanent.d.ts.map +1 -0
- package/dist/core/auth/permanent.js +15 -0
- package/dist/core/auth/permanent.js.map +1 -0
- package/dist/core/auth/token-generator/ntlm/ntlm-domain-config.d.ts +1 -1
- package/dist/core/auth/token-generator/ntlm/ntlm-domain-config.d.ts.map +1 -1
- package/dist/core/auth/token-generator/ntlm/ntlm-domain-config.js +8 -10
- package/dist/core/auth/token-generator/ntlm/ntlm-domain-config.js.map +1 -1
- package/dist/core/auth/token-generator/ntlm/ntlm-integration.d.ts.map +1 -1
- package/dist/core/auth/token-generator/ntlm/ntlm-integration.js +9 -2
- package/dist/core/auth/token-generator/ntlm/ntlm-integration.js.map +1 -1
- package/dist/core/auth/token-generator/server.d.ts.map +1 -1
- package/dist/core/auth/token-generator/server.js +59 -25
- package/dist/core/auth/token-generator/server.js.map +1 -1
- package/dist/core/auth/types.d.ts +4 -3
- package/dist/core/auth/types.d.ts.map +1 -1
- package/dist/core/bootstrap/startup-info.d.ts.map +1 -1
- package/dist/core/bootstrap/startup-info.js +19 -0
- package/dist/core/bootstrap/startup-info.js.map +1 -1
- package/dist/core/consul/access-points-updater.js +1 -1
- package/dist/core/consul/access-points-updater.js.map +1 -1
- package/dist/core/consul/get-consul-api.d.ts +1 -1
- package/dist/core/consul/get-consul-api.d.ts.map +1 -1
- package/dist/core/consul/get-consul-api.js +1 -1
- package/dist/core/consul/get-consul-api.js.map +1 -1
- package/dist/core/consul/register.d.ts +1 -1
- package/dist/core/consul/register.d.ts.map +1 -1
- package/dist/core/index.d.ts +3 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +3 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/init-mcp-server.d.ts.map +1 -1
- package/dist/core/init-mcp-server.js +1 -1
- package/dist/core/init-mcp-server.js.map +1 -1
- package/dist/core/utils/testing/McpSseClient.js.map +1 -1
- package/dist/core/web/admin-router.d.ts +10 -0
- package/dist/core/web/admin-router.d.ts.map +1 -0
- package/dist/core/web/admin-router.js +227 -0
- package/dist/core/web/admin-router.js.map +1 -0
- package/dist/core/web/favicon-svg.d.ts +1 -1
- package/dist/core/web/favicon-svg.d.ts.map +1 -1
- package/dist/core/web/favicon-svg.js +21 -3
- package/dist/core/web/favicon-svg.js.map +1 -1
- package/dist/core/web/home-api.d.ts +7 -0
- package/dist/core/web/home-api.d.ts.map +1 -0
- package/dist/core/web/home-api.js +93 -0
- package/dist/core/web/home-api.js.map +1 -0
- package/dist/core/web/server-http.d.ts +1 -0
- package/dist/core/web/server-http.d.ts.map +1 -1
- package/dist/core/web/server-http.js +60 -25
- package/dist/core/web/server-http.js.map +1 -1
- package/dist/core/web/static/home/index.html +206 -0
- package/dist/core/web/static/home/script.js +636 -0
- package/dist/core/web/{about-page/css.js → static/styles.css} +435 -105
- package/dist/core/web/static/token-gen/index.html +82 -0
- package/dist/core/web/static/token-gen/jwt-icon.svg +3 -0
- package/dist/core/web/static/token-gen/logout.svg +4 -0
- package/dist/core/web/static/token-gen/script.js +365 -0
- package/dist/core/web/static/token-gen/user.svg +4 -0
- package/dist/core/web/svg-icons.d.ts +7 -0
- package/dist/core/web/svg-icons.d.ts.map +1 -0
- package/dist/core/web/svg-icons.js +78 -0
- package/dist/core/web/svg-icons.js.map +1 -0
- package/package.json +7 -3
- package/scripts/copy-static.js +31 -0
- package/src/template/_examples/multi-auth-examples.ts +14 -47
- package/src/template/_types_/custom-config.ts +83 -0
- package/src/template/asset/logo.svg +4 -0
- package/src/template/start.ts +3 -3
- package/src/template/tools/handle-tool-call.ts +2 -1
- package/src/tests/mcp/test-http.js +10 -2
- package/src/tests/mcp/test-sse.js +10 -2
- package/src/tests/mcp/test-stdio.js +1 -2
- package/cli-template/run/TEST HTTP.run.xml +0 -5
- package/cli-template/run/TEST search.run.xml +0 -11
- package/cli-template/run/remove-nul.js.run.xml +0 -5
- package/dist/core/auth/jwt-validation.d.ts.map +0 -1
- package/dist/core/auth/jwt-validation.js.map +0 -1
- package/dist/core/auth/token-generator/html.d.ts +0 -9
- package/dist/core/auth/token-generator/html.d.ts.map +0 -1
- package/dist/core/auth/token-generator/html.js +0 -862
- package/dist/core/auth/token-generator/html.js.map +0 -1
- package/dist/core/web/about-page/css.d.ts +0 -2
- package/dist/core/web/about-page/css.d.ts.map +0 -1
- package/dist/core/web/about-page/css.js.map +0 -1
- package/dist/core/web/about-page/render.d.ts +0 -2
- package/dist/core/web/about-page/render.d.ts.map +0 -1
- package/dist/core/web/about-page/render.js +0 -773
- package/dist/core/web/about-page/render.js.map +0 -1
- /package/cli-template/{run/== START ==.run.xml → r/== START ==.xml} +0 -0
- /package/cli-template/{run/cb.run.xml → r/cb.xml} +0 -0
- /package/cli-template/{run/ci.run.xml → r/ci.xml} +0 -0
- /package/cli-template/{run/lint.run.xml → r/lint.xml} +0 -0
- /package/cli-template/{run/lint_fix.run.xml → r/lint_fix.xml} +0 -0
- /package/cli-template/{run/reinstall.run.xml → r/reinstall.xml} +0 -0
- /package/{cli-template/config → config}/test.yaml +0 -0
- /package/{src/template/asset/favicon.svg → dist/core/web/static/logo.svg} +0 -0
- /package/{cli-template/scripts → scripts}/kill-port.js +0 -0
- /package/{cli-template/scripts → scripts}/npm/patch_node_modules.js +0 -0
- /package/{cli-template/scripts → scripts}/npm/run.js +0 -0
- /package/{cli-template/scripts → scripts}/npm/yarn-ci.ps1 +0 -0
- /package/{cli-template/scripts → scripts}/npm/yarn-ci.sh +0 -0
- /package/{cli-template/scripts → scripts}/npm/yarn-reinstall.ps1 +0 -0
- /package/{cli-template/scripts → scripts}/npm/yarn-reinstall.sh +0 -0
- /package/{cli-template/scripts → scripts}/pre-commit +0 -0
- /package/{cli-template/scripts → scripts}/remove-nul.js +0 -0
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*/
|
|
4
|
-
import { checkToken } from './jwt-validation.js';
|
|
1
|
+
// noinspection UnnecessaryLocalVariableJS
|
|
2
|
+
import { checkJwtToken, generateToken, jwtTokenRE, MIN_ENCRYPT_KEY_LENGTH } from './jwt.js';
|
|
5
3
|
import { logger as lgr } from '../logger.js';
|
|
6
|
-
import { normalizeHeaders } from '../utils/utils.js';
|
|
4
|
+
import { normalizeHeaders, trim } from '../utils/utils.js';
|
|
7
5
|
import chalk from 'chalk';
|
|
8
6
|
import { appConfig } from '../bootstrap/init-config.js';
|
|
7
|
+
import { checkPermanentToken } from './permanent.js';
|
|
8
|
+
import { checkBasicAuth } from './basic.js';
|
|
9
9
|
const logger = lgr.getSubLogger({ name: chalk.magenta('multi-auth') });
|
|
10
10
|
const { enabled: authEnabled, permanentServerTokens: pt, basic: { username: bUsername, password: bPassword } = {}, jwtToken: { encryptKey } = {}, } = appConfig.webServer?.auth || {};
|
|
11
11
|
/**
|
|
@@ -15,9 +15,26 @@ const authOrder = {
|
|
|
15
15
|
'permanentServerTokens': 1, // O(1) Set.has()
|
|
16
16
|
'basic': 2, // Base64 decoding
|
|
17
17
|
'jwtToken': 3, // Symmetric decryption + JSON.parse
|
|
18
|
+
'custom': 4,
|
|
18
19
|
};
|
|
20
|
+
const schemaRe = /^([^ ]+) +(.+)$/;
|
|
19
21
|
export const getTokenFromHttpHeader = (req) => {
|
|
20
|
-
|
|
22
|
+
const a = trim(req.headers.authorization);
|
|
23
|
+
if (!a) {
|
|
24
|
+
return {};
|
|
25
|
+
}
|
|
26
|
+
let scheme = '';
|
|
27
|
+
let credentials = a;
|
|
28
|
+
if (schemaRe.test(a)) {
|
|
29
|
+
([scheme = '', credentials = ''] = a.split(/ +/));
|
|
30
|
+
}
|
|
31
|
+
if (scheme.toLowerCase() === 'basic') {
|
|
32
|
+
return { scheme: 'basic', credentials };
|
|
33
|
+
}
|
|
34
|
+
if (jwtTokenRE.test(credentials)) {
|
|
35
|
+
return { scheme: 'jwtToken', credentials };
|
|
36
|
+
}
|
|
37
|
+
return { scheme: 'permanentServerTokens', credentials };
|
|
21
38
|
};
|
|
22
39
|
/**
|
|
23
40
|
* Gets custom auth validator from global context
|
|
@@ -27,179 +44,129 @@ function getCustomAuthValidator() {
|
|
|
27
44
|
const fn = projectData?.customAuthValidator;
|
|
28
45
|
return typeof fn === 'function' ? fn : undefined;
|
|
29
46
|
}
|
|
47
|
+
const CUSTOM_AUTH_VALIDATOR = getCustomAuthValidator();
|
|
30
48
|
/**
|
|
31
49
|
* Detects configured authentication types in priority order (ascending CPU load)
|
|
32
50
|
*/
|
|
33
51
|
export function detectAuthConfiguration() {
|
|
34
52
|
const configured = [];
|
|
35
53
|
const errors = {};
|
|
36
|
-
const result = { configured, errors };
|
|
37
|
-
if (
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
if (Array.isArray(pt) && pt.filter(Boolean)) {
|
|
42
|
-
configured.push('permanentServerTokens');
|
|
43
|
-
}
|
|
44
|
-
// Check JWT Token
|
|
45
|
-
if (encryptKey?.length) {
|
|
46
|
-
configured.push('jwtToken');
|
|
47
|
-
}
|
|
48
|
-
// Check Basic Auth
|
|
49
|
-
if (bUsername || bPassword) {
|
|
50
|
-
const errs = [];
|
|
51
|
-
// Default validation - require both username and password
|
|
52
|
-
if (!bUsername) {
|
|
53
|
-
errs.push('Username missing');
|
|
54
|
+
const result = { configured, errors, configuredSet: new Set(), configuredTypes: '' };
|
|
55
|
+
if (authEnabled) {
|
|
56
|
+
// Check permanentServerTokens
|
|
57
|
+
if (Array.isArray(pt) && pt.filter(Boolean)) {
|
|
58
|
+
configured.push('permanentServerTokens');
|
|
54
59
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
+
// Check JWT Token
|
|
61
|
+
if (encryptKey?.length) {
|
|
62
|
+
if (encryptKey.length < MIN_ENCRYPT_KEY_LENGTH) {
|
|
63
|
+
errors.jwtToken = [`JWT encryption key is too short (${encryptKey.length} chars) Must be at least ${MIN_ENCRYPT_KEY_LENGTH} chars long`];
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
configured.push('jwtToken');
|
|
67
|
+
}
|
|
60
68
|
}
|
|
61
|
-
|
|
62
|
-
|
|
69
|
+
// Check Basic Auth
|
|
70
|
+
if (bUsername || bPassword) {
|
|
71
|
+
const errs = [];
|
|
72
|
+
// Default validation - require both username and password
|
|
73
|
+
if (!bUsername) {
|
|
74
|
+
errs.push('Username missing');
|
|
75
|
+
}
|
|
76
|
+
if (!bPassword) {
|
|
77
|
+
errs.push('Password missing');
|
|
78
|
+
}
|
|
79
|
+
if (!errs.length) {
|
|
80
|
+
configured.push('basic');
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
errors.basic = errs;
|
|
84
|
+
}
|
|
63
85
|
}
|
|
64
86
|
}
|
|
87
|
+
if (CUSTOM_AUTH_VALIDATOR) {
|
|
88
|
+
configured.push('custom');
|
|
89
|
+
}
|
|
65
90
|
result.configured = configured.sort((a, b) => authOrder[a] - authOrder[b]);
|
|
91
|
+
result.configuredSet = new Set(result.configured);
|
|
92
|
+
result.configuredTypes = result.configured.join(', ');
|
|
66
93
|
return result;
|
|
67
94
|
}
|
|
68
|
-
|
|
69
|
-
* Basic Authentication validation
|
|
70
|
-
*/
|
|
71
|
-
async function checkBasicAuth(token) {
|
|
72
|
-
const authConfig = appConfig.webServer.auth;
|
|
73
|
-
if (!authConfig.basic) {
|
|
74
|
-
return { success: false, error: 'Basic auth not configured' };
|
|
75
|
-
}
|
|
76
|
-
try {
|
|
77
|
-
// Expecting base64 encoded "username:password"
|
|
78
|
-
const decoded = Buffer.from(token, 'base64').toString('utf8');
|
|
79
|
-
const [username, password] = decoded.split(':');
|
|
80
|
-
if (!username || !password) {
|
|
81
|
-
return { success: false, error: 'Invalid basic auth format - missing username or password' };
|
|
82
|
-
}
|
|
83
|
-
if (username === bUsername && password === bPassword) {
|
|
84
|
-
return {
|
|
85
|
-
success: true,
|
|
86
|
-
authType: 'basic',
|
|
87
|
-
tokenType: 'basic',
|
|
88
|
-
username,
|
|
89
|
-
};
|
|
90
|
-
}
|
|
91
|
-
return { success: false, error: 'Invalid credentials' };
|
|
92
|
-
}
|
|
93
|
-
catch {
|
|
94
|
-
return { success: false, error: 'Invalid basic auth format - not valid base64' };
|
|
95
|
-
}
|
|
96
|
-
}
|
|
95
|
+
const AUTH_CONFIGURATION = detectAuthConfiguration();
|
|
97
96
|
/**
|
|
98
97
|
* Checks auth using all configured authentication methods in ascending CPU load order
|
|
99
98
|
*/
|
|
100
99
|
export async function checkMultiAuth(req) {
|
|
101
|
-
const
|
|
102
|
-
if (!
|
|
103
|
-
return { success: false, error: 'Token not provided' };
|
|
104
|
-
}
|
|
105
|
-
const validAuthTypes = detectAuthConfiguration();
|
|
106
|
-
const { configured } = validAuthTypes;
|
|
107
|
-
if (configured.length) {
|
|
100
|
+
const { configured, configuredSet, configuredTypes } = AUTH_CONFIGURATION;
|
|
101
|
+
if (!configured.length) {
|
|
108
102
|
return { success: false, error: 'No authentication methods configured' };
|
|
109
103
|
}
|
|
110
|
-
const
|
|
104
|
+
const { scheme: authType, credentials } = getTokenFromHttpHeader(req);
|
|
105
|
+
if (!credentials) {
|
|
106
|
+
return { success: false, error: 'Auth credentials not provided' };
|
|
107
|
+
}
|
|
108
|
+
if (!authType) {
|
|
109
|
+
return { success: false, error: 'Cannot detect auth type from Authorization header' };
|
|
110
|
+
}
|
|
111
111
|
logger.debug(`Checking auth types: ${configuredTypes}`);
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
switch (authType) {
|
|
115
|
-
case 'permanentServerTokens':
|
|
116
|
-
case 'jwtToken':
|
|
117
|
-
const result = checkToken({ token });
|
|
118
|
-
if (result.errorReason) {
|
|
119
|
-
return { success: false, error: result.errorReason };
|
|
120
|
-
}
|
|
121
|
-
return {
|
|
122
|
-
success: true,
|
|
123
|
-
authType,
|
|
124
|
-
tokenType: result.inTokenType || 'unknown',
|
|
125
|
-
payload: result.payload,
|
|
126
|
-
};
|
|
127
|
-
case 'basic':
|
|
128
|
-
return await checkBasicAuth(token);
|
|
129
|
-
default:
|
|
130
|
-
return { success: false, error: `Unknown auth type: ${authType}` };
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
catch (error) {
|
|
134
|
-
logger.warn(`Auth type ${authType} failed with exception:`, error instanceof Error ? error.message : 'Unknown error');
|
|
135
|
-
}
|
|
112
|
+
if (!configuredSet.has(authType)) {
|
|
113
|
+
return { success: false, error: `Detected in Authorisation header auth type ${authType} not configured` };
|
|
136
114
|
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
// If configured auth methods exist, check them first
|
|
154
|
-
if (configured.length) {
|
|
155
|
-
const multiAuthResult = await checkMultiAuth(req);
|
|
156
|
-
if (multiAuthResult.success) {
|
|
157
|
-
// If custom validator also exists, run it additionally
|
|
158
|
-
if (customValidator) {
|
|
159
|
-
try {
|
|
160
|
-
const customResult = await customValidator(requestWithNormalizedHeaders);
|
|
161
|
-
if (!customResult.success) {
|
|
162
|
-
logger.debug(`Standard auth passed but custom validator rejected: ${customResult.error}`);
|
|
163
|
-
return { success: false, error: customResult.error || 'Custom authentication failed' };
|
|
164
|
-
}
|
|
165
|
-
logger.debug('Both standard auth and custom validator passed');
|
|
166
|
-
// Merge authentication results (prefer custom validator details if present)
|
|
167
|
-
return { ...multiAuthResult, ...customResult };
|
|
115
|
+
let errorResult = undefined;
|
|
116
|
+
try {
|
|
117
|
+
switch (authType) {
|
|
118
|
+
case 'permanentServerTokens': {
|
|
119
|
+
const error = checkPermanentToken(credentials).errorReason;
|
|
120
|
+
if (!error) {
|
|
121
|
+
return { success: true, authType };
|
|
122
|
+
}
|
|
123
|
+
errorResult = { success: false, authType, error };
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
case 'basic': {
|
|
127
|
+
const result = checkBasicAuth(credentials);
|
|
128
|
+
if (result.success) {
|
|
129
|
+
// For basic auth, create payload with user property
|
|
130
|
+
return { ...result, authType, payload: { user: result.username } };
|
|
168
131
|
}
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
132
|
+
errorResult = { ...result, authType };
|
|
133
|
+
break;
|
|
134
|
+
}
|
|
135
|
+
case 'jwtToken': {
|
|
136
|
+
const { errorReason: error, payload, isTokenDecrypted } = checkJwtToken({ token: credentials });
|
|
137
|
+
if (!error) {
|
|
138
|
+
return { success: true, authType, payload };
|
|
172
139
|
}
|
|
140
|
+
errorResult = { success: false, error, authType, isTokenDecrypted };
|
|
141
|
+
break;
|
|
173
142
|
}
|
|
174
|
-
|
|
143
|
+
case 'custom':
|
|
144
|
+
break;
|
|
145
|
+
default:
|
|
146
|
+
errorResult = { success: false, error: `Unknown auth type: ${authType}` };
|
|
175
147
|
}
|
|
176
148
|
}
|
|
177
|
-
|
|
178
|
-
|
|
149
|
+
catch (error) {
|
|
150
|
+
logger.warn(`Auth type ${authType} failed with exception:`, error instanceof Error ? error.message : 'Unknown error');
|
|
151
|
+
}
|
|
152
|
+
if (CUSTOM_AUTH_VALIDATOR) {
|
|
153
|
+
const requestWithNormalizedHeaders = { ...req, headers: normalizeHeaders(req.headers || {}) };
|
|
179
154
|
try {
|
|
180
|
-
const customResult = await
|
|
181
|
-
|
|
182
|
-
logger.debug('Authentication successful using custom validator only');
|
|
183
|
-
return customResult;
|
|
184
|
-
}
|
|
185
|
-
logger.debug(`Custom validator rejected authentication: ${customResult.error}`);
|
|
155
|
+
const customResult = await CUSTOM_AUTH_VALIDATOR(requestWithNormalizedHeaders);
|
|
156
|
+
return customResult;
|
|
186
157
|
}
|
|
187
158
|
catch (error) {
|
|
188
159
|
logger.error('Custom auth validator failed:', error);
|
|
189
160
|
return { success: false, error: 'Custom authentication validation failed' };
|
|
190
161
|
}
|
|
191
162
|
}
|
|
192
|
-
|
|
193
|
-
const errorMsg = configured.length
|
|
194
|
-
? `Authentication failed for all methods: ${configured.join(', ')}${customValidator ? ' and custom validator' : ''}`
|
|
195
|
-
: 'No authentication methods configured';
|
|
196
|
-
return { success: false, error: errorMsg };
|
|
163
|
+
return errorResult || { success: false, error: `Authentication failed for all configured methods: ${configuredTypes}` };
|
|
197
164
|
}
|
|
198
165
|
/**
|
|
199
166
|
* Logs authentication configuration (for debugging)
|
|
200
167
|
*/
|
|
201
168
|
export function logAuthConfiguration() {
|
|
202
|
-
const { configured, errors } =
|
|
169
|
+
const { configured, errors } = AUTH_CONFIGURATION;
|
|
203
170
|
logger.info('Auth system configuration:');
|
|
204
171
|
logger.info(`- enabled: ${!!appConfig.webServer?.auth?.enabled}`);
|
|
205
172
|
logger.info(`- configured types: ${configured.join(', ')}`);
|
|
@@ -210,4 +177,47 @@ export function logAuthConfiguration() {
|
|
|
210
177
|
});
|
|
211
178
|
}
|
|
212
179
|
}
|
|
180
|
+
/**
|
|
181
|
+
* Determines authentication headers based on appConfig.webServer.auth configuration.
|
|
182
|
+
* Priority order:
|
|
183
|
+
* 1. permanentServerTokens - if at least one token is defined
|
|
184
|
+
* 2. basic auth - if username AND password are both set
|
|
185
|
+
* 3. JWT token - if jwtToken.encryptKey is set, generate token on the fly
|
|
186
|
+
* @returns {Object} Headers object with Authorization header if auth is enabled
|
|
187
|
+
*/
|
|
188
|
+
export function getAuthHeadersForTests() {
|
|
189
|
+
const auth = appConfig.webServer?.auth;
|
|
190
|
+
// If auth is not enabled, no headers needed
|
|
191
|
+
if (!auth?.enabled) {
|
|
192
|
+
return {};
|
|
193
|
+
}
|
|
194
|
+
// 1. Check permanentServerTokens first (fastest CPU cost)
|
|
195
|
+
const tokens = auth.permanentServerTokens;
|
|
196
|
+
if (Array.isArray(tokens) && tokens.length > 0) {
|
|
197
|
+
// Find first non-empty token
|
|
198
|
+
const validToken = tokens.find(trim);
|
|
199
|
+
if (validToken) {
|
|
200
|
+
console.log(' Using permanentServerToken for authentication');
|
|
201
|
+
return { Authorization: `Bearer ${validToken}` };
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
// 2. Check basic auth (username AND password must both be set)
|
|
205
|
+
const basic = auth.basic;
|
|
206
|
+
if (basic?.username && basic?.password) {
|
|
207
|
+
const credentials = Buffer.from(`${basic.username}:${basic.password}`).toString('base64');
|
|
208
|
+
console.log(' Using Basic authentication');
|
|
209
|
+
return { Authorization: `Basic ${credentials}` };
|
|
210
|
+
}
|
|
211
|
+
// 3. Check JWT token - generate on the fly if encryptKey is set
|
|
212
|
+
const jwtConfig = auth.jwtToken;
|
|
213
|
+
if (jwtConfig?.encryptKey && jwtConfig.encryptKey.trim().length > 0) {
|
|
214
|
+
const token = generateToken('vpupkin', 100, { service: appConfig.name });
|
|
215
|
+
console.log(' Using generated JWT token for authentication');
|
|
216
|
+
return { Authorization: `Bearer ${token}` };
|
|
217
|
+
}
|
|
218
|
+
// No valid auth method configured but auth is enabled
|
|
219
|
+
console.warn('⚠️ Auth is enabled but no valid authentication method is configured!');
|
|
220
|
+
console.warn(' Configure one of: permanentServerTokens, basic auth, or jwtToken.encryptKey');
|
|
221
|
+
return {};
|
|
222
|
+
}
|
|
213
223
|
//# sourceMappingURL=multi-auth.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multi-auth.js","sourceRoot":"","sources":["../../../src/core/auth/multi-auth.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"multi-auth.js","sourceRoot":"","sources":["../../../src/core/auth/multi-auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permanent.d.ts","sourceRoot":"","sources":["../../../src/core/auth/permanent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAO/C;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAAI,OAAO,MAAM,KAAG,iBAMnD,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { trim } from '../utils/utils.js';
|
|
2
|
+
import { appConfig } from '../bootstrap/init-config.js';
|
|
3
|
+
const pt = appConfig.webServer?.auth?.permanentServerTokens || [];
|
|
4
|
+
const permanentServerTokensSet = new Set(Array.isArray(pt) ? pt : [pt]);
|
|
5
|
+
/**
|
|
6
|
+
* Checks the validity of the permanent server token:
|
|
7
|
+
*/
|
|
8
|
+
export const checkPermanentToken = (token) => {
|
|
9
|
+
token = trim(token);
|
|
10
|
+
if (!token) {
|
|
11
|
+
return { errorReason: 'Token not passed' };
|
|
12
|
+
}
|
|
13
|
+
return permanentServerTokensSet.has(token) ? {} : { errorReason: 'Invalid permanent token' };
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=permanent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permanent.js","sourceRoot":"","sources":["../../../src/core/auth/permanent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAExD,MAAM,EAAE,GAAG,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,qBAAqB,IAAI,EAAE,CAAC;AAClE,MAAM,wBAAwB,GAAgB,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAErF;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAAa,EAAqB,EAAE;IACtE,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IACpB,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC;IAC7C,CAAC;IACD,OAAO,wBAAwB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,yBAAyB,EAAE,CAAC;AAC/F,CAAC,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { IDcConfig } from '../../../_types_/active-directory-config.js';
|
|
2
|
-
export declare const isNTLMEnabled:
|
|
2
|
+
export declare const isNTLMEnabled: boolean;
|
|
3
3
|
export declare const defaultTokenGenDomainConfig: IDcConfig;
|
|
4
4
|
export declare const tokenGenDomains: {
|
|
5
5
|
[domainName: string]: IDcConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ntlm-domain-config.d.ts","sourceRoot":"","sources":["../../../../../src/core/auth/token-generator/ntlm/ntlm-domain-config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,6CAA6C,CAAC;AAGxE,eAAO,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"ntlm-domain-config.d.ts","sourceRoot":"","sources":["../../../../../src/core/auth/token-generator/ntlm/ntlm-domain-config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,6CAA6C,CAAC;AAGxE,eAAO,MAAM,aAAa,EAAE,OAAwG,CAAC;AAcrI,eAAO,MAAM,2BAA2B,EAAE,SAA2D,CAAC;AACtG,eAAO,MAAM,eAAe,EAAE;IAAE,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;CAAO,CAAC;AAsCvE,eAAO,MAAM,eAAe,GAAI,aAAa,MAAM,KAAG,SAKrD,CAAC;AAEF,eAAO,MAAM,oBAAoB;;;;;;;CAKhC,CAAC"}
|
|
@@ -2,11 +2,9 @@ import { NTLMAuthError } from 'ya-express-ntlm';
|
|
|
2
2
|
import { isObject } from 'af-tools-ts';
|
|
3
3
|
import { appConfig } from '../../../bootstrap/init-config.js';
|
|
4
4
|
// Check if AD configuration is available
|
|
5
|
-
export const isNTLMEnabled = ()
|
|
6
|
-
return !!(appConfig.ad && isObject(appConfig.ad.domains) && Object.keys(appConfig.ad.domains).length);
|
|
7
|
-
};
|
|
5
|
+
export const isNTLMEnabled = !!(appConfig.ad && isObject(appConfig.ad.domains) && Object.keys(appConfig.ad.domains).length);
|
|
8
6
|
// If AD config is null or undefined, NTLM authentication is disabled
|
|
9
|
-
if (!isNTLMEnabled
|
|
7
|
+
if (!isNTLMEnabled) {
|
|
10
8
|
console.log('[TOKEN-GEN] NTLM authentication is DISABLED - no AD configuration found');
|
|
11
9
|
}
|
|
12
10
|
else {
|
|
@@ -18,7 +16,7 @@ else {
|
|
|
18
16
|
export const defaultTokenGenDomainConfig = { controllers: [], username: '', password: '' };
|
|
19
17
|
export const tokenGenDomains = {};
|
|
20
18
|
// Process and validate all domains (same logic as main NTLM example)
|
|
21
|
-
if (isNTLMEnabled
|
|
19
|
+
if (isNTLMEnabled) {
|
|
22
20
|
const { domains } = appConfig.ad;
|
|
23
21
|
Object.entries(domains).forEach(([domainName, item]) => {
|
|
24
22
|
const { controllers } = item;
|
|
@@ -54,13 +52,13 @@ export const getDomainConfig = (domainName) => {
|
|
|
54
52
|
return tokenGenDomains[domainName] || defaultTokenGenDomainConfig;
|
|
55
53
|
};
|
|
56
54
|
export const tokenGenDomainConfig = {
|
|
57
|
-
defaultDomain: isNTLMEnabled
|
|
58
|
-
domains: isNTLMEnabled
|
|
59
|
-
strategy: isNTLMEnabled
|
|
60
|
-
tlsOptions: isNTLMEnabled
|
|
55
|
+
defaultDomain: isNTLMEnabled ? defaultTokenGenDomainConfig.name : undefined,
|
|
56
|
+
domains: isNTLMEnabled ? tokenGenDomains : {},
|
|
57
|
+
strategy: isNTLMEnabled ? (appConfig.ad.strategy || 'NTLM') : undefined, // from config or default NTLM
|
|
58
|
+
tlsOptions: isNTLMEnabled ? appConfig.ad.tlsOptions : undefined, // from config if specified
|
|
61
59
|
};
|
|
62
60
|
// Debug info VVR
|
|
63
|
-
if (isNTLMEnabled
|
|
61
|
+
if (isNTLMEnabled) {
|
|
64
62
|
console.log(`[TOKEN-GEN] Configured domains: ${Object.keys(tokenGenDomains).join(', ')}`);
|
|
65
63
|
console.log(`[TOKEN-GEN] Default domain: ${tokenGenDomainConfig.defaultDomain}`);
|
|
66
64
|
console.log(`[TOKEN-GEN] Strategy: ${tokenGenDomainConfig.strategy}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ntlm-domain-config.js","sourceRoot":"","sources":["../../../../../src/core/auth/token-generator/ntlm/ntlm-domain-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAG9D,yCAAyC;AACzC,MAAM,CAAC,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"ntlm-domain-config.js","sourceRoot":"","sources":["../../../../../src/core/auth/token-generator/ntlm/ntlm-domain-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ntlm-integration.d.ts","sourceRoot":"","sources":["../../../../../src/core/auth/token-generator/ntlm/ntlm-integration.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAU1D,eAAO,MAAM,uBAAuB,eAIlB,OAAO,OAAO,QAAQ,QAAQ,YAAY,
|
|
1
|
+
{"version":3,"file":"ntlm-integration.d.ts","sourceRoot":"","sources":["../../../../../src/core/auth/token-generator/ntlm/ntlm-integration.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAU1D,eAAO,MAAM,uBAAuB,eAIlB,OAAO,OAAO,QAAQ,QAAQ,YAAY,YAsE3D,CAAC"}
|
|
@@ -4,10 +4,10 @@ import { checkTokenGenSession, getSessionStats } from './ntlm-session-storage.js
|
|
|
4
4
|
import { getLoginPageHTML } from './ntlm-templates.js';
|
|
5
5
|
import { isNTLMEnabled } from './ntlm-domain-config.js';
|
|
6
6
|
// Create NTLM middleware instance (only if NTLM is enabled)
|
|
7
|
-
const ntlmMiddleware = isNTLMEnabled
|
|
7
|
+
const ntlmMiddleware = isNTLMEnabled ? authNTLM(tokenGenNtlmOptions) : null;
|
|
8
8
|
// Main NTLM authentication setup function
|
|
9
9
|
export const setupNTLMAuthentication = () => {
|
|
10
|
-
if (!isNTLMEnabled
|
|
10
|
+
if (!isNTLMEnabled) {
|
|
11
11
|
console.log('[TOKEN-GEN] NTLM authentication is DISABLED - skipping middleware setup');
|
|
12
12
|
// Return middleware that just passes through
|
|
13
13
|
return [(req, res, next) => {
|
|
@@ -60,6 +60,13 @@ export const setupNTLMAuthentication = () => {
|
|
|
60
60
|
console.log(`[TOKEN-GEN] Request from authenticated user: ${req.ntlm.domain}\\${req.ntlm.username} -> ${req.method} ${req.path}`);
|
|
61
61
|
return next();
|
|
62
62
|
}
|
|
63
|
+
// Clear non-NTLM Authorization header (e.g., Basic auth cached by browser for same origin)
|
|
64
|
+
// This forces NTLM middleware to send 401 with WWW-Authenticate: NTLM
|
|
65
|
+
const authHeader = req.headers.authorization;
|
|
66
|
+
if (authHeader && !authHeader.startsWith('NTLM ')) {
|
|
67
|
+
console.log('[TOKEN-GEN] Clearing non-NTLM Authorization header to trigger NTLM auth');
|
|
68
|
+
delete req.headers.authorization;
|
|
69
|
+
}
|
|
63
70
|
// Run NTLM authentication
|
|
64
71
|
console.log(`[TOKEN-GEN] Starting NTLM authentication for: ${req.method} ${req.path}`);
|
|
65
72
|
ntlmMiddleware(req, res, next);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ntlm-integration.js","sourceRoot":"","sources":["../../../../../src/core/auth/token-generator/ntlm/ntlm-integration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,4DAA4D;AAC5D,MAAM,cAAc,GAAG,aAAa,
|
|
1
|
+
{"version":3,"file":"ntlm-integration.js","sourceRoot":"","sources":["../../../../../src/core/auth/token-generator/ntlm/ntlm-integration.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../../src/core/auth/token-generator/server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../../src/core/auth/token-generator/server.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,gBAAgB,GAAI,OAAO,MAAM,uGAmP7C,CAAC"}
|