@crowdin/app-project-module 0.17.6 → 0.17.8
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 +5 -9
- package/out/handlers/crowdin-file-progress.d.ts +4 -0
- package/out/handlers/crowdin-file-progress.js +22 -0
- package/out/handlers/crowdin-files.d.ts +4 -0
- package/out/handlers/crowdin-files.js +31 -0
- package/out/handlers/crowdin-project.d.ts +4 -0
- package/out/handlers/crowdin-project.js +22 -0
- package/out/handlers/crowdin-update.d.ts +4 -0
- package/out/handlers/crowdin-update.js +26 -0
- package/out/handlers/custom-file-format/download.d.ts +4 -0
- package/out/handlers/custom-file-format/download.js +32 -0
- package/out/handlers/custom-file-format/process.d.ts +4 -0
- package/out/handlers/custom-file-format/process.js +139 -0
- package/out/handlers/custom-mt/translate.d.ts +4 -0
- package/out/handlers/custom-mt/translate.js +42 -0
- package/out/handlers/install.d.ts +4 -0
- package/out/handlers/install.js +46 -0
- package/out/handlers/integration-data.d.ts +4 -0
- package/out/handlers/integration-data.js +21 -0
- package/out/handlers/integration-login.d.ts +4 -0
- package/out/handlers/integration-login.js +30 -0
- package/out/handlers/integration-logout.d.ts +4 -0
- package/out/handlers/integration-logout.js +23 -0
- package/out/handlers/integration-update.d.ts +4 -0
- package/out/handlers/integration-update.js +25 -0
- package/out/handlers/main.d.ts +4 -0
- package/out/handlers/main.js +64 -0
- package/out/handlers/manifest.d.ts +3 -0
- package/out/handlers/manifest.js +126 -0
- package/out/handlers/oauth-login.d.ts +4 -0
- package/out/handlers/oauth-login.js +69 -0
- package/out/handlers/settings-save.d.ts +4 -0
- package/out/handlers/settings-save.js +21 -0
- package/out/handlers/subscription-info.d.ts +3 -0
- package/out/handlers/subscription-info.js +15 -0
- package/out/handlers/subscription-paid.d.ts +4 -0
- package/out/handlers/subscription-paid.js +22 -0
- package/out/handlers/sync-settings-save.d.ts +4 -0
- package/out/handlers/sync-settings-save.js +29 -0
- package/out/handlers/sync-settings.d.ts +4 -0
- package/out/handlers/sync-settings.js +27 -0
- package/out/handlers/uninstall.d.ts +4 -0
- package/out/handlers/uninstall.js +27 -0
- package/out/index.d.ts +5 -0
- package/out/index.js +191 -0
- package/out/logo.png +0 -0
- package/out/middlewares/crowdin-client.d.ts +10 -0
- package/out/middlewares/crowdin-client.js +88 -0
- package/out/middlewares/integration-credentials.d.ts +4 -0
- package/out/middlewares/integration-credentials.js +39 -0
- package/out/middlewares/json-response.d.ts +2 -0
- package/out/middlewares/json-response.js +7 -0
- package/out/middlewares/ui-module.d.ts +4 -0
- package/out/middlewares/ui-module.js +39 -0
- package/out/models/index.d.ts +549 -0
- package/out/models/index.js +41 -0
- package/out/static/css/styles.css +57 -0
- package/out/static/js/main.js +130 -0
- package/out/static/js/polyfills/fetch.js +494 -0
- package/out/static/js/polyfills/promise.js +375 -0
- package/out/storage/index.d.ts +22 -0
- package/out/storage/index.js +319 -0
- package/out/util/connection.d.ts +10 -0
- package/out/util/connection.js +217 -0
- package/out/util/cron.d.ts +3 -0
- package/out/util/cron.js +103 -0
- package/out/util/defaults.d.ts +5 -0
- package/out/util/defaults.js +153 -0
- package/out/util/index.d.ts +11 -0
- package/out/util/index.js +105 -0
- package/out/views/install.handlebars +16 -0
- package/out/views/login.handlebars +115 -0
- package/out/views/main.handlebars +471 -0
- package/out/views/oauth.handlebars +4 -0
- package/out/views/partials/head.handlebars +20 -0
- package/out/views/subscription.handlebars +26 -0
- package/package.json +2 -2
- package/.github/workflows/basic.yml +0 -39
- package/.github/workflows/publish.yml +0 -34
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
22
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
23
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
24
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
25
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
26
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
27
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
28
|
+
});
|
|
29
|
+
};
|
|
30
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
31
|
+
exports.applyDefaults = exports.getOauthRoute = exports.getRootFolder = void 0;
|
|
32
|
+
const crowdinAppFunctions = __importStar(require("@crowdin/crowdin-apps-functions"));
|
|
33
|
+
function getRootFolder(config, integration, client, projectId) {
|
|
34
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
35
|
+
if (!integration.withRootFolder) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
const folder = integration.appFolderName || config.name;
|
|
39
|
+
const directories = (yield client.sourceFilesApi.withFetchAll().listProjectDirectories(projectId)).data.map(d => d.data);
|
|
40
|
+
const { folder: rootFolder } = yield crowdinAppFunctions.getOrCreateFolder(directories, client, projectId, folder);
|
|
41
|
+
return rootFolder;
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
exports.getRootFolder = getRootFolder;
|
|
45
|
+
function getOauthRoute(integration) {
|
|
46
|
+
var _a;
|
|
47
|
+
return ((_a = integration.oauthLogin) === null || _a === void 0 ? void 0 : _a.redirectUriRoute) || '/oauth/code';
|
|
48
|
+
}
|
|
49
|
+
exports.getOauthRoute = getOauthRoute;
|
|
50
|
+
function applyDefaults(config, integration) {
|
|
51
|
+
if (!integration.getCrowdinFiles) {
|
|
52
|
+
integration.getCrowdinFiles = (projectId, client, rootFolder) => __awaiter(this, void 0, void 0, function* () {
|
|
53
|
+
let allDirectories;
|
|
54
|
+
if (rootFolder) {
|
|
55
|
+
allDirectories = (yield client.sourceFilesApi.withFetchAll().listProjectDirectories(projectId, {
|
|
56
|
+
directoryId: rootFolder.id,
|
|
57
|
+
recursion: 'true',
|
|
58
|
+
})).data.map(d => d.data);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
allDirectories = (yield client.sourceFilesApi.withFetchAll().listProjectDirectories(projectId)).data.map(d => d.data);
|
|
62
|
+
}
|
|
63
|
+
const directoryIds = allDirectories.map(d => d.id);
|
|
64
|
+
let files = (yield client.sourceFilesApi.withFetchAll().listProjectFiles(projectId)).data.map(d => d.data);
|
|
65
|
+
files = files.filter(f => (rootFolder && f.directoryId === rootFolder.id) ||
|
|
66
|
+
directoryIds.includes(f.directoryId) ||
|
|
67
|
+
(!rootFolder && !f.directoryId));
|
|
68
|
+
const res = [];
|
|
69
|
+
allDirectories.forEach(e => {
|
|
70
|
+
const parentId = rootFolder && e.directoryId === rootFolder.id ? undefined : e.directoryId;
|
|
71
|
+
res.push({
|
|
72
|
+
id: e.id.toString(),
|
|
73
|
+
parentId: parentId ? parentId.toString() : undefined,
|
|
74
|
+
name: e.name,
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
files.forEach(e => {
|
|
78
|
+
const parentId = rootFolder && e.directoryId === rootFolder.id ? undefined : e.directoryId;
|
|
79
|
+
res.push({
|
|
80
|
+
id: e.id.toString(),
|
|
81
|
+
parentId: parentId ? parentId.toString() : undefined,
|
|
82
|
+
name: e.title || e.name,
|
|
83
|
+
type: e.type,
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
return res;
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
if (!integration.loginForm) {
|
|
90
|
+
integration.loginForm = {
|
|
91
|
+
fields: [
|
|
92
|
+
{
|
|
93
|
+
helpText: 'You need to create standard api key',
|
|
94
|
+
key: 'apikey',
|
|
95
|
+
label: `${config.name} API Key`,
|
|
96
|
+
},
|
|
97
|
+
],
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
if (integration.withCronSync) {
|
|
101
|
+
const getUserSettings = integration.getConfiguration;
|
|
102
|
+
integration.getConfiguration = (projectId, crowdinClient, integrationCredentials) => __awaiter(this, void 0, void 0, function* () {
|
|
103
|
+
let fields = [];
|
|
104
|
+
if (getUserSettings) {
|
|
105
|
+
fields = yield getUserSettings(projectId, crowdinClient, integrationCredentials);
|
|
106
|
+
}
|
|
107
|
+
return [
|
|
108
|
+
{
|
|
109
|
+
label: 'Background synchronization',
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
key: 'schedule',
|
|
113
|
+
label: 'Sync schedule',
|
|
114
|
+
helpText: 'Set the frequency for pushing sources and translations',
|
|
115
|
+
type: 'select',
|
|
116
|
+
options: [
|
|
117
|
+
{
|
|
118
|
+
value: '0',
|
|
119
|
+
label: 'Disabled',
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
value: '1',
|
|
123
|
+
label: '1 hour',
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
value: '3',
|
|
127
|
+
label: '3 hours',
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
value: '6',
|
|
131
|
+
label: '6 hours',
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
value: '12',
|
|
135
|
+
label: '12 hours',
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
value: '24',
|
|
139
|
+
label: '24 hours',
|
|
140
|
+
},
|
|
141
|
+
],
|
|
142
|
+
},
|
|
143
|
+
...fields,
|
|
144
|
+
];
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
if (!integration.checkConnection) {
|
|
148
|
+
integration.checkConnection = (apiCredentials) => __awaiter(this, void 0, void 0, function* () {
|
|
149
|
+
yield integration.getIntegrationFiles(apiCredentials);
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
exports.applyDefaults = applyDefaults;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Request, Response } from 'express';
|
|
2
|
+
import { Config, Logger } from '../models';
|
|
3
|
+
export declare class CodeError extends Error {
|
|
4
|
+
code: number | undefined;
|
|
5
|
+
constructor(message: string, code?: number);
|
|
6
|
+
}
|
|
7
|
+
export declare function log(message: string, logger?: Logger): void;
|
|
8
|
+
export declare function getMessage(err: any): any;
|
|
9
|
+
export declare function runAsyncWrapper(callback: Function, onError?: (e: any) => void): (req: Request, res: Response, next: Function) => void;
|
|
10
|
+
export declare function encryptData(config: Config, data: string): string;
|
|
11
|
+
export declare function decryptData(config: Config, data: string): string;
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
22
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
23
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
24
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
25
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
26
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
27
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
28
|
+
});
|
|
29
|
+
};
|
|
30
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
31
|
+
exports.decryptData = exports.encryptData = exports.runAsyncWrapper = exports.getMessage = exports.log = exports.CodeError = void 0;
|
|
32
|
+
const crypto = __importStar(require("crypto-js"));
|
|
33
|
+
const storage_1 = require("../storage");
|
|
34
|
+
class CodeError extends Error {
|
|
35
|
+
constructor(message, code) {
|
|
36
|
+
super(message);
|
|
37
|
+
this.code = code;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
exports.CodeError = CodeError;
|
|
41
|
+
function log(message, logger) {
|
|
42
|
+
if (logger === null || logger === void 0 ? void 0 : logger.enabled) {
|
|
43
|
+
if (logger.log) {
|
|
44
|
+
logger.log(message);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
const timestamp = new Date().toISOString();
|
|
48
|
+
// eslint-disable-next-line no-console
|
|
49
|
+
console.log(`[${timestamp}] ${message}`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
exports.log = log;
|
|
54
|
+
function isCrowdinClientRequest(req) {
|
|
55
|
+
return req.crowdinContext;
|
|
56
|
+
}
|
|
57
|
+
function getMessage(err) {
|
|
58
|
+
let message;
|
|
59
|
+
if (typeof err === 'string') {
|
|
60
|
+
message = err;
|
|
61
|
+
}
|
|
62
|
+
else if (err.message) {
|
|
63
|
+
message = err.message;
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
message = JSON.stringify(err);
|
|
67
|
+
}
|
|
68
|
+
return message;
|
|
69
|
+
}
|
|
70
|
+
exports.getMessage = getMessage;
|
|
71
|
+
function handleError(err, req, res) {
|
|
72
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
73
|
+
const code = err.code ? err.code : 500;
|
|
74
|
+
if (code === 401 && isCrowdinClientRequest(req)) {
|
|
75
|
+
yield (0, storage_1.deleteIntegrationCredentials)(req.crowdinContext.clientId);
|
|
76
|
+
}
|
|
77
|
+
if (code === 401 && req.path === '/') {
|
|
78
|
+
res.redirect('/');
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
res.status(code).send({ message: getMessage(err), code });
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
function runAsyncWrapper(callback, onError) {
|
|
85
|
+
return (req, res, next) => {
|
|
86
|
+
callback(req, res, next).catch((e) => {
|
|
87
|
+
if (onError) {
|
|
88
|
+
onError(e);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
console.error(e);
|
|
92
|
+
}
|
|
93
|
+
handleError(e, req, res);
|
|
94
|
+
});
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
exports.runAsyncWrapper = runAsyncWrapper;
|
|
98
|
+
function encryptData(config, data) {
|
|
99
|
+
return crypto.AES.encrypt(data, config.cryptoSecret || config.clientSecret).toString();
|
|
100
|
+
}
|
|
101
|
+
exports.encryptData = encryptData;
|
|
102
|
+
function decryptData(config, data) {
|
|
103
|
+
return crypto.AES.decrypt(data, config.cryptoSecret || config.clientSecret).toString(crypto.enc.Utf8);
|
|
104
|
+
}
|
|
105
|
+
exports.decryptData = decryptData;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
{{> head}}
|
|
4
|
+
|
|
5
|
+
<body>
|
|
6
|
+
<div class="i_w center">
|
|
7
|
+
<div>
|
|
8
|
+
<h1>Looks like {{ name }} is not installed yet!</h1>
|
|
9
|
+
<p>Contact your organization administrator to install it. More info on <a
|
|
10
|
+
href='https://support.crowdin.com'>Link
|
|
11
|
+
to how to install</a></p>
|
|
12
|
+
</div>
|
|
13
|
+
</div>
|
|
14
|
+
</body>
|
|
15
|
+
|
|
16
|
+
</html>
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
{{> head}}
|
|
4
|
+
|
|
5
|
+
<body>
|
|
6
|
+
<div class="i_w center">
|
|
7
|
+
<div>
|
|
8
|
+
<crowdin-card is-shadowed is-padding-lg class="login">
|
|
9
|
+
<img alt='{{ name }} logo' src='logo.png' />
|
|
10
|
+
<crowdin-h4 id="integration-name">{{ name }}</crowdin-h4>
|
|
11
|
+
{{#if oauthUrl}}
|
|
12
|
+
{{else}}
|
|
13
|
+
<div class="inputs">
|
|
14
|
+
{{#each loginFields}}
|
|
15
|
+
{{#ifeq type "checkbox"}}
|
|
16
|
+
<crowdin-checkbox
|
|
17
|
+
id="{{key}}"
|
|
18
|
+
label="{{label}}"
|
|
19
|
+
value="false"
|
|
20
|
+
use-switch
|
|
21
|
+
{{#if helpText}}
|
|
22
|
+
help-text="{{helpText}}"
|
|
23
|
+
{{/if}}
|
|
24
|
+
{{#if helpTextHtml}}
|
|
25
|
+
help-text-html="{{helpTextHtml}}"
|
|
26
|
+
{{/if}}
|
|
27
|
+
>
|
|
28
|
+
</crowdin-checkbox>
|
|
29
|
+
{{else}}
|
|
30
|
+
<crowdin-input
|
|
31
|
+
id="{{key}}"
|
|
32
|
+
label="{{label}}"
|
|
33
|
+
{{#if helpText}}
|
|
34
|
+
help-text="{{helpText}}"
|
|
35
|
+
{{/if}}
|
|
36
|
+
{{#if helpTextHtml}}
|
|
37
|
+
help-text-html="{{helpTextHtml}}"
|
|
38
|
+
{{/if}}
|
|
39
|
+
{{#if type}}
|
|
40
|
+
type="{{type}}"
|
|
41
|
+
{{/if}}
|
|
42
|
+
value="">
|
|
43
|
+
</crowdin-input>
|
|
44
|
+
{{/ifeq}}
|
|
45
|
+
{{/each}}
|
|
46
|
+
</div>
|
|
47
|
+
{{/if}}
|
|
48
|
+
<crowdin-button
|
|
49
|
+
outlined icon-after="arrow_forward"
|
|
50
|
+
{{#if oauthUrl}}
|
|
51
|
+
onclick="oauthLogin()"
|
|
52
|
+
{{else}}
|
|
53
|
+
onclick="integrationLogin()"
|
|
54
|
+
{{/if}}
|
|
55
|
+
>
|
|
56
|
+
Log In With {{ name }}
|
|
57
|
+
</crowdin-button>
|
|
58
|
+
</crowdin-card>
|
|
59
|
+
</div>
|
|
60
|
+
</div>
|
|
61
|
+
<crowdin-toasts></crowdin-toasts>
|
|
62
|
+
</body>
|
|
63
|
+
<script type="text/javascript">
|
|
64
|
+
const loginButton = document.querySelector('crowdin-button');
|
|
65
|
+
|
|
66
|
+
function oauthLogin() {
|
|
67
|
+
const url = '{{{ oauthUrl }}}';
|
|
68
|
+
const oauthWindow = window.open(url, '{{ name }}', 'location=0,status=0,width=800,height=400');
|
|
69
|
+
postPromises['oauth_popup'] = {
|
|
70
|
+
resolve: (data) => {
|
|
71
|
+
if (data.error) {
|
|
72
|
+
showToast(data.error);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
integrationLogin({
|
|
76
|
+
refreshToken: data.refreshToken,
|
|
77
|
+
accessToken: data.accessToken,
|
|
78
|
+
expireIn: data.expireIn,
|
|
79
|
+
timestamp: data.timestamp
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function integrationLogin(oauthCredentials) {
|
|
86
|
+
const credentials = oauthCredentials || {
|
|
87
|
+
{{#each loginFields}}
|
|
88
|
+
{{#ifeq type "checkbox"}}
|
|
89
|
+
'{{key}}': !!document.querySelector('#{{key}}').checked,
|
|
90
|
+
{{else}}
|
|
91
|
+
'{{key}}': document.querySelector('#{{key}}').getAttribute('value'),
|
|
92
|
+
{{/ifeq}}
|
|
93
|
+
{{/each}}
|
|
94
|
+
};
|
|
95
|
+
loginButton.setAttribute('disabled', true);
|
|
96
|
+
loginButton.setAttribute('is-loading', true);
|
|
97
|
+
checkOrigin()
|
|
98
|
+
.then(queryParams =>
|
|
99
|
+
fetch(`api/login${queryParams}`, {
|
|
100
|
+
method: 'POST',
|
|
101
|
+
headers: { 'Content-Type': 'application/json' },
|
|
102
|
+
body: JSON.stringify({ credentials })
|
|
103
|
+
})
|
|
104
|
+
)
|
|
105
|
+
.then(checkResponse)
|
|
106
|
+
.then(reloadLocation)
|
|
107
|
+
.catch(e => catchRejection(e, 'Credentials are not stored'))
|
|
108
|
+
.finally(() => {
|
|
109
|
+
loginButton.setAttribute('disabled', false);
|
|
110
|
+
loginButton.setAttribute('is-loading', false);
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
</script>
|
|
114
|
+
|
|
115
|
+
</html>
|