aiservermanager 0.1.1

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.
Files changed (96) hide show
  1. package/README.md +31 -0
  2. package/backend/dist/di/container.js +80 -0
  3. package/backend/dist/di/container.js.map +1 -0
  4. package/backend/dist/di/types.js +18 -0
  5. package/backend/dist/di/types.js.map +1 -0
  6. package/backend/dist/files/validatePassword.ps1 +10 -0
  7. package/backend/dist/files/wmiGpuQuery.ps1 +15 -0
  8. package/backend/dist/helpers/ExecTools.js +101 -0
  9. package/backend/dist/helpers/ExecTools.js.map +1 -0
  10. package/backend/dist/index.js +51 -0
  11. package/backend/dist/index.js.map +1 -0
  12. package/backend/dist/middleware/authMiddleware.js +32 -0
  13. package/backend/dist/middleware/authMiddleware.js.map +1 -0
  14. package/backend/dist/models/GpuInfo.js +3 -0
  15. package/backend/dist/models/GpuInfo.js.map +1 -0
  16. package/backend/dist/models/ServiceConfig.js +46 -0
  17. package/backend/dist/models/ServiceConfig.js.map +1 -0
  18. package/backend/dist/models/ServiceStatus.js +3 -0
  19. package/backend/dist/models/ServiceStatus.js.map +1 -0
  20. package/backend/dist/routes/authRoutes.js +46 -0
  21. package/backend/dist/routes/authRoutes.js.map +1 -0
  22. package/backend/dist/routes/gpuRoutes.js +35 -0
  23. package/backend/dist/routes/gpuRoutes.js.map +1 -0
  24. package/backend/dist/routes/serviceRoutes.js +206 -0
  25. package/backend/dist/routes/serviceRoutes.js.map +1 -0
  26. package/backend/dist/routes/systemRoutes.js +64 -0
  27. package/backend/dist/routes/systemRoutes.js.map +1 -0
  28. package/backend/dist/services/auth/linuxPasswordVerifier.js +74 -0
  29. package/backend/dist/services/auth/linuxPasswordVerifier.js.map +1 -0
  30. package/backend/dist/services/auth/passwordVerifier.js +3 -0
  31. package/backend/dist/services/auth/passwordVerifier.js.map +1 -0
  32. package/backend/dist/services/auth/windowsPasswordVerifier.js +73 -0
  33. package/backend/dist/services/auth/windowsPasswordVerifier.js.map +1 -0
  34. package/backend/dist/services/authService.js +240 -0
  35. package/backend/dist/services/authService.js.map +1 -0
  36. package/backend/dist/services/configManager.js +96 -0
  37. package/backend/dist/services/configManager.js.map +1 -0
  38. package/backend/dist/services/controllers/systemctlController.js +287 -0
  39. package/backend/dist/services/controllers/systemctlController.js.map +1 -0
  40. package/backend/dist/services/controllers/windowsServiceController.js +201 -0
  41. package/backend/dist/services/controllers/windowsServiceController.js.map +1 -0
  42. package/backend/dist/services/detectors/amdLinuxDetector.js +127 -0
  43. package/backend/dist/services/detectors/amdLinuxDetector.js.map +1 -0
  44. package/backend/dist/services/detectors/gpuDetector.js +3 -0
  45. package/backend/dist/services/detectors/gpuDetector.js.map +1 -0
  46. package/backend/dist/services/detectors/nvidiaSmiDetector.js +67 -0
  47. package/backend/dist/services/detectors/nvidiaSmiDetector.js.map +1 -0
  48. package/backend/dist/services/detectors/wmiDetector.js +125 -0
  49. package/backend/dist/services/detectors/wmiDetector.js.map +1 -0
  50. package/backend/dist/services/enrichers/gpuEnricher.js +3 -0
  51. package/backend/dist/services/enrichers/gpuEnricher.js.map +1 -0
  52. package/backend/dist/services/enrichers/lspciEnricher.js +92 -0
  53. package/backend/dist/services/enrichers/lspciEnricher.js.map +1 -0
  54. package/backend/dist/services/enrichers/vulkanEnricher.js +57 -0
  55. package/backend/dist/services/enrichers/vulkanEnricher.js.map +1 -0
  56. package/backend/dist/services/gpuService.js +108 -0
  57. package/backend/dist/services/gpuService.js.map +1 -0
  58. package/backend/dist/services/helpers/gpuDedup.js +46 -0
  59. package/backend/dist/services/helpers/gpuDedup.js.map +1 -0
  60. package/backend/dist/services/helpers/gpuEngineNames.js +22 -0
  61. package/backend/dist/services/helpers/gpuEngineNames.js.map +1 -0
  62. package/backend/dist/services/llamaAutocompleteService.js +277 -0
  63. package/backend/dist/services/llamaAutocompleteService.js.map +1 -0
  64. package/backend/dist/services/managedServicesController.js +72 -0
  65. package/backend/dist/services/managedServicesController.js.map +1 -0
  66. package/backend/dist/services/managedServicesManager.js +91 -0
  67. package/backend/dist/services/managedServicesManager.js.map +1 -0
  68. package/backend/dist/services/probes/amdLinuxUsageProbe.js +109 -0
  69. package/backend/dist/services/probes/amdLinuxUsageProbe.js.map +1 -0
  70. package/backend/dist/services/probes/gpuUsageProbe.js +3 -0
  71. package/backend/dist/services/probes/gpuUsageProbe.js.map +1 -0
  72. package/backend/dist/services/probes/nvidiaSmiUsageProbe.js +67 -0
  73. package/backend/dist/services/probes/nvidiaSmiUsageProbe.js.map +1 -0
  74. package/backend/dist/services/providers/systemInfoLinuxProvider.js +188 -0
  75. package/backend/dist/services/providers/systemInfoLinuxProvider.js.map +1 -0
  76. package/backend/dist/services/providers/systemInfoWindowsProvider.js +101 -0
  77. package/backend/dist/services/providers/systemInfoWindowsProvider.js.map +1 -0
  78. package/backend/dist/services/serviceConfigController.js +116 -0
  79. package/backend/dist/services/serviceConfigController.js.map +1 -0
  80. package/backend/dist/services/serviceController.js +3 -0
  81. package/backend/dist/services/serviceController.js.map +1 -0
  82. package/backend/dist/services/serviceManager.js +157 -0
  83. package/backend/dist/services/serviceManager.js.map +1 -0
  84. package/backend/dist/services/systemInfoProvider.js +3 -0
  85. package/backend/dist/services/systemInfoProvider.js.map +1 -0
  86. package/backend/dist/services/systemService.js +42 -0
  87. package/backend/dist/services/systemService.js.map +1 -0
  88. package/backend/public/browser/chunk-34LU6STA.js +1 -0
  89. package/backend/public/browser/chunk-JGNPKRLU.js +4 -0
  90. package/backend/public/browser/favicon.svg +11 -0
  91. package/backend/public/browser/index.html +15 -0
  92. package/backend/public/browser/main-MUMQYBNS.js +5579 -0
  93. package/backend/public/browser/polyfills-5CFQRCPP.js +2 -0
  94. package/backend/public/browser/styles-QBUDNRKH.css +1 -0
  95. package/bin/aiservermanager.js +2 -0
  96. package/package.json +45 -0
