@steedos/accounts 1.23.41 → 1.23.42

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.
@@ -0,0 +1,486 @@
1
+ "use strict";
2
+ var _this = this;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ var tslib_1 = require("tslib");
5
+ var objectql_1 = require("@steedos/objectql");
6
+ var send_error_1 = require("../../utils/send-error");
7
+ var db_1 = require("../../../db");
8
+ var core_1 = require("../../../core");
9
+ var validator_1 = require("validator");
10
+ var moment = require('moment');
11
+ var ALLOW_ACTIONS = ['emailVerify', 'mobileVerify', 'emailLogin', 'mobileLogin', 'emailSignupAccount', 'mobileSignupAccount', 'mobileApplyLicense'];
12
+ var EFFECTIVE_TIME = 10; //10分钟
13
+ var CODE_LENGTH = 6;
14
+ var MAX_FAILURE_COUNT = 10;
15
+ /**
16
+ * Return random 1-9 digit
17
+ * @returns {number}
18
+ */
19
+ var getRandomDigit = function () {
20
+ return Math.floor((Math.random() * 9) + 1);
21
+ };
22
+ /**
23
+ * Get random verification code
24
+ * @param length
25
+ * @returns {string}
26
+ */
27
+ var getRandomCode = function (length) {
28
+ length = length || 4;
29
+ var output = "";
30
+ while (length-- > 0) {
31
+ output += getRandomDigit();
32
+ }
33
+ return output;
34
+ };
35
+ var t = function (key, options, lng) {
36
+ return TAPi18n.__(key, options, lng);
37
+ };
38
+ var getEmailSubject = function (action, lng) {
39
+ switch (action) {
40
+ case 'emailLogin':
41
+ return t("accounts_emailSubject_emailLogin", {}, lng);
42
+ case 'emailVerify':
43
+ return t("accounts_emailSubject_emailVerify", {}, lng);
44
+ case 'emailSignupAccount':
45
+ return t("accounts_emailSubject_emailSignupAccount", {}, lng);
46
+ }
47
+ };
48
+ var getEmailBody = function (action, code, lng) {
49
+ switch (action) {
50
+ case 'emailLogin':
51
+ return t('accounts_emailBody_emailLogin', { code: code, EFFECTIVE_TIME: EFFECTIVE_TIME }, lng);
52
+ case 'emailVerify':
53
+ return t('accounts_emailBody_emailVerify', { code: code, EFFECTIVE_TIME: EFFECTIVE_TIME }, lng);
54
+ case 'emailSignupAccount':
55
+ return t('accounts_emailBody_emailSignupAccount', { code: code, EFFECTIVE_TIME: EFFECTIVE_TIME }, lng);
56
+ }
57
+ };
58
+ function sendEmail(to, subject, html, lng) {
59
+ var config = objectql_1.getSteedosConfig().email || {};
60
+ var canSend = core_1.canSendEmail();
61
+ //如果没有配置发送邮件服务,则打印log
62
+ if (!canSend) {
63
+ console.log("Please set email configs in steedos-config.yml");
64
+ console.log({
65
+ to: to,
66
+ subject: subject,
67
+ html: html
68
+ });
69
+ return;
70
+ }
71
+ else {
72
+ MailQueue.send({
73
+ to: to,
74
+ from: config.from || "华炎魔方",
75
+ subject: subject,
76
+ html: html
77
+ });
78
+ }
79
+ }
80
+ function sendSMS(mobile, code, spaceId, lng) {
81
+ var message = t('accounts_sms_message', { code: code, EFFECTIVE_TIME: EFFECTIVE_TIME }, lng);
82
+ var canSend = core_1.canSendSMS();
83
+ if (!canSend) {
84
+ console.log("Please set sms configs in steedos-config.yml");
85
+ console.log(message);
86
+ return;
87
+ }
88
+ else {
89
+ SMSQueue.send({
90
+ RecNum: mobile,
91
+ msg: message
92
+ }, spaceId);
93
+ }
94
+ }
95
+ function sendCode(owner, name, action, spaceId, lng) {
96
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
97
+ var now, filters, records, record, doc;
98
+ return tslib_1.__generator(this, function (_a) {
99
+ switch (_a.label) {
100
+ case 0:
101
+ now = new Date();
102
+ filters = [['verifiedAt', '=', null]];
103
+ if (owner) {
104
+ filters.push(['owner', '=', owner]);
105
+ }
106
+ filters.push(['name', '=', name]);
107
+ filters.push(['action', '=', action]);
108
+ filters.push(['expiredAt', '>', now]);
109
+ if (spaceId) {
110
+ filters.push(['space', '=', spaceId]);
111
+ }
112
+ return [4 /*yield*/, db_1.db.find('users_verify_code', { filters: filters })];
113
+ case 1:
114
+ records = _a.sent();
115
+ if (!(records && records.length > 0)) return [3 /*break*/, 3];
116
+ record = records[0];
117
+ if (record.failureCount >= MAX_FAILURE_COUNT) {
118
+ throw new Error('accounts.tooManyFailures');
119
+ }
120
+ return [4 /*yield*/, db_1.db.updateOne('users_verify_code', record._id, { expiredAt: new Date(moment().add(EFFECTIVE_TIME, 'm')) })];
121
+ case 2:
122
+ _a.sent();
123
+ return [3 /*break*/, 5];
124
+ case 3:
125
+ doc = {
126
+ name: name, action: action, owner: owner, code: getRandomCode(CODE_LENGTH), expiredAt: new Date(moment().add(EFFECTIVE_TIME, 'm'))
127
+ };
128
+ if (spaceId) {
129
+ doc.space = spaceId;
130
+ }
131
+ return [4 /*yield*/, db_1.db.insert('users_verify_code', doc)];
132
+ case 4:
133
+ record = _a.sent();
134
+ _a.label = 5;
135
+ case 5:
136
+ if (action.startsWith("email")) {
137
+ sendEmail(name, getEmailSubject(action, lng), getEmailBody(action, record.code, lng), lng);
138
+ }
139
+ else if (action.startsWith("mobile")) {
140
+ sendSMS(name, record.code, spaceId, lng);
141
+ }
142
+ return [2 /*return*/, record._id];
143
+ }
144
+ });
145
+ });
146
+ }
147
+ function checkMobile(mobile, config) {
148
+ if (config.mobile_phone_locales) {
149
+ return !(mobile.startsWith('+') || !validator_1.default.isMobilePhone(mobile, config.mobile_phone_locales || ['zh-CN']));
150
+ }
151
+ else {
152
+ var mobileReg = config.mobile_regexp || '^[0-9]{11}$';
153
+ return new RegExp(mobileReg).test(mobile);
154
+ }
155
+ }
156
+ exports.applyCode = function (accountsServer) { return function (req, res) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
157
+ var steedosConfig, tenantConfig, config, action, name, token, spaceId, accessToken, lng, record, _a, _b, verifyMobileUser, session, users, filters, users, user, err_1;
158
+ return tslib_1.__generator(this, function (_c) {
159
+ switch (_c.label) {
160
+ case 0:
161
+ _c.trys.push([0, 19, , 20]);
162
+ steedosConfig = objectql_1.getSteedosConfig();
163
+ tenantConfig = steedosConfig.tenant;
164
+ config = steedosConfig.accounts || {};
165
+ action = req.body.action;
166
+ name = req.body.name;
167
+ token = req.body.token;
168
+ spaceId = req.body.spaceId;
169
+ accessToken = req.body.accessToken;
170
+ lng = req.body.lng || 'zh-CN';
171
+ if (!token) return [3 /*break*/, 2];
172
+ return [4 /*yield*/, db_1.db.findOne("users_verify_code", token, {})];
173
+ case 1:
174
+ record = _c.sent();
175
+ if (record) {
176
+ name = record.name;
177
+ action = record.action;
178
+ spaceId = record.space;
179
+ }
180
+ else {
181
+ throw new Error("accounts.invalidToken");
182
+ }
183
+ _c.label = 2;
184
+ case 2:
185
+ if (!action) {
186
+ throw new Error("Action is required");
187
+ }
188
+ if (!name || !name.trim()) {
189
+ throw new Error("Name is required");
190
+ }
191
+ if (ALLOW_ACTIONS.indexOf(action) < 0) {
192
+ throw new Error("Invalid action");
193
+ }
194
+ _a = action.endsWith('SignupAccount');
195
+ if (!_a) return [3 /*break*/, 4];
196
+ return [4 /*yield*/, core_1.canRegister(spaceId, action)];
197
+ case 3:
198
+ _a = !(_c.sent());
199
+ _c.label = 4;
200
+ case 4:
201
+ if (_a) {
202
+ throw new Error('accounts.unenableRegister');
203
+ }
204
+ name = name.trim().toLowerCase();
205
+ if (action.startsWith("email")) {
206
+ if (!validator_1.default.isEmail(name)) {
207
+ throw new Error("accounts.invalidEmail");
208
+ }
209
+ }
210
+ _b = spaceId;
211
+ if (!_b) return [3 /*break*/, 6];
212
+ return [4 /*yield*/, core_1.spaceExists(spaceId)];
213
+ case 5:
214
+ _b = !(_c.sent());
215
+ _c.label = 6;
216
+ case 6:
217
+ if (_b) {
218
+ throw new Error("accounts.spaceUnExists");
219
+ }
220
+ if (action.startsWith("mobile")) {
221
+ if (tenantConfig && !tenantConfig.enable_mobile_code_login) {
222
+ if (['mobileLogin', 'mobileSignupAccount'].indexOf(action) > -1) {
223
+ throw new Error("accounts.invalidMobile");
224
+ }
225
+ }
226
+ if (!checkMobile(name, config)) {
227
+ throw new Error("accounts.invalidMobile");
228
+ }
229
+ }
230
+ verifyMobileUser = null;
231
+ if (!(action === 'mobileVerify')) return [3 /*break*/, 10];
232
+ if (!accessToken) {
233
+ throw new Error("accounts.invalidRequest");
234
+ }
235
+ return [4 /*yield*/, accountsServer.findSessionByAccessToken(accessToken)];
236
+ case 7:
237
+ session = _c.sent();
238
+ if (!session) {
239
+ throw new Error("accounts.invalidRequest");
240
+ }
241
+ return [4 /*yield*/, accountsServer.findUserById(session.userId)];
242
+ case 8:
243
+ verifyMobileUser = _c.sent();
244
+ if (!verifyMobileUser) {
245
+ throw new Error("Not find user");
246
+ }
247
+ return [4 /*yield*/, db_1.db.find("users", { filters: [['mobile', '=', name], ['_id', '<>', verifyMobileUser.id]] })];
248
+ case 9:
249
+ users = _c.sent();
250
+ if (users.length > 0) {
251
+ throw new Error("accounts.mobileAlreadyExists");
252
+ }
253
+ _c.label = 10;
254
+ case 10:
255
+ filters = void 0;
256
+ if (action.startsWith("email")) {
257
+ filters = ['email', '=', name];
258
+ }
259
+ else if (action.startsWith("mobile")) {
260
+ filters = ['mobile', '=', name];
261
+ }
262
+ if (action === "mobileVerify") {
263
+ filters = ['_id', '=', verifyMobileUser.id];
264
+ }
265
+ if (!(filters.length > 0)) return [3 /*break*/, 17];
266
+ return [4 /*yield*/, db_1.db.find("users", { filters: filters })];
267
+ case 11:
268
+ users = _c.sent();
269
+ if (!((users.length === 0 && action.endsWith('SignupAccount')) || action === 'mobileApplyLicense')) return [3 /*break*/, 13];
270
+ return [4 /*yield*/, sendCode(null, name, action, spaceId, lng)];
271
+ case 12:
272
+ token = _c.sent();
273
+ return [2 /*return*/, res.send({
274
+ token: token
275
+ })];
276
+ case 13:
277
+ if (!(users.length === 1)) return [3 /*break*/, 15];
278
+ user = users[0];
279
+ return [4 /*yield*/, sendCode(user._id, name, action, spaceId, lng)];
280
+ case 14:
281
+ token = _c.sent();
282
+ return [2 /*return*/, res.send({
283
+ token: token
284
+ })];
285
+ case 15: throw new Error("无效的name");
286
+ case 16: return [3 /*break*/, 18];
287
+ case 17: throw new Error("accounts.invalidRequest");
288
+ case 18: return [3 /*break*/, 20];
289
+ case 19:
290
+ err_1 = _c.sent();
291
+ send_error_1.sendError(res, err_1);
292
+ return [3 /*break*/, 20];
293
+ case 20: return [2 /*return*/];
294
+ }
295
+ });
296
+ }); }; };
297
+ // export const verifyCodeAPI = () => async (
298
+ // req: express.Request,
299
+ // res: express.Response
300
+ // ) => {
301
+ // const now: any = new Date();
302
+ // try {
303
+ // let token = req.body.token;
304
+ // let code = req.body.code;
305
+ // let userId = req.body.userId;
306
+ // let verified = await verifyCode(userId, token, code);
307
+ // if (verified) {
308
+ // return res.send({
309
+ // verified
310
+ // });
311
+ // }
312
+ // } catch (err) {
313
+ // sendError(res, err);
314
+ // }
315
+ // };
316
+ exports.getUserIdByToken = function () { return function (req, res) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
317
+ var now, token, record, now_1, isEffective, err_2;
318
+ return tslib_1.__generator(this, function (_a) {
319
+ switch (_a.label) {
320
+ case 0:
321
+ now = new Date();
322
+ _a.label = 1;
323
+ case 1:
324
+ _a.trys.push([1, 4, , 5]);
325
+ token = req.query.token;
326
+ return [4 /*yield*/, db_1.db.findOne('users_verify_code', token, {})];
327
+ case 2:
328
+ record = _a.sent();
329
+ if (!record) {
330
+ throw new Error("accounts.invalidRequest");
331
+ }
332
+ now_1 = new Date();
333
+ return [4 /*yield*/, db_1.db.count('users_verify_code', { filters: [['_id', '=', token], ['verifiedAt', '=', null], ['expiredAt', '>', now_1]] })];
334
+ case 3:
335
+ isEffective = _a.sent();
336
+ return [2 /*return*/, res.send({
337
+ id: record.owner,
338
+ name: record.name,
339
+ action: record.action,
340
+ expired: !isEffective
341
+ })];
342
+ case 4:
343
+ err_2 = _a.sent();
344
+ send_error_1.sendError(res, err_2);
345
+ return [3 /*break*/, 5];
346
+ case 5: return [2 /*return*/];
347
+ }
348
+ });
349
+ }); }; };
350
+ exports.getVerifyRecord = function (token) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
351
+ return tslib_1.__generator(this, function (_a) {
352
+ switch (_a.label) {
353
+ case 0: return [4 /*yield*/, db_1.db.findOne('users_verify_code', token, {})];
354
+ case 1: return [2 /*return*/, _a.sent()];
355
+ }
356
+ });
357
+ }); };
358
+ exports.verifyCode = function (owner, token, code, options) {
359
+ if (options === void 0) { options = {}; }
360
+ return tslib_1.__awaiter(_this, void 0, void 0, function () {
361
+ var now, failureCount, recordByToken, filters, record, userId, error_1;
362
+ return tslib_1.__generator(this, function (_a) {
363
+ switch (_a.label) {
364
+ case 0:
365
+ now = new Date();
366
+ if (!token) {
367
+ throw new Error("accounts.invalidToken");
368
+ }
369
+ if (!code) {
370
+ throw new Error("accounts.codeRequired");
371
+ }
372
+ failureCount = 0;
373
+ return [4 /*yield*/, db_1.db.findOne('users_verify_code', token, { fields: 'failureCount' })];
374
+ case 1:
375
+ recordByToken = _a.sent();
376
+ if (recordByToken) {
377
+ failureCount = recordByToken.failureCount || 0;
378
+ }
379
+ if (failureCount >= MAX_FAILURE_COUNT) {
380
+ throw new Error('accounts.tooManyFailures');
381
+ }
382
+ filters = [['code', '=', code], ['verifiedAt', '=', null], ['expiredAt', '>', now]];
383
+ if (owner) {
384
+ filters.push(['owner', '=', owner]);
385
+ }
386
+ return [4 /*yield*/, db_1.db.findOne('users_verify_code', token, { filters: filters })];
387
+ case 2:
388
+ record = _a.sent();
389
+ if (!record) return [3 /*break*/, 8];
390
+ return [4 /*yield*/, db_1.db.updateOne('users_verify_code', record._id, { verifiedAt: now })];
391
+ case 3:
392
+ _a.sent();
393
+ _a.label = 4;
394
+ case 4:
395
+ _a.trys.push([4, 6, , 7]);
396
+ return [4 /*yield*/, exports.handleAction(token, options)];
397
+ case 5:
398
+ userId = _a.sent();
399
+ return [2 /*return*/, {
400
+ verified: true,
401
+ userId: userId
402
+ }];
403
+ case 6:
404
+ error_1 = _a.sent();
405
+ console.log(error_1);
406
+ throw new Error("accounts.serverError");
407
+ case 7: return [3 /*break*/, 9];
408
+ case 8:
409
+ if (recordByToken) {
410
+ db_1.db.updateOne('users_verify_code', token, { failureCount: failureCount + 1 });
411
+ }
412
+ throw new Error("accounts.invalidCode");
413
+ case 9: return [2 /*return*/];
414
+ }
415
+ });
416
+ });
417
+ };
418
+ /**
419
+ * 返回userId
420
+ * @param token
421
+ * @param options
422
+ */
423
+ exports.handleAction = function (token, options) {
424
+ if (options === void 0) { options = {}; }
425
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
426
+ var record, handleUserId, user, filters, findUsers, userId;
427
+ return tslib_1.__generator(this, function (_a) {
428
+ switch (_a.label) {
429
+ case 0: return [4 /*yield*/, exports.getVerifyRecord(token)];
430
+ case 1:
431
+ record = _a.sent();
432
+ handleUserId = record.owner;
433
+ if (!record.action.endsWith('SignupAccount')) return [3 /*break*/, 7];
434
+ if (!record.owner) return [3 /*break*/, 2];
435
+ if (record.space) {
436
+ Creator.addSpaceUsers(record.space, record.owner, true);
437
+ }
438
+ return [3 /*break*/, 7];
439
+ case 2:
440
+ user = {
441
+ locale: options.locale || 'zh-cn',
442
+ name: options.name,
443
+ };
444
+ filters = [];
445
+ if (record.action.startsWith('email')) {
446
+ user.email = record.name;
447
+ user.email_verified = true;
448
+ filters.push(['email', '=', user.email]);
449
+ }
450
+ else if (record.action.startsWith('mobile')) {
451
+ user.mobile = record.name;
452
+ user.mobile_verified = true;
453
+ filters.push(['mobile', '=', user.mobile]);
454
+ }
455
+ return [4 /*yield*/, db_1.db.find('users', { filters: filters, fields: ['_id'] })];
456
+ case 3:
457
+ findUsers = _a.sent();
458
+ if (!(findUsers.length > 0)) return [3 /*break*/, 4];
459
+ handleUserId = findUsers[0]._id;
460
+ return [3 /*break*/, 6];
461
+ case 4: return [4 /*yield*/, options.server.createUser(user)];
462
+ case 5:
463
+ userId = _a.sent();
464
+ handleUserId = userId;
465
+ _a.label = 6;
466
+ case 6:
467
+ if (record.space) {
468
+ Creator.addSpaceUsers(record.space, handleUserId, true);
469
+ }
470
+ _a.label = 7;
471
+ case 7:
472
+ if (record.action === 'mobileVerify') {
473
+ Steedos.setMobile(handleUserId, record.name);
474
+ }
475
+ if (record.action.startsWith("email")) {
476
+ Steedos.setEmailVerified(handleUserId, record.name, true);
477
+ }
478
+ else if (record.action != 'mobileApplyLicense' && record.action.startsWith("mobile")) {
479
+ Steedos.setMobileVerified(handleUserId, record.name, true);
480
+ }
481
+ return [2 /*return*/, handleUserId];
482
+ }
483
+ });
484
+ });
485
+ };
486
+ //# sourceMappingURL=verify_code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify_code.js","sourceRoot":"","sources":["../../../../src/rest-express/endpoints/steedos/verify_code.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@steedos/accounts",
3
3
  "private": false,
