sim 1.0.17 → 2.0.0-dev.6.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.
- package/LICENSE +202 -0
- package/README.md +312 -73
- package/THIRD_PARTY_LICENSES +30 -0
- package/dist/index.js +10622 -0
- package/package.json +53 -66
- package/.npmignore +0 -1
- package/app.js +0 -4
- package/cli/cli +0 -8
- package/cli/config.yaml +0 -43
- package/cli/manager.js +0 -173
- package/cli/templates.js +0 -117
- package/client/slots.js +0 -35
- package/lib/auth/auth.js +0 -157
- package/lib/auth/index.js +0 -6
- package/lib/auth/models/sessions.js +0 -0
- package/lib/auth/models/users.js +0 -40
- package/lib/cookies.js +0 -32
- package/lib/db/database.js +0 -166
- package/lib/db/index.js +0 -7
- package/lib/db/item.js +0 -30
- package/lib/db/list.js +0 -285
- package/lib/handler.js +0 -173
- package/lib/index.js +0 -15
- package/lib/middleware.js +0 -151
- package/lib/project/_project.js +0 -242
- package/lib/project/config.yaml +0 -105
- package/lib/project/file.js +0 -24
- package/lib/project/index.js +0 -8
- package/lib/project/page.js +0 -249
- package/lib/project/project.js +0 -261
- package/simple/index.js +0 -96
package/package.json
CHANGED
|
@@ -1,73 +1,60 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sim",
|
|
3
|
-
"
|
|
4
|
-
"
|
|
3
|
+
"version": "2.0.0-dev.6.1",
|
|
4
|
+
"description": "Sim CLI - talk to the Sim API from your terminal",
|
|
5
|
+
"type": "module",
|
|
5
6
|
"bin": {
|
|
6
|
-
"sim": "
|
|
7
|
+
"sim": "dist/index.js"
|
|
7
8
|
},
|
|
8
|
-
"
|
|
9
|
-
"
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
"
|
|
14
|
-
"
|
|
15
|
-
"
|
|
16
|
-
"
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
"chokidar": "^1.6.1",
|
|
20
|
-
"clean-css": "^3.4.24",
|
|
21
|
-
"colors": "^1.1.2",
|
|
22
|
-
"connect": "^3.5.0",
|
|
23
|
-
"cortml": "0.0.8",
|
|
24
|
-
"css-loader": "^0.26.1",
|
|
25
|
-
"emailjs": "^1.0.8",
|
|
26
|
-
"extract-text-webpack-plugin": "^1.0.1",
|
|
27
|
-
"fs-extra": "^2.0.0",
|
|
28
|
-
"gj": "0.0.1",
|
|
29
|
-
"gutil": "^1.6.4",
|
|
30
|
-
"handlebars": "^4.0.6",
|
|
31
|
-
"html-loader": "^0.4.4",
|
|
32
|
-
"html-minifier": "^3.2.3",
|
|
33
|
-
"html-webpack-plugin": "^2.26.0",
|
|
34
|
-
"jade": "^1.11.0",
|
|
35
|
-
"jb": "0.0.1",
|
|
36
|
-
"js-beautify": "^1.6.8",
|
|
37
|
-
"jsb": "0.0.1",
|
|
38
|
-
"json-loader": "^0.5.4",
|
|
39
|
-
"kit": "^1.0.5",
|
|
40
|
-
"less": "^2.7.2",
|
|
41
|
-
"lodash": "^4.17.4",
|
|
42
|
-
"mime": "^1.3.4",
|
|
43
|
-
"moment": "^2.17.1",
|
|
44
|
-
"mongodb": "^2.2.21",
|
|
45
|
-
"open": "0.0.5",
|
|
46
|
-
"optimist": "^0.6.1",
|
|
47
|
-
"require.fresh": "0.0.2",
|
|
48
|
-
"sanitize-html": "^1.14.1",
|
|
49
|
-
"serve-static": "^1.11.1",
|
|
50
|
-
"sha1": "^1.1.1",
|
|
51
|
-
"socket.io": "^1.7.2",
|
|
52
|
-
"striptags": "^2.2.1",
|
|
53
|
-
"stylus": "^0.54.5",
|
|
54
|
-
"supports-color": "^3.2.3",
|
|
55
|
-
"tap": "^9.0.3",
|
|
56
|
-
"underscore": "^1.8.3",
|
|
57
|
-
"webpack": "^1.14.0",
|
|
58
|
-
"wrench": "^1.5.9",
|
|
59
|
-
"yaml-loader": "^0.4.0"
|
|
9
|
+
"scripts": {
|
|
10
|
+
"prebuild": "bun run clean",
|
|
11
|
+
"build": "bun build src/index.ts --target=node --format=esm --packages=bundle --reject-unresolved --outfile=dist/index.js",
|
|
12
|
+
"clean": "bun -e \"import { rmSync } from 'node:fs'; rmSync('dist', { recursive: true, force: true })\"",
|
|
13
|
+
"type-check": "tsc --noEmit",
|
|
14
|
+
"lint": "biome check --write --unsafe .",
|
|
15
|
+
"lint:check": "biome check .",
|
|
16
|
+
"format": "biome format --write .",
|
|
17
|
+
"format:check": "biome format .",
|
|
18
|
+
"test": "vitest run",
|
|
19
|
+
"prepublishOnly": "bun run build"
|
|
60
20
|
},
|
|
61
|
-
"
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
"maintainers": [
|
|
65
|
-
{
|
|
66
|
-
"name": "jf7",
|
|
67
|
-
"email": "teu@nm.ru"
|
|
68
|
-
}
|
|
21
|
+
"files": [
|
|
22
|
+
"dist",
|
|
23
|
+
"THIRD_PARTY_LICENSES"
|
|
69
24
|
],
|
|
70
|
-
"
|
|
71
|
-
|
|
72
|
-
|
|
25
|
+
"keywords": [
|
|
26
|
+
"sim",
|
|
27
|
+
"ai",
|
|
28
|
+
"agents",
|
|
29
|
+
"cli",
|
|
30
|
+
"workflow"
|
|
31
|
+
],
|
|
32
|
+
"author": "Sim",
|
|
33
|
+
"license": "Apache-2.0",
|
|
34
|
+
"repository": {
|
|
35
|
+
"type": "git",
|
|
36
|
+
"url": "git+https://github.com/simstudioai/sim.git",
|
|
37
|
+
"directory": "packages/sim-cli"
|
|
38
|
+
},
|
|
39
|
+
"homepage": "https://github.com/simstudioai/sim/tree/main/packages/sim-cli#readme",
|
|
40
|
+
"bugs": {
|
|
41
|
+
"url": "https://github.com/simstudioai/sim/issues"
|
|
42
|
+
},
|
|
43
|
+
"publishConfig": {
|
|
44
|
+
"access": "public"
|
|
45
|
+
},
|
|
46
|
+
"engines": {
|
|
47
|
+
"node": ">=20"
|
|
48
|
+
},
|
|
49
|
+
"devDependencies": {
|
|
50
|
+
"@sim/tsconfig": "0.0.0",
|
|
51
|
+
"@types/js-yaml": "4.0.9",
|
|
52
|
+
"@types/node": "24.2.1",
|
|
53
|
+
"@xterm/headless": "6.0.0",
|
|
54
|
+
"chalk": "5.6.2",
|
|
55
|
+
"commander": "^11.1.0",
|
|
56
|
+
"js-yaml": "4.3.0",
|
|
57
|
+
"typescript": "^7.0.2",
|
|
58
|
+
"vitest": "^4.1.0"
|
|
59
|
+
}
|
|
73
60
|
}
|
package/.npmignore
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
node_modules/
|
package/app.js
DELETED
package/cli/cli
DELETED
package/cli/config.yaml
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
dirs:
|
|
2
|
-
- models
|
|
3
|
-
- static
|
|
4
|
-
- lib
|
|
5
|
-
- pages
|
|
6
|
-
- pages/index
|
|
7
|
-
- slots
|
|
8
|
-
- middleware
|
|
9
|
-
|
|
10
|
-
files:
|
|
11
|
-
settings.yaml: settings
|
|
12
|
-
app.js: app
|
|
13
|
-
package.json: package
|
|
14
|
-
urls.yaml: urls
|
|
15
|
-
# middleware.js: middleware
|
|
16
|
-
pages/index/index.html: index
|
|
17
|
-
pages/index/styles.styl: styles
|
|
18
|
-
|
|
19
|
-
logs:
|
|
20
|
-
info:
|
|
21
|
-
color: blue
|
|
22
|
-
icon: ℹ
|
|
23
|
-
success:
|
|
24
|
-
color: green
|
|
25
|
-
icon: ✔
|
|
26
|
-
error:
|
|
27
|
-
color: red
|
|
28
|
-
icon: ⚠
|
|
29
|
-
|
|
30
|
-
txt:
|
|
31
|
-
title: SIM Framework
|
|
32
|
-
version: Version
|
|
33
|
-
creating: Creating sim project
|
|
34
|
-
creatingIn: in
|
|
35
|
-
project: Project
|
|
36
|
-
filesCreated: files generated
|
|
37
|
-
successfully: successfully
|
|
38
|
-
error: Error
|
|
39
|
-
mustEnter: you must enter
|
|
40
|
-
projectName: project's name
|
|
41
|
-
forExample: For example
|
|
42
|
-
directory: directory
|
|
43
|
-
alreadyExists: already exists
|
package/cli/manager.js
DELETED
|
@@ -1,173 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const _ = require('lodash');
|
|
4
|
-
const fs = require('fs');
|
|
5
|
-
const child_process = require('child_process');
|
|
6
|
-
const kit = require('kit');
|
|
7
|
-
const path = require('path');
|
|
8
|
-
const colors = require('colors');
|
|
9
|
-
const optimist = require('optimist');
|
|
10
|
-
const packageJSON = require('../package');
|
|
11
|
-
const cml = require('cortml');
|
|
12
|
-
|
|
13
|
-
const exists = fs.existsSync;
|
|
14
|
-
const wfile = fs.writeFileSync;
|
|
15
|
-
const templates = require('./templates');
|
|
16
|
-
|
|
17
|
-
const config = cml.loadFile(path.join(__dirname, 'config.yaml'));
|
|
18
|
-
|
|
19
|
-
class Manager {
|
|
20
|
-
|
|
21
|
-
constructor () {
|
|
22
|
-
var self = this;
|
|
23
|
-
self.argv = process.argv;
|
|
24
|
-
self.cwd = process.cwd();
|
|
25
|
-
self.args = optimist.argv;
|
|
26
|
-
self.command = self.args._[0];
|
|
27
|
-
self.parentDir = path.normalize(self.cwd);
|
|
28
|
-
self.name = (self.argv[3] || self.argv[2] || '').trim();
|
|
29
|
-
self.dir = path.normalize(path.join(self.parentDir, self.name));
|
|
30
|
-
self.dirs = config.dirs;
|
|
31
|
-
self.logger = self.createLogger();
|
|
32
|
-
self.logs = templates.logs;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
start() {
|
|
36
|
-
var self = this;
|
|
37
|
-
self.info(self.logs.welcome);
|
|
38
|
-
|
|
39
|
-
if (self.command === 'run')
|
|
40
|
-
return self.commandRun();
|
|
41
|
-
|
|
42
|
-
if (self.command === 'create')
|
|
43
|
-
return self.commandRun();
|
|
44
|
-
|
|
45
|
-
self.commandCreate();
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
commandCreate () {
|
|
49
|
-
var self = this;
|
|
50
|
-
|
|
51
|
-
if (!self.commandCreateValidate())
|
|
52
|
-
return;
|
|
53
|
-
|
|
54
|
-
self.info(self.logs.creating);
|
|
55
|
-
self.makeDirs();
|
|
56
|
-
self.writeFiles();
|
|
57
|
-
self.info(self.logs.filesCreated);
|
|
58
|
-
self.info(self.logs.dependencies);
|
|
59
|
-
|
|
60
|
-
self
|
|
61
|
-
.installDependencies()
|
|
62
|
-
.then(() => {
|
|
63
|
-
self.success(self.logs.created);
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
installDependencies () {
|
|
68
|
-
var self = this;
|
|
69
|
-
return new Promise((resolve, reject) => {
|
|
70
|
-
child_process.exec('npm install', {
|
|
71
|
-
cwd: self.dir
|
|
72
|
-
}, resolve);
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
resolve (p) {
|
|
77
|
-
var self = this;
|
|
78
|
-
return path.resolve(self.dir, p);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
writeFiles () {
|
|
82
|
-
var self = this;
|
|
83
|
-
_.each(config.files, (code, file) => wfile(
|
|
84
|
-
self.resolve(file),
|
|
85
|
-
// self.render(templates[code])
|
|
86
|
-
self.render(templates[code] || code)
|
|
87
|
-
));
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
commandCreateValidate () {
|
|
91
|
-
var self = this;
|
|
92
|
-
|
|
93
|
-
if (!self.name)
|
|
94
|
-
return self.error(self.logs.nameRequired);
|
|
95
|
-
|
|
96
|
-
if (exists(self.dir))
|
|
97
|
-
return self.error(self.logs.exists);
|
|
98
|
-
|
|
99
|
-
return true;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
makeDirs () {
|
|
103
|
-
var self = this;
|
|
104
|
-
fs.mkdirSync(self.dir);
|
|
105
|
-
self.dirs.forEach(dir => {
|
|
106
|
-
var dirname = path.join(self.dir, dir);
|
|
107
|
-
if (exists(dirname)) return;
|
|
108
|
-
fs.mkdirSync(dirname);
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
commandRun () {
|
|
113
|
-
var self = this;
|
|
114
|
-
self.error('Cant run project!');
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
render (code, data = {}) {
|
|
118
|
-
var self = this,
|
|
119
|
-
re = /\{\{([^\}]+)\}\}/mgi,
|
|
120
|
-
context = _.extend({
|
|
121
|
-
name: packageJSON.name,
|
|
122
|
-
version: packageJSON.version,
|
|
123
|
-
date: `${(new Date()).miniDate()}:`.grey,
|
|
124
|
-
name: self.name,
|
|
125
|
-
parentDir: self.parentDir,
|
|
126
|
-
dir: self.dir,
|
|
127
|
-
txt: config.txt,
|
|
128
|
-
}, data);
|
|
129
|
-
return code.replace(re, (txt, name) => {
|
|
130
|
-
return _.get(context, name);
|
|
131
|
-
});
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
renderMessage (message, data) {
|
|
135
|
-
var self = this;
|
|
136
|
-
return self.render(message, data);
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
createLogger () {
|
|
140
|
-
var self = this,
|
|
141
|
-
logger = {};
|
|
142
|
-
_.each(config.logs, (opts, name) => {
|
|
143
|
-
logger[name] = (msg = '', data = {}) => {
|
|
144
|
-
console.log(
|
|
145
|
-
self.renderMessage(msg[opts.color], _.extend({
|
|
146
|
-
color: opts.color,
|
|
147
|
-
icon: `${opts.icon}`[opts.color],
|
|
148
|
-
}, data))
|
|
149
|
-
);
|
|
150
|
-
};
|
|
151
|
-
});
|
|
152
|
-
return logger;
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
info (...args) {
|
|
156
|
-
var self = this;
|
|
157
|
-
return self.logger.info(...args);
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
success (...args) {
|
|
161
|
-
var self = this;
|
|
162
|
-
return self.logger.success(...args);
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
error (...args) {
|
|
166
|
-
var self = this;
|
|
167
|
-
return self.logger.error(...args);
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
module.exports = Manager;
|
package/cli/templates.js
DELETED
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
module.exports = {
|
|
4
|
-
|
|
5
|
-
// Create Files ================================================================
|
|
6
|
-
|
|
7
|
-
urls:
|
|
8
|
-
`/: index
|
|
9
|
-
`,
|
|
10
|
-
|
|
11
|
-
settings:
|
|
12
|
-
`port: 8080
|
|
13
|
-
dbURL: mongodb://localhost/test
|
|
14
|
-
minCSS: false
|
|
15
|
-
minJS: false
|
|
16
|
-
minHTML: false
|
|
17
|
-
includeParentStyles: true
|
|
18
|
-
compileLESS: true
|
|
19
|
-
includeJSLibs: true
|
|
20
|
-
includeStyles: true
|
|
21
|
-
includeScript: true
|
|
22
|
-
# jsLibs:
|
|
23
|
-
useSlots: true
|
|
24
|
-
preLoad: false
|
|
25
|
-
cssPreprocessor: stylus
|
|
26
|
-
`,
|
|
27
|
-
|
|
28
|
-
package:
|
|
29
|
-
`{
|
|
30
|
-
"name": "{{name}}",
|
|
31
|
-
"version": "0.0.1",
|
|
32
|
-
"dependencies": {
|
|
33
|
-
"sim": "^1.0.5",
|
|
34
|
-
"babel": "^6.5.2",
|
|
35
|
-
"babel-core": "^6.22.1",
|
|
36
|
-
"babel-loader": "^6.2.10",
|
|
37
|
-
"babel-plugin-transform-class-properties": "^6.22.0",
|
|
38
|
-
"babel-plugin-transform-decorators-legacy": "^1.3.4",
|
|
39
|
-
"babel-preset-es2015": "^6.22.0",
|
|
40
|
-
"babel-preset-latest": "^6.22.0",
|
|
41
|
-
"babel-preset-stage-0": "^6.22.0",
|
|
42
|
-
"css-loader": "^0.26.1",
|
|
43
|
-
"extract-text-webpack-plugin": "^1.0.1",
|
|
44
|
-
"html-loader": "^0.4.4",
|
|
45
|
-
"html-webpack-plugin": "^2.26.0",
|
|
46
|
-
"json-loader": "^0.5.4",
|
|
47
|
-
"lodash": "^4.17.4",
|
|
48
|
-
"webpack": "^1.14.0",
|
|
49
|
-
"yaml-loader": "^0.4.0",
|
|
50
|
-
"kit": "^1.0.0"
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
`,
|
|
54
|
-
|
|
55
|
-
index:
|
|
56
|
-
`<!doctype html>
|
|
57
|
-
<html>
|
|
58
|
-
<head>
|
|
59
|
-
<meta charset="utf-8">
|
|
60
|
-
<title>Test</title>
|
|
61
|
-
</head>
|
|
62
|
-
<body>
|
|
63
|
-
<h1>Test</h1>
|
|
64
|
-
</body>
|
|
65
|
-
</html>
|
|
66
|
-
`,
|
|
67
|
-
|
|
68
|
-
styles:
|
|
69
|
-
`body, html
|
|
70
|
-
padding: 0;
|
|
71
|
-
margin: 0;
|
|
72
|
-
`,
|
|
73
|
-
|
|
74
|
-
app:
|
|
75
|
-
`require('sim').start(__dirname);
|
|
76
|
-
`,
|
|
77
|
-
|
|
78
|
-
middleware:
|
|
79
|
-
`exports.user = function (context, callback) {
|
|
80
|
-
context.user = this.options.user;
|
|
81
|
-
callback(context);
|
|
82
|
-
};
|
|
83
|
-
`,
|
|
84
|
-
|
|
85
|
-
// Logs ========================================================================
|
|
86
|
-
|
|
87
|
-
logs: {
|
|
88
|
-
|
|
89
|
-
welcome: `\n` + `★`.cyan.bold + ` ` + `{{txt.title}}`.bold.white
|
|
90
|
-
+ ` {{txt.version}} {{version}}`.white + ` ★`.cyan.bold + '\n',
|
|
91
|
-
|
|
92
|
-
creating: `{{date}} {{icon}} {{txt.creating}} «` + `{{name}}`.bold.blue
|
|
93
|
-
+ `» {{txt.creatingIn}} «` + `{{parentDir}}`.bold.blue + `»...`,
|
|
94
|
-
|
|
95
|
-
filesCreated: `{{date}} {{icon}} {{txt.project}} `
|
|
96
|
-
+ `{{txt.filesCreated}}`.bold.blue + ` {{txt.successfully}}.`,
|
|
97
|
-
|
|
98
|
-
dependencies: `{{date}} {{icon}} Installing ` + `dependencies`.bold.blue + `...`,
|
|
99
|
-
|
|
100
|
-
created: `{{date}} {{icon}} `
|
|
101
|
-
+ `Success`.bold.green
|
|
102
|
-
+ `: Project «`
|
|
103
|
-
+ `{{name}}`.bold
|
|
104
|
-
+ `» created successfully.\n`,
|
|
105
|
-
|
|
106
|
-
nameRequired: `{{date}} {{icon}} `
|
|
107
|
-
+ `{{txt.error}}`.bold.red + `: {{txt.mustEnter}} `
|
|
108
|
-
+ `{{txt.projectName}}`.bold.white + `. `
|
|
109
|
-
+ `{{txt.forExample}}, «sim test_project»` + `\n`,
|
|
110
|
-
|
|
111
|
-
exists: `{{date}} {{icon}} `
|
|
112
|
-
+ `{{txt.error}}`.bold.red + `: {{txt.directory}} «`
|
|
113
|
-
+ `{{dir}}`.blue.bold + `» `
|
|
114
|
-
+ `{{txt.alreadyExists}}`.bold.red + `.\n`,
|
|
115
|
-
},
|
|
116
|
-
|
|
117
|
-
};
|
package/client/slots.js
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
var server = server || {};
|
|
2
|
-
(function () {
|
|
3
|
-
var socket = io(),
|
|
4
|
-
slotsList = {
|
|
5
|
-
{
|
|
6
|
-
{
|
|
7
|
-
slotsList
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
};
|
|
11
|
-
slotsList.forEach(function (slot) {
|
|
12
|
-
var module = slot.module,
|
|
13
|
-
name = slot.name;
|
|
14
|
-
server[module] = server[module] || {};
|
|
15
|
-
server[module][name] = function () {
|
|
16
|
-
var args = Array.prototype.slice.call(arguments),
|
|
17
|
-
callback = args.pop(),
|
|
18
|
-
sessionKey = getCookie('sessionKey');
|
|
19
|
-
socket.emit('slot', {
|
|
20
|
-
name: name,
|
|
21
|
-
module: module,
|
|
22
|
-
args: args,
|
|
23
|
-
sessionKey: sessionKey,
|
|
24
|
-
anonUserId: getCookie('anonUserId')
|
|
25
|
-
}, callback);
|
|
26
|
-
};
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
function getCookie(name) {
|
|
30
|
-
var matches = document.cookie.match(new RegExp("(?:^|; )" +
|
|
31
|
-
name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"));
|
|
32
|
-
return matches ? decodeURIComponent(matches[1]) : undefined;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
}());
|
package/lib/auth/auth.js
DELETED
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const _ = require('lodash');
|
|
4
|
-
const db = require('../db');
|
|
5
|
-
const cookies = require('../cookies');
|
|
6
|
-
|
|
7
|
-
class Auth {
|
|
8
|
-
|
|
9
|
-
constructor () {
|
|
10
|
-
var self = this;
|
|
11
|
-
db.loadFromDir(__dirname + '/models');
|
|
12
|
-
_.extend(self, {
|
|
13
|
-
sessions: db.getLists().sessions,
|
|
14
|
-
users: db.getLists().users,
|
|
15
|
-
errorsDescription: {
|
|
16
|
-
1: 'Имя пользователя слишком короткое.',
|
|
17
|
-
2: 'Имя пользователя слишком длинное.',
|
|
18
|
-
3: 'Пароль слишком короткий.',
|
|
19
|
-
4: 'Пароль слишком длинный.',
|
|
20
|
-
5: 'Введенные пароли не совпадают.',
|
|
21
|
-
6: 'Данное имя пользователя недоступно.',
|
|
22
|
-
7: 'Введен некорректный e-mail адрес.',
|
|
23
|
-
},
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
createSession (user, callback) {
|
|
28
|
-
var self = this;
|
|
29
|
-
self.sessions.add({
|
|
30
|
-
username: user.username,
|
|
31
|
-
created: new Date()
|
|
32
|
-
}, session => callback(session._id));
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
getUserBySession (sessionKey, callback) {
|
|
36
|
-
var self = this;
|
|
37
|
-
self.sessions.get({
|
|
38
|
-
_id: sessionKey
|
|
39
|
-
}, session => {
|
|
40
|
-
if (!session) return callback(null);
|
|
41
|
-
self.users.get({
|
|
42
|
-
username: session.username
|
|
43
|
-
}, user => {
|
|
44
|
-
if (!user) return callback(null);
|
|
45
|
-
callback(user);
|
|
46
|
-
});
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
getUser (username, password, callback) {
|
|
51
|
-
var self = this;
|
|
52
|
-
self.users.get({
|
|
53
|
-
username: username
|
|
54
|
-
}, user => {
|
|
55
|
-
if (!user || !user.checkPassword(password))
|
|
56
|
-
return callback(null);
|
|
57
|
-
callback(user);
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
removeSession (sessionKey, callback) {
|
|
62
|
-
var self = this;
|
|
63
|
-
self.sessions.remove({
|
|
64
|
-
sessionKey: sessionKey
|
|
65
|
-
}, callback);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
login (options, callback) {
|
|
69
|
-
var self = this,
|
|
70
|
-
username = options.username,
|
|
71
|
-
password = options.password,
|
|
72
|
-
response = options.response;
|
|
73
|
-
self.getUser(username, password, (user) => {
|
|
74
|
-
if (!user) return callback(null);
|
|
75
|
-
self.createSession(user, sessionKey => {
|
|
76
|
-
cookies.set(response, 'sessionKey', sessionKey, true);
|
|
77
|
-
user.loginDate = new Date();
|
|
78
|
-
user.save(() => callback(user));
|
|
79
|
-
});
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
logout (response, callback) {
|
|
84
|
-
var self = this;
|
|
85
|
-
cookies.remove(response, 'sessionKey');
|
|
86
|
-
callback();
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
auth (request, callback) {
|
|
90
|
-
var self = this,
|
|
91
|
-
sessionKey = cookies.get(request, 'sessionKey') || '';
|
|
92
|
-
if (sessionKey === '')
|
|
93
|
-
return self.createAnonymousUser(request, callback);
|
|
94
|
-
self.getUserBySession(sessionKey, user => {
|
|
95
|
-
if (user) return callback(user);
|
|
96
|
-
self.createAnonymousUser(request, callback);
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
register (user, callback) {
|
|
101
|
-
var self = this,
|
|
102
|
-
errors = [];
|
|
103
|
-
if (user.password1 === undefined) {
|
|
104
|
-
user.password1 = user.password;
|
|
105
|
-
user.password2 = user.password;
|
|
106
|
-
}
|
|
107
|
-
if (user.username.length < 3)
|
|
108
|
-
errors.push(1);
|
|
109
|
-
if (user.username.length > 30)
|
|
110
|
-
errors.push(2);
|
|
111
|
-
if (user.password1.length < 3)
|
|
112
|
-
errors.push(3);
|
|
113
|
-
if (user.password1.length > 30)
|
|
114
|
-
errors.push(4);
|
|
115
|
-
if (user.password1 !== user.password2)
|
|
116
|
-
errors.push(5);
|
|
117
|
-
if (user.email && user.email.search(/.+\@.+\..+/) === -1)
|
|
118
|
-
errors.push(7);
|
|
119
|
-
self.users.get({
|
|
120
|
-
username: user.username
|
|
121
|
-
}, us => {
|
|
122
|
-
if (us) errors.push(6);
|
|
123
|
-
if (errors.length > 0) return callback(errors);
|
|
124
|
-
user.password = user.password1;
|
|
125
|
-
user.isAuth = true;
|
|
126
|
-
delete user.password1;
|
|
127
|
-
delete user.password2;
|
|
128
|
-
self.users.addUser(user, user => callback([], user));
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
createAnonymousUser (request, callback) {
|
|
133
|
-
var self = this,
|
|
134
|
-
id = cookies.get(request, 'anonUserId');
|
|
135
|
-
self.users.get({
|
|
136
|
-
_id: id
|
|
137
|
-
}, user => {
|
|
138
|
-
if (user) return callback(user);
|
|
139
|
-
self.users.addUser({
|
|
140
|
-
isAuth: false
|
|
141
|
-
}, user => {
|
|
142
|
-
user.username = user._id + '';
|
|
143
|
-
user.save(() => {
|
|
144
|
-
cookies.set(request._response, 'anonUserId', user._id + '');
|
|
145
|
-
callback(user);
|
|
146
|
-
});
|
|
147
|
-
});
|
|
148
|
-
});
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
getError (code) {
|
|
152
|
-
var self = this;
|
|
153
|
-
return self.errorsDescription[code] || 'Неизвестная ошибка.';
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
module.exports = Auth;
|
package/lib/auth/index.js
DELETED
|
File without changes
|