@@ -0,0 +1,206 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = serviceRoutes;
4
+ const express_1 = require("express");
5
+ const types_1 = require("../di/types");
6
+ function serviceRoutes(container) {
7
+ const router = (0, express_1.Router)();
8
+ /** Get status of all managed services. */
9
+ router.get("/", async (_req, res) => {
10
+ try {
11
+ const sm = container.get(types_1.SERVICE_MANAGER);
12
+ const statusList = await sm.getStatusList();
13
+ res.json(statusList);
14
+ }
15
+ catch (err) {
16
+ res.status(500).json({ error: err instanceof Error ? err.message : "Unknown error" });
17
+ }
18
+ });
19
+ /** Perform an action on a named service: { name: "llama", action: "start" } */
20
+ router.post("/control", async (req, res) => {
21
+ try {
22
+ const { name, action } = req.body;
23
+ if (!name || !action) {
24
+ return res.status(400).json({ error: "Both 'name' and 'action' are required" });
25
+ }
26
+ if (!["start", "stop", "enable", "disable"].includes(action)) {
27
+ return res.status(400).json({ error: `Invalid action: ${action}` });
28
+ }
29
+ const sm = container.get(types_1.SERVICE_MANAGER);
30
+ const result = await sm.performAction(name, action);
31
+ res.json(result);
32
+ }
33
+ catch (err) {
34
+ const status = err.message.startsWith("Unknown service") ? 404 : 500;
35
+ res.status(status).json({ error: err instanceof Error ? err.message : "Unknown error" });
36
+ }
37
+ });
38
+ /** List all user-created service configs. */
39
+ router.get("/config", (_req, res) => {
40
+ try {
41
+ const scc = container.get(types_1.SERVICE_CONFIG_CONTROLLER);
42
+ res.json(scc.listConfigs());
43
+ }
44
+ catch (err) {
45
+ res.status(500).json({ error: err instanceof Error ? err.message : "Unknown error" });
46
+ }
47
+ });
48
+ /** Get a single service config by name. */
49
+ router.get("/config/:name", (req, res) => {
50
+ try {
51
+ const name = Array.isArray(req.params.name) ? req.params.name[0] : req.params.name;
52
+ const scc = container.get(types_1.SERVICE_CONFIG_CONTROLLER);
53
+ const cfg = scc.getConfig(name);
54
+ if (!cfg) {
55
+ return res.status(404).json({ error: `Config "${name}" not found` });
56
+ }
57
+ res.json(cfg);
58
+ }
59
+ catch (err) {
60
+ res.status(500).json({ error: err instanceof Error ? err.message : "Unknown error" });
61
+ }
62
+ });
63
+ /** Create or update a service config. */
64
+ router.post("/config", async (req, res) => {
65
+ try {
66
+ const body = req.body;
67
+ if (!body.name || !body.command) {
68
+ return res.status(400).json({ error: "Both 'name' and 'command' are required" });
69
+ }
70
+ const cfg = {
71
+ name: body.name,
72
+ type: body.type,
73
+ command: body.command,
74
+ flags: body.flags ?? [],
75
+ };
76
+ const scc = container.get(types_1.SERVICE_CONFIG_CONTROLLER);
77
+ const result = await scc.createOrUpdate(cfg);
78
+ if (!result.ok) {
79
+ return res.status(400).json({ error: result.error });
80
+ }
81
+ res.status(201).json(result.config);
82
+ }
83
+ catch (err) {
84
+ res.status(500).json({ error: err instanceof Error ? err.message : "Unknown error" });
85
+ }
86
+ });
87
+ /** Delete a service config and its systemd unit. */
88
+ router.delete("/config/:name", async (req, res) => {
89
+ try {
90
+ const name = Array.isArray(req.params.name) ? req.params.name[0] : req.params.name;
91
+ const scc = container.get(types_1.SERVICE_CONFIG_CONTROLLER);
92
+ const result = await scc.deleteService(name);
93
+ if (!result.ok) {
94
+ return res.status(404).json({ error: result.error });
95
+ }
96
+ res.json({ ok: true });
97
+ }
98
+ catch (err) {
99
+ res.status(500).json({ error: err instanceof Error ? err.message : "Unknown error" });
100
+ }
101
+ });
102
+ /** List all installed services on the system (excludes custom). */
103
+ router.get("/managed/available", async (_req, res) => {
104
+ try {
105
+ const msc = container.get(types_1.MANAGED_SERVICES_CONTROLLER);
106
+ const available = await msc.listAvailable();
107
+ res.json(available);
108
+ }
109
+ catch (err) {
110
+ res.status(500).json({ error: err instanceof Error ? err.message : "Unknown error" });
111
+ }
112
+ });
113
+ /** List the user-selected managed service names. */
114
+ router.get("/managed", (_req, res) => {
115
+ try {
116
+ const msc = container.get(types_1.MANAGED_SERVICES_CONTROLLER);
117
+ res.json(msc.listManaged());
118
+ }
119
+ catch (err) {
120
+ res.status(500).json({ error: err instanceof Error ? err.message : "Unknown error" });
121
+ }
122
+ });
123
+ /** Add a service to the managed list: { name: "docker" } */
124
+ router.post("/managed", async (req, res) => {
125
+ try {
126
+ const { name } = req.body;
127
+ if (!name || typeof name !== "string") {
128
+ return res.status(400).json({ error: "'name' is required" });
129
+ }
130
+ const msc = container.get(types_1.MANAGED_SERVICES_CONTROLLER);
131
+ const result = msc.addManaged(name);
132
+ if (!result.ok) {
133
+ return res.status(409).json({ error: result.error });
134
+ }
135
+ res.status(201).json({ ok: true });
136
+ }
137
+ catch (err) {
138
+ res.status(500).json({ error: err instanceof Error ? err.message : "Unknown error" });
139
+ }
140
+ });
141
+ /** Remove a service from the managed list: { name: "docker" } */
142
+ router.delete("/managed", async (req, res) => {
143
+ try {
144
+ const { name } = req.body;
145
+ if (!name || typeof name !== "string") {
146
+ return res.status(400).json({ error: "'name' is required" });
147
+ }
148
+ const msc = container.get(types_1.MANAGED_SERVICES_CONTROLLER);
149
+ const result = msc.removeManaged(name);
150
+ if (!result.ok) {
151
+ return res.status(404).json({ error: result.error });
152
+ }
153
+ res.json({ ok: true });
154
+ }
155
+ catch (err) {
156
+ res.status(500).json({ error: err instanceof Error ? err.message : "Unknown error" });
157
+ }
158
+ });
159
+ /** Llama autocomplete suggestions: GET /llama/autocomplete?type=binary&query=xxx&binary=/path/to/llama-server */
160
+ router.get("/llama/autocomplete", async (req, res) => {
161
+ try {
162
+ const type = req.query.type;
163
+ const query = req.query.query ?? "";
164
+ const binary = req.query.binary ?? "";
165
+ const validTypes = ["binary", "model", "mmproj", "apikey", "host", "device", "path"];
166
+ if (!type || !validTypes.includes(type)) {
167
+ return res.status(400).json({ error: `Invalid type. Must be one of: ${validTypes.join(", ")}` });
168
+ }
169
+ const acas = container.get(types_1.LLAMA_AUTOCOMPLETE_SERVICE);
170
+ // Pass all existing configs for cross-service suggestions
171
+ const scc = container.get(types_1.SERVICE_CONFIG_CONTROLLER);
172
+ const allConfigs = scc.listConfigs();
173
+ // Wire GPU service for device suggestions (lazy, avoids circular dep)
174
+ try {
175
+ const gpuService = container.get(types_1.GPU_SERVICE);
176
+ acas.setGpuService(gpuService);
177
+ }
178
+ catch {
179
+ // GPU service not available — device suggestions will be empty
180
+ }
181
+ const suggestions = await acas.getSuggestions(type, query, allConfigs, binary);
182
+ res.json(suggestions);
183
+ }
184
+ catch (err) {
185
+ res.status(500).json({ error: err instanceof Error ? err.message : "Unknown error" });
186
+ }
187
+ });
188
+ /** Get recent journal lines for a service: GET /journal/:name?lines=100 */
189
+ router.get("/journal/:name", async (req, res) => {
190
+ try {
191
+ const name = Array.isArray(req.params.name) ? req.params.name[0] : req.params.name;
192
+ const lines = parseInt(req.query.lines, 10) || 100;
193
+ const sm = container.get(types_1.SERVICE_MANAGER);
194
+ const result = await sm.getJournal(name, lines);
195
+ if ("error" in result) {
196
+ return res.status(404).json(result);
197
+ }
198
+ res.json(result);
199
+ }
200
+ catch (err) {
201
+ res.status(500).json({ error: err instanceof Error ? err.message : "Unknown error" });
202
+ }
203
+ });
204
+ return router;
205
+ }
206
+ //# sourceMappingURL=serviceRoutes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serviceRoutes.js","sourceRoot":"","sources":["../../src/routes/serviceRoutes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = systemRoutes;
4
+ const express_1 = require("express");
5
+ const ExecTools_1 = require("../helpers/ExecTools");
6
+ const types_1 = require("../di/types");
7
+ function systemRoutes(container) {
8
+ const router = (0, express_1.Router)();
9
+ /** Get system information via platform-aware provider. */
10
+ router.get("/info", async (_req, res) => {
11
+ try {
12
+ const providers = container.getAll(types_1.SYSTEM_INFO_PROVIDER);
13
+ let provider = null;
14
+ for (const p of providers) {
15
+ if (await p.isAvailable()) {
16
+ provider = p;
17
+ break;
18
+ }
19
+ }
20
+ if (!provider) {
21
+ res.status(501).json({ error: "System info is not available on this platform" });
22
+ return;
23
+ }
24
+ res.json(await provider.getSystemInfo());
25
+ }
26
+ catch (err) {
27
+ res.status(500).json({ error: err instanceof Error ? err.message : "Unknown error" });
28
+ }
29
+ });
30
+ /** Reboot the server. */
31
+ router.post("/reboot", async (_req, res) => {
32
+ try {
33
+ const cmd = process.platform === "win32" ? "shutdown /r /t 0" : "sudo reboot";
34
+ const result = await ExecTools_1.ExecTools.safeExec(cmd);
35
+ if (result.stderr) {
36
+ res.status(500).json({ error: result.stderr });
37
+ }
38
+ else {
39
+ res.json({ status: "reboot initiated" });
40
+ }
41
+ }
42
+ catch (err) {
43
+ res.status(500).json({ error: err instanceof Error ? err.message : "Unknown error" });
44
+ }
45
+ });
46
+ /** Shutdown the server. */
47
+ router.post("/shutdown", async (_req, res) => {
48
+ try {
49
+ const cmd = process.platform === "win32" ? "shutdown /s /t 0" : "sudo poweroff";
50
+ const result = await ExecTools_1.ExecTools.safeExec(cmd);
51
+ if (result.stderr) {
52
+ res.status(500).json({ error: result.stderr });
53
+ }
54
+ else {
55
+ res.json({ status: "shutdown initiated" });
56
+ }
57
+ }
58
+ catch (err) {
59
+ res.status(500).json({ error: err instanceof Error ? err.message : "Unknown error" });
60
+ }
61
+ });
62
+ return router;
63
+ }
64
+ //# sourceMappingURL=systemRoutes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"systemRoutes.js","sourceRoot":"","sources":["../../src/routes/systemRoutes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
22
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
23
+ };
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.LinuxPasswordVerifier = void 0;
43
+ const os = __importStar(require("os"));
44
+ const inversify_1 = require("inversify");
45
+ /**
46
+ * Verify password through PAM using the 'login' service.
47
+ * Uses the same authentication stack as system login.
48
+ */
49
+ let LinuxPasswordVerifier = class LinuxPasswordVerifier {
50
+ username = os.userInfo().username;
51
+ async verify(password) {
52
+ const pam = require("authenticate-pam");
53
+ if (!pam) {
54
+ console.warn("[LinuxPasswordVerifier] PAM not available on this platform");
55
+ return false;
56
+ }
57
+ return new Promise((resolve) => {
58
+ pam.authenticate(this.username, password, (err, _userInfo) => {
59
+ if (err) {
60
+ console.error(`[LinuxPasswordVerifier] PAM auth failed for ${this.username}: ${err.message}`);
61
+ resolve(false);
62
+ return;
63
+ }
64
+ console.log(`[LinuxPasswordVerifier] PAM auth successful for ${this.username}`);
65
+ resolve(true);
66
+ }, { serviceName: "login" });
67
+ });
68
+ }
69
+ };
70
+ exports.LinuxPasswordVerifier = LinuxPasswordVerifier;
71
+ exports.LinuxPasswordVerifier = LinuxPasswordVerifier = __decorate([
72
+ (0, inversify_1.injectable)()
73
+ ], LinuxPasswordVerifier);
74
+ //# sourceMappingURL=linuxPasswordVerifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linuxPasswordVerifier.js","sourceRoot":"","sources":["../../../src/services/auth/linuxPasswordVerifier.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,yCAAuC;AAYvC;;;GAGG;AAEI,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IACf,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC;IAEnD,KAAK,CAAC,MAAM,CAAC,QAAgB;QAC3B,MAAM,GAAG,GAAc,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAEnD,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;YAC3E,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,GAAG,CAAC,YAAY,CACd,IAAI,CAAC,QAAQ,EACb,QAAQ,EACR,CAAC,GAAiB,EAAE,SAAkB,EAAE,EAAE;gBACxC,IAAI,GAAG,EAAE,CAAC;oBACR,OAAO,CAAC,KAAK,CAAC,+CAA+C,IAAI,CAAC,QAAQ,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;oBAC9F,OAAO,CAAC,KAAK,CAAC,CAAC;oBACf,OAAO;gBACT,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,mDAAmD,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAChF,OAAO,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC,EACD,EAAE,WAAW,EAAE,OAAO,EAAE,CACzB,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AA3BY,sDAAqB;gCAArB,qBAAqB;IADjC,IAAA,sBAAU,GAAE;GACA,qBAAqB,CA2BjC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=passwordVerifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"passwordVerifier.js","sourceRoot":"","sources":["../../../src/services/auth/passwordVerifier.ts"],"names":[],"mappings":""}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
22
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
23
+ };
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.WindowsPasswordVerifier = void 0;
43
+ const os = __importStar(require("os"));
44
+ const path = __importStar(require("path"));
45
+ const inversify_1 = require("inversify");
46
+ const ExecTools_1 = require("../../helpers/ExecTools");
47
+ /**
48
+ * Verify password against the local Windows SAM via .NET PrincipalContext.
49
+ * Password is passed through an environment variable to avoid shell escaping.
50
+ */
51
+ let WindowsPasswordVerifier = class WindowsPasswordVerifier {
52
+ username = os.userInfo().username;
53
+ scriptPath = path.resolve(__dirname, "../../files/validatePassword.ps1");
54
+ async verify(password) {
55
+ const result = await ExecTools_1.ExecTools.safeExecPs1(this.scriptPath, {
56
+ timeout: 10_000,
57
+ env: { SM_PASSWORD: password, USERNAME: this.username },
58
+ });
59
+ const ok = result.stdout.trim() === "OK";
60
+ if (ok) {
61
+ console.log(`[WindowsPasswordVerifier] auth successful for ${this.username}`);
62
+ }
63
+ else {
64
+ console.error(`[WindowsPasswordVerifier] auth failed for ${this.username}${result.stderr ? ": " + result.stderr.trim() : ""}`);
65
+ }
66
+ return ok;
67
+ }
68
+ };
69
+ exports.WindowsPasswordVerifier = WindowsPasswordVerifier;
70
+ exports.WindowsPasswordVerifier = WindowsPasswordVerifier = __decorate([
71
+ (0, inversify_1.injectable)()
72
+ ], WindowsPasswordVerifier);
73
+ //# sourceMappingURL=windowsPasswordVerifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windowsPasswordVerifier.js","sourceRoot":"","sources":["../../../src/services/auth/windowsPasswordVerifier.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAC7B,yCAAuC;AACvC,uDAAoD;AAGpD;;;GAGG;AAEI,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IACjB,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC;IAClC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,kCAAkC,CAAC,CAAC;IAE1F,KAAK,CAAC,MAAM,CAAC,QAAgB;QAC3B,MAAM,MAAM,GAAG,MAAM,qBAAS,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE;YAC1D,OAAO,EAAE,MAAM;YACf,GAAG,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;SACxD,CAAC,CAAC;QAEH,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC;QACzC,IAAI,EAAE,EAAE,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,iDAAiD,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAChF,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CACX,6CAA6C,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAChH,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;CACF,CAAA;AApBY,0DAAuB;kCAAvB,uBAAuB;IADnC,IAAA,sBAAU,GAAE;GACA,uBAAuB,CAoBnC"}