-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathapp.js
137 lines (110 loc) · 3.98 KB
/
app.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
/*
* (c) Copyright Ascensio System SIA 2023
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// Entry point for the app
// Express is the underlying that atlassian-connect-express uses:
// https://expressjs.com
import express from 'express';
// https://expressjs.com/en/guide/using-middleware.html
import bodyParser from 'body-parser';
import compression from 'compression';
import cookieParser from 'cookie-parser';
import errorHandler from 'errorhandler';
import morgan from 'morgan';
// atlassian-connect-express also provides a middleware
import ace from 'atlassian-connect-express';
// Use Handlebars as view engine:
// https://npmjs.org/package/express-hbs
// http://handlebarsjs.com
import hbs from 'express-hbs';
// We also need a few stock Node modules
import http from 'http';
import path from 'path';
import os from 'os';
import helmet from 'helmet';
import nocache from 'nocache';
import i18n from 'i18n';
// Routes live here; this is the C in MVC
import routes from './routes';
import { addServerSideRendering } from './server-side-rendering';
import { fileURLToPath } from 'url';
import { dirname } from 'path';
import utils from './helpers/utils';
import dotenv from 'dotenv';
dotenv.config();
// Bootstrap Express and atlassian-connect-express
const app = express();
const formats = utils.loadJSON('./resources/assets/document-formats/onlyoffice-docs-formats.json');
const addon = ace(app, {config: {docServer: {formats: formats}}});
// See config.json
const port = addon.config.port();
app.set('port', port);
// Log requests, using an appropriate formatter by env
const devEnv = app.get('env') === 'development';
app.use(morgan(devEnv ? 'dev' : 'combined'));
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
// Configure Handlebars
i18n.configure({
locales: ['de', 'en', 'es', 'fr', 'it', 'ja', 'ru'],
defaultLocale: 'en',
cookie: 'locale',
directory: path.join(__dirname, 'locales')
});
const viewsDir = path.join(__dirname, 'views');
const handlebarsEngine = hbs.express4({
partialsDir: viewsDir,
i18n: i18n
});
app.engine('hbs', handlebarsEngine);
app.set('view engine', 'hbs');
app.set('views', viewsDir);
// Configure jsx (jsx files should go in views/ and export the root component as the default export)
addServerSideRendering(app, handlebarsEngine);
// Atlassian security policy requirements
// http://go.atlassian.com/security-requirements-for-cloud-apps
// HSTS must be enabled with a minimum age of at least one year
app.use(helmet.hsts({
maxAge: 31536000,
includeSubDomains: false
}));
app.use(helmet.referrerPolicy({
policy: ['origin']
}));
// Include request parsers
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));
app.use(cookieParser());
app.use(i18n.init);
// Gzip responses when appropriate
app.use(compression());
// Include atlassian-connect-express middleware
app.use(addon.middleware());
// Mount the static files directory
const staticDir = path.join(__dirname, 'public');
app.use(express.static(staticDir));
// Atlassian security policy requirements
// http://go.atlassian.com/security-requirements-for-cloud-apps
app.use(nocache());
// Show nicer errors in dev mode
if (devEnv) app.use(errorHandler());
// Wire up routes
routes(app, addon);
// Boot the HTTP server
http.createServer(app).listen(port, () => {
console.log('App server running at http://' + os.hostname() + ':' + port);
// Enables auto registration/de-registration of app into a host in dev mode
if (devEnv) addon.register();
});