4
- "version": "1.23.41",
4
+ "version": "1.23.42",
5
5
  "main": "lib/index.js",
6
6
  "files": [
7
7
  "/package.json",
@@ -50,9 +50,9 @@
50
50
  "validator": "^12.2.0"
51
51
  },
52
52
  "devDependencies": {
53
- "@steedos/auth": "^1.23.41",
54
- "@steedos/meteor-bundle-runner": "^1.23.41",
55
- "@steedos/objectql": "^1.23.41",
53
+ "@steedos/auth": "^1.23.42",
54
+ "@steedos/meteor-bundle-runner": "^1.23.42",
55
+ "@steedos/objectql": "^1.23.42",
56
56
  "@steedos/steedos-plugin-workflow": "^2.0.4",
57
57
  "@types/dotenv-flow": "^3.0.0",
58
58
  "@types/node": "12.6.8",
@@ -60,12 +60,12 @@
60
60
  "dotenv": "^8.2.0",
61
61
  "dotenv-flow": "^3.1.0",
62
62
  "nodemon": "1.19.1",
63
- "steedos-server": "^1.23.41",
63
+ "steedos-server": "^1.23.42",
64
64
  "ts-node": "8.3.0",
65
65
  "typescript": "3.5.3"
66
66
  },
67
67
  "publishConfig": {
68
68
  "access": "public"
69
69
  },
70
- "gitHead": "90f470f5f552599dbf2cf91d634cd9cedf551b4e"
70
+ "gitHead": "0566b1152b4dc333ccda4cf1151e7fc14089b2e5"
71
71
  }
@@ -0,0 +1,18 @@
1
+ {
2
+ "files": {
3
+ "main.js": "/accounts/a/static/js/main.8aaa42cc.chunk.js",
4
+ "main.js.map": "/accounts/a/static/js/main.8aaa42cc.chunk.js.map",
5
+ "runtime-main.js": "/accounts/a/static/js/runtime-main.fcbf19ad.js",
6
+ "runtime-main.js.map": "/accounts/a/static/js/runtime-main.fcbf19ad.js.map",
7
+ "static/js/2.3c20252e.chunk.js": "/accounts/a/static/js/2.3c20252e.chunk.js",
8
+ "static/js/2.3c20252e.chunk.js.map": "/accounts/a/static/js/2.3c20252e.chunk.js.map",
9
+ "index.html": "/accounts/a/index.html",
10
+ "precache-manifest.be3fffe848ef3448b739207c45fd552a.js": "/accounts/a/precache-manifest.be3fffe848ef3448b739207c45fd552a.js",
11
+ "service-worker.js": "/accounts/a/service-worker.js"
12
+ },
13
+ "entrypoints": [
14
+ "static/js/runtime-main.fcbf19ad.js",
15
+ "static/js/2.3c20252e.chunk.js",
16
+ "static/js/main.8aaa42cc.chunk.js"
17
+ ]
18
+ }
@@ -0,0 +1,76 @@
1
+ <html>
2
+
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
6
+ <meta name="renderer" content="webkit">
7
+ <meta name="viewport"
8
+ content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no,shrink-to-fit=no">
9
+ <title>华炎云</title>
10
+ <style>
11
+ html,
12
+ body {
13
+ position: relative;
14
+ height: 100%;
15
+ width: 100%;
16
+ margin: 0;
17
+ }
18
+
19
+ .app-shell-not-support {
20
+ position: absolute;
21
+ top: 50%;
22
+ left: 50%;
23
+ width: 470px;
24
+ height: auto;
25
+ background: none;
26
+ transform: translate(-50%, -50%);
27
+ text-align: center;
28
+ font-family: "PingFangSC", sans-serif;
29
+ }
30
+
31
+ .not-support-bg {
32
+ width: 100%;
33
+ margin-bottom: 3px;
34
+ }
35
+
36
+ .button {
37
+ display: block;
38
+ width: 120px;
39
+ height: 32px;
40
+ border-radius: 4px;
41
+ margin-left: 50%;
42
+ margin-top: 16px;
43
+ transform: translateX(-50%);
44
+ line-height: 32px;
45
+ background-color: #3377ff;
46
+ font-size: 14px;
47
+ color: #fff;
48
+ cursor: pointer;
49
+ user-select: none;
50
+ text-decoration: none;
51
+ }
52
+
53
+ @media (max-width: 600px) {
54
+ .app-shell-not-support {
55
+ width: 78%;
56
+ min-width: 250px;
57
+ }
58
+ }
59
+
60
+ @media (max-width: 400px) {
61
+ .app-shell-not-support {
62
+ font-size: 12px;
63
+ }
64
+ }
65
+ </style>
66
+ </head>
67
+
68
+ <body id="root">
69
+ <div class="app-shell-not-support">
70
+ <img class="not-support-bg" src="images/unsupported.png">
71
+ <div><span>我们暂不支持该浏览器,推荐使用华炎客户端访问</span></div>
72
+ <a class="button" target="_blank" href="https://www.steedos.com/help/download">下载客户端</a>
73
+ </div>
74
+ </body>
75
+
76
+ </html>
@@ -0,0 +1,3 @@
1
+ body {
2
+ background-color: #f8f8f8;
3
+ }