import Planka upstream
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
/**
|
||||
* Blueprint API Configuration
|
||||
* (sails.config.blueprints)
|
||||
*
|
||||
* For background on the blueprint API in Sails, check out:
|
||||
* https://sailsjs.com/docs/reference/blueprint-api
|
||||
*
|
||||
* For details and more available options, see:
|
||||
* https://sailsjs.com/config/blueprints
|
||||
*/
|
||||
|
||||
module.exports.blueprints = {
|
||||
/**
|
||||
*
|
||||
* Automatically expose implicit routes for every action in your app?
|
||||
*
|
||||
*/
|
||||
|
||||
// actions: false,
|
||||
|
||||
/**
|
||||
*
|
||||
* Automatically expose RESTful routes for your models?
|
||||
*
|
||||
*/
|
||||
|
||||
// rest: true,
|
||||
|
||||
/**
|
||||
*
|
||||
* Automatically expose CRUD "shortcut" routes to GET requests?
|
||||
* (These are enabled by default in development only.)
|
||||
*
|
||||
*/
|
||||
|
||||
shortcuts: false,
|
||||
};
|
||||
Vendored
+28
@@ -0,0 +1,28 @@
|
||||
/**
|
||||
* Seed Function
|
||||
* (sails.config.bootstrap)
|
||||
*
|
||||
* A function that runs just before your Sails app gets lifted.
|
||||
* > Need more flexibility? You can also create a hook.
|
||||
*
|
||||
* For more information on seeding your app with fake data, check out:
|
||||
* https://sailsjs.com/config/bootstrap
|
||||
*/
|
||||
|
||||
module.exports.bootstrap = async () => {
|
||||
// By convention, this is a good place to set up fake data during development.
|
||||
//
|
||||
// For example:
|
||||
// ```
|
||||
// // Set up fake development data (or if we already have some, avast)
|
||||
// if (await User.count() > 0) {
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// await User.createEach([
|
||||
// { emailAddress: 'ry@example.com', fullName: 'Ryan Dahl', },
|
||||
// { emailAddress: 'rachael@example.com', fullName: 'Rachael Shaw', },
|
||||
// // etc.
|
||||
// ]);
|
||||
// ```
|
||||
};
|
||||
@@ -0,0 +1,122 @@
|
||||
/**
|
||||
* Custom configuration
|
||||
* (sails.config.custom)
|
||||
*
|
||||
* One-off settings specific to your application.
|
||||
*
|
||||
* For more information on custom configuration, visit:
|
||||
* https://sailsjs.com/config/custom
|
||||
*/
|
||||
|
||||
const path = require('path');
|
||||
const { URL } = require('url');
|
||||
const bytes = require('bytes');
|
||||
const sails = require('sails');
|
||||
|
||||
const version = require('../version');
|
||||
|
||||
const envToNumber = (value) => {
|
||||
if (!value) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const number = parseInt(value, 10);
|
||||
return Number.isNaN(number) ? null : number;
|
||||
};
|
||||
|
||||
const envToBytes = (value) => bytes(value);
|
||||
|
||||
const envToArray = (value) => (value ? value.split(',') : []);
|
||||
|
||||
const baseUrl = envToArray(process.env.BASE_URL)[0];
|
||||
const parsedBasedUrl = new URL(baseUrl);
|
||||
|
||||
module.exports.custom = {
|
||||
/**
|
||||
*
|
||||
* Any other custom config this Sails app should use during development.
|
||||
*
|
||||
*/
|
||||
|
||||
version,
|
||||
|
||||
baseUrl,
|
||||
baseUrlPath: parsedBasedUrl.pathname.replace(/\/$/, ''), // Remove trailing slash
|
||||
baseUrlSecure: parsedBasedUrl.protocol === 'https:',
|
||||
|
||||
maxUploadFileSize: envToBytes(process.env.MAX_UPLOAD_FILE_SIZE),
|
||||
tokenExpiresIn: (parseInt(process.env.TOKEN_EXPIRES_IN, 10) || 365) * 24 * 60 * 60,
|
||||
|
||||
storageLimit: envToBytes(process.env.STORAGE_LIMIT),
|
||||
activeUsersLimit: envToNumber(process.env.ACTIVE_USERS_LIMIT),
|
||||
|
||||
// Location to receive uploaded files in. Default (non-string value) is a Sails-specific location.
|
||||
uploadsTempPath: null,
|
||||
uploadsBasePath: path.join(sails.config.appPath, 'data'),
|
||||
|
||||
faviconsPathSegment: 'protected/favicons',
|
||||
userAvatarsPathSegment: 'protected/user-avatars',
|
||||
backgroundImagesPathSegment: 'protected/background-images',
|
||||
attachmentsPathSegment: 'private/attachments',
|
||||
|
||||
defaultAdminEmail:
|
||||
process.env.DEFAULT_ADMIN_EMAIL && process.env.DEFAULT_ADMIN_EMAIL.toLowerCase(),
|
||||
|
||||
showDetailedAuthErrors: process.env.SHOW_DETAILED_AUTH_ERRORS === 'true',
|
||||
outgoingProxy: process.env.OUTGOING_PROXY,
|
||||
swaggerExposed: process.env.SWAGGER_EXPOSED === 'true',
|
||||
|
||||
s3Endpoint: process.env.S3_ENDPOINT,
|
||||
s3Region: process.env.S3_REGION,
|
||||
s3AccessKeyId: process.env.S3_ACCESS_KEY_ID,
|
||||
s3SecretAccessKey: process.env.S3_SECRET_ACCESS_KEY,
|
||||
s3Bucket: process.env.S3_BUCKET,
|
||||
s3ForcePathStyle: process.env.S3_FORCE_PATH_STYLE === 'true',
|
||||
s3RequestChecksumCalculation: process.env.S3_REQUEST_CHECKSUM_CALCULATION,
|
||||
|
||||
oidcIssuer: process.env.OIDC_ISSUER,
|
||||
oidcClientId: process.env.OIDC_CLIENT_ID,
|
||||
oidcClientSecret: process.env.OIDC_CLIENT_SECRET,
|
||||
oidcUseOauthCallback: process.env.OIDC_USE_OAUTH_CALLBACK === 'true',
|
||||
oidcIdTokenSignedResponseAlg: process.env.OIDC_ID_TOKEN_SIGNED_RESPONSE_ALG,
|
||||
oidcUserinfoSignedResponseAlg: process.env.OIDC_USERINFO_SIGNED_RESPONSE_ALG,
|
||||
oidcScopes: process.env.OIDC_SCOPES || 'openid email profile',
|
||||
oidcResponseMode: process.env.OIDC_RESPONSE_MODE || 'fragment',
|
||||
oidcUseDefaultResponseMode: process.env.OIDC_USE_DEFAULT_RESPONSE_MODE === 'true',
|
||||
oidcAdminRoles: envToArray(process.env.OIDC_ADMIN_ROLES),
|
||||
oidcProjectOwnerRoles: envToArray(process.env.OIDC_PROJECT_OWNER_ROLES),
|
||||
oidcBoardUserRoles: envToArray(process.env.OIDC_BOARD_USER_ROLES),
|
||||
oidcClaimsSource: process.env.OIDC_CLAIMS_SOURCE || 'userinfo',
|
||||
oidcEmailAttribute: process.env.OIDC_EMAIL_ATTRIBUTE || 'email',
|
||||
oidcNameAttribute: process.env.OIDC_NAME_ATTRIBUTE || 'name',
|
||||
oidcUsernameAttribute: process.env.OIDC_USERNAME_ATTRIBUTE || 'preferred_username',
|
||||
oidcRolesAttribute: process.env.OIDC_ROLES_ATTRIBUTE || 'groups',
|
||||
oidcIgnoreUsername: process.env.OIDC_IGNORE_USERNAME === 'true',
|
||||
oidcIgnoreRoles: process.env.OIDC_IGNORE_ROLES === 'true',
|
||||
oidcEnforced: process.env.OIDC_ENFORCED === 'true',
|
||||
oidcTimeout: envToNumber(process.env.OIDC_TIMEOUT),
|
||||
oidcDebug: process.env.OIDC_DEBUG === 'true',
|
||||
|
||||
// TODO: move client base url to environment variable?
|
||||
oidcRedirectUri: `${
|
||||
sails.config.environment === 'production' ? baseUrl : 'http://localhost:3000'
|
||||
}/oidc-callback`,
|
||||
|
||||
smtpHost: process.env.SMTP_HOST,
|
||||
smtpPort: process.env.SMTP_PORT || 587,
|
||||
smtpName: process.env.SMTP_NAME,
|
||||
smtpSecure: process.env.SMTP_SECURE === 'true',
|
||||
smtpTlsRejectUnauthorized: process.env.SMTP_TLS_REJECT_UNAUTHORIZED !== 'false',
|
||||
smtpUser: process.env.SMTP_USER,
|
||||
smtpPassword: process.env.SMTP_PASSWORD,
|
||||
smtpFrom: process.env.SMTP_FROM,
|
||||
|
||||
gravatarBaseUrl: process.env.GRAVATAR_BASE_URL,
|
||||
|
||||
/* Internal */
|
||||
|
||||
internalAccessToken: process.env.INTERNAL_ACCESS_TOKEN,
|
||||
termsType: process.env.TERMS_TYPE || 'custom',
|
||||
customerPanelUrl: process.env.CUSTOMER_PANEL_URL,
|
||||
demoMode: process.env.DEMO_MODE === 'true',
|
||||
};
|
||||
@@ -0,0 +1,56 @@
|
||||
/**
|
||||
* Datastores
|
||||
* (sails.config.datastores)
|
||||
*
|
||||
* A set of datastore configurations which tell Sails where to fetch or save
|
||||
* data when you execute built-in model methods like `.find()` and `.create()`.
|
||||
*
|
||||
* > This file is mainly useful for configuring your development database,
|
||||
* > as well as any additional one-off databases used by individual models.
|
||||
* > Ready to go live? Head towards `config/env/production.js`.
|
||||
*
|
||||
* For more information on configuring datastores, check out:
|
||||
* https://sailsjs.com/config/datastores
|
||||
*/
|
||||
|
||||
const pg = require('pg');
|
||||
|
||||
pg.types.setTypeParser(pg.types.builtins.TIMESTAMP, (value) => new Date(`${value}Z`));
|
||||
|
||||
module.exports.datastores = {
|
||||
/**
|
||||
*
|
||||
* Your app's default datastore.
|
||||
*
|
||||
* Sails apps read and write to local disk by default, using a built-in
|
||||
* database adapter called `sails-disk`. This feature is purely for
|
||||
* convenience during development; since `sails-disk` is not designed for
|
||||
* use in a production environment.
|
||||
*
|
||||
* To use a different db _in development_, follow the directions below.
|
||||
* Otherwise, just leave the default datastore as-is, with no `adapter`.
|
||||
*
|
||||
* (For production configuration, see `config/env/production.js`.)
|
||||
*
|
||||
*/
|
||||
|
||||
default: {
|
||||
/**
|
||||
*
|
||||
* Want to use a different database during development?
|
||||
*
|
||||
* 1. Choose an adapter:
|
||||
* https://sailsjs.com/plugins/databases
|
||||
*
|
||||
* 2. Install it as a dependency of your Sails app.
|
||||
* (For example: npm install sails-mysql --save)
|
||||
*
|
||||
* 3. Then pass it in, along with a connection URL.
|
||||
* (See https://sailsjs.com/config/datastores for help.)
|
||||
*
|
||||
*/
|
||||
|
||||
adapter: 'sails-postgresql',
|
||||
url: process.env.DATABASE_URL,
|
||||
},
|
||||
};
|
||||
+344
@@ -0,0 +1,344 @@
|
||||
/**
|
||||
* Production environment settings
|
||||
* (sails.config.*)
|
||||
*
|
||||
* What you see below is a quick outline of the built-in settings you need
|
||||
* to configure your Sails app for production. The configuration in this file
|
||||
* is only used in your production environment, i.e. when you lift your app using:
|
||||
*
|
||||
* ```
|
||||
* NODE_ENV=production node app
|
||||
* ```
|
||||
*
|
||||
* > If you're using git as a version control solution for your Sails app,
|
||||
* > this file WILL BE COMMITTED to your repository by default, unless you add
|
||||
* > it to your .gitignore file. If your repository will be publicly viewable,
|
||||
* > don't add private/sensitive data (like API secrets / db passwords) to this file!
|
||||
*
|
||||
* For more best practices and tips, see:
|
||||
* https://sailsjs.com/docs/concepts/deployment
|
||||
*/
|
||||
|
||||
const { URL } = require('url');
|
||||
|
||||
const { customLogger } = require('../../utils/logger');
|
||||
|
||||
const origins = process.env.BASE_URL.split(',').map((baseUrl) => new URL(baseUrl).origin);
|
||||
|
||||
module.exports = {
|
||||
/**
|
||||
*
|
||||
* Tell Sails what database(s) it should use in production.
|
||||
*
|
||||
* (https://sailsjs.com/config/datastores)
|
||||
*
|
||||
*/
|
||||
|
||||
datastores: {
|
||||
/**
|
||||
*
|
||||
* Configure your default production database.
|
||||
*
|
||||
* 1. Choose an adapter:
|
||||
* https://sailsjs.com/plugins/databases
|
||||
*
|
||||
* 2. Install it as a dependency of your Sails app.
|
||||
* (For example: npm install sails-mysql --save)
|
||||
*
|
||||
* 3. Then set it here (`adapter`), along with a connection URL (`url`)
|
||||
* and any other, adapter-specific customizations.
|
||||
* (See https://sailsjs.com/config/datastores for help.)
|
||||
*
|
||||
*/
|
||||
|
||||
default: {
|
||||
// adapter: 'sails-mysql',
|
||||
// url: 'mysql://user:password@host:port/database',
|
||||
/**
|
||||
*
|
||||
* More adapter-specific options
|
||||
*
|
||||
* > For example, for some hosted PostgreSQL providers (like Heroku), the
|
||||
* > extra `ssl: true` option is mandatory and must be provided.
|
||||
*
|
||||
* More info:
|
||||
* https://sailsjs.com/config/datastores
|
||||
*
|
||||
*/
|
||||
// ssl: true,
|
||||
},
|
||||
},
|
||||
|
||||
models: {
|
||||
/**
|
||||
*
|
||||
* To help avoid accidents, Sails automatically sets the automigration
|
||||
* strategy to "safe" when your app lifts in production mode.
|
||||
* (This is just here as a reminder.)
|
||||
*
|
||||
* More info:
|
||||
* https://sailsjs.com/docs/concepts/models-and-orm/model-settings#?migrate
|
||||
*
|
||||
*/
|
||||
// migrate: 'safe',
|
||||
/**
|
||||
*
|
||||
* If, in production, this app has access to physical-layer CASCADE
|
||||
* constraints (e.g. PostgreSQL or MySQL), then set those up in the
|
||||
* database and uncomment this to disable Waterline's `cascadeOnDestroy`
|
||||
* polyfill. (Otherwise, if you are using a databse like Mongo, you might
|
||||
* choose to keep this enabled.)
|
||||
*
|
||||
*/
|
||||
// cascadeOnDestroy: false,
|
||||
},
|
||||
|
||||
/**
|
||||
* Always disable "shortcut" blueprint routes.
|
||||
*
|
||||
* > You'll also want to disable any other blueprint routes if you are not
|
||||
* > actually using them (e.g. "actions" and "rest") -- but you can do
|
||||
* > that in `config/blueprints.js`, since you'll want to disable them in
|
||||
* > all environments (not just in production.)
|
||||
*
|
||||
*/
|
||||
|
||||
blueprints: {
|
||||
// shortcuts: false,
|
||||
},
|
||||
|
||||
/**
|
||||
*
|
||||
* Configure your security settings for production.
|
||||
*
|
||||
* IMPORTANT:
|
||||
* If web browsers will be communicating with your app, be sure that
|
||||
* you have CSRF protection enabled. To do that, set `csrf: true` over
|
||||
* in the `config/security.js` file (not here), so that CSRF app can be
|
||||
* tested with CSRF protection turned on in development mode too.
|
||||
*
|
||||
*/
|
||||
|
||||
security: {
|
||||
/**
|
||||
*
|
||||
* If this app has CORS enabled (see `config/security.js`) with the
|
||||
* `allowCredentials` setting enabled, then you should uncomment the
|
||||
* `allowOrigins` whitelist below. This sets which "origins" are allowed
|
||||
* to send cross-domain (CORS) requests to your Sails app.
|
||||
*
|
||||
* > Replace "https://example.com" with the URL of your production server.
|
||||
* > Be sure to use the right protocol! ("http://" vs. "https://")
|
||||
*
|
||||
*/
|
||||
|
||||
cors: {
|
||||
allRoutes: true,
|
||||
allowOrigins: origins.slice(1),
|
||||
allowRequestHeaders: ['Authorization'],
|
||||
allowCredentials: true,
|
||||
},
|
||||
},
|
||||
|
||||
/**
|
||||
*
|
||||
* Configure how your app handles sessions in production.
|
||||
*
|
||||
* (https://sailsjs.com/config/session)
|
||||
*
|
||||
* > If you have disabled the "session" hook, then you can safely remove
|
||||
* > this section from your `config/env/production.js` file.
|
||||
*
|
||||
*/
|
||||
|
||||
session: {
|
||||
/**
|
||||
*
|
||||
* Production session store configuration.
|
||||
*
|
||||
* Uncomment the following lines to finish setting up a package called
|
||||
* "@sailshq/connect-redis" that will use Redis to handle session data.
|
||||
* This makes your app more scalable by allowing you to share sessions
|
||||
* across a cluster of multiple Sails/Node.js servers and/or processes.
|
||||
* (See http://bit.ly/redis-session-config for more info.)
|
||||
*
|
||||
* > While @sailshq/connect-redis is a popular choice for Sails apps, many
|
||||
* > other compatible packages (like "connect-mongo") are available on NPM.
|
||||
* > (For a full list, see https://sailsjs.com/plugins/sessions)
|
||||
*
|
||||
*/
|
||||
|
||||
// adapter: '@sailshq/connect-redis',
|
||||
// url: 'redis://user:password@localhost:6379/databasenumber',
|
||||
|
||||
/**
|
||||
*
|
||||
* Production configuration for the session ID cookie.
|
||||
*
|
||||
* Tell browsers (or other user agents) to ensure that session ID cookies
|
||||
* are always transmitted via HTTPS, and that they expire 24 hours after
|
||||
* they are set.
|
||||
*
|
||||
* Note that with `secure: true` set, session cookies will _not_ be
|
||||
* transmitted over unsecured (HTTP) connections. Also, for apps behind
|
||||
* proxies (like Heroku), the `trustProxy` setting under `http` must be
|
||||
* configured in order for `secure: true` to work.
|
||||
*
|
||||
* > While you might want to increase or decrease the `maxAge` or provide
|
||||
* > other options, you should always set `secure: true` in production
|
||||
* > if the app is being served over HTTPS.
|
||||
*
|
||||
* Read more:
|
||||
* https://sailsjs.com/config/session#?the-session-id-cookie
|
||||
*
|
||||
*/
|
||||
|
||||
cookie: {
|
||||
// secure: true,
|
||||
maxAge: 24 * 60 * 60 * 1000, // 24 hours
|
||||
},
|
||||
},
|
||||
|
||||
/**
|
||||
*
|
||||
* Set up Socket.io for your production environment.
|
||||
*
|
||||
* (https://sailsjs.com/config/sockets)
|
||||
*
|
||||
* > If you have disabled the "sockets" hook, then you can safely remove
|
||||
* > this section from your `config/env/production.js` file.
|
||||
*
|
||||
*/
|
||||
|
||||
sockets: {
|
||||
/**
|
||||
*
|
||||
* Uncomment the `onlyAllowOrigins` whitelist below to configure which
|
||||
* "origins" are allowed to open socket connections to your Sails app.
|
||||
*
|
||||
* > Replace "https://example.com" etc. with the URL(s) of your app.
|
||||
* > Be sure to use the right protocol! ("http://" vs. "https://")
|
||||
*
|
||||
*/
|
||||
|
||||
onlyAllowOrigins: origins,
|
||||
|
||||
/**
|
||||
*
|
||||
* If you are deploying a cluster of multiple servers and/or processes,
|
||||
* then uncomment the following lines. This tells Socket.io about a Redis
|
||||
* server it can use to help it deliver broadcasted socket messages.
|
||||
*
|
||||
* > Be sure a compatible version of @sailshq/socket.io-redis is installed!
|
||||
* > (See https://sailsjs.com/config/sockets for the latest version info)
|
||||
*
|
||||
* (https://sailsjs.com/docs/concepts/deployment/scaling)
|
||||
*
|
||||
*/
|
||||
|
||||
// adapter: '@sailshq/socket.io-redis',
|
||||
// url: 'redis://user:password@bigsquid.redistogo.com:9562/databasenumber',
|
||||
},
|
||||
|
||||
/**
|
||||
*
|
||||
* Set the production log level.
|
||||
*
|
||||
* (https://sailsjs.com/config/log)
|
||||
*
|
||||
*/
|
||||
|
||||
log: {
|
||||
/**
|
||||
* Passthrough plain log message(s) to
|
||||
* custom Winston console and file logger.
|
||||
*
|
||||
* Note that Winston's log levels override Sails' log levels.
|
||||
* Refer: https://github.com/winstonjs/winston#logging
|
||||
*/
|
||||
|
||||
inspect: false,
|
||||
custom: customLogger,
|
||||
|
||||
/**
|
||||
* Removes the Sail.js init success logs (ASCII ship art).
|
||||
*/
|
||||
|
||||
noShip: true,
|
||||
},
|
||||
|
||||
http: {
|
||||
/**
|
||||
*
|
||||
* The number of milliseconds to cache static assets in production.
|
||||
* (the "max-age" to include in the "Cache-Control" response header)
|
||||
*
|
||||
*/
|
||||
|
||||
cache: 365.25 * 24 * 60 * 60 * 1000, // One year
|
||||
|
||||
/**
|
||||
*
|
||||
* Proxy settings
|
||||
*
|
||||
* If your app will be deployed behind a proxy/load balancer - for example,
|
||||
* on a PaaS like Heroku - then uncomment the `trustProxy` setting below.
|
||||
* This tells Sails/Express how to interpret X-Forwarded headers.
|
||||
*
|
||||
* This setting is especially important if you are using secure cookies
|
||||
* (see the `cookies: secure` setting under `session` above) or if your app
|
||||
* relies on knowing the original IP address that a request came from.
|
||||
*
|
||||
* (https://sailsjs.com/config/http)
|
||||
*
|
||||
*/
|
||||
|
||||
trustProxy: process.env.TRUST_PROXY === 'true',
|
||||
},
|
||||
|
||||
/**
|
||||
*
|
||||
* Lift the server on port 80.
|
||||
* (if deploying behind a proxy, or to a PaaS like Heroku or Deis, you
|
||||
* probably don't need to set a port here, because it is oftentimes
|
||||
* handled for you automatically. If you are not sure if you need to set
|
||||
* this, just try deploying without setting it and see if it works.)
|
||||
*
|
||||
*/
|
||||
|
||||
// port: 80,
|
||||
|
||||
/**
|
||||
*
|
||||
* Configure an SSL certificate
|
||||
*
|
||||
* For the safety of your users' data, you should use SSL in production.
|
||||
* ...But in many cases, you may not actually want to set it up _here_.
|
||||
*
|
||||
* Normally, this setting is only relevant when running a single-process
|
||||
* deployment, with no proxy/load balancer in the mix. But if, on the
|
||||
* other hand, you are using a PaaS like Heroku, you'll want to set up
|
||||
* SSL in your load balancer settings (usually somewhere in your hosting
|
||||
* provider's dashboard-- not here.)
|
||||
*
|
||||
* > For more information about configuring SSL in Sails, see:
|
||||
* > https://sailsjs.com/config/*#?sailsconfigssl
|
||||
*
|
||||
*/
|
||||
|
||||
// ssl: undefined,
|
||||
|
||||
/**
|
||||
*
|
||||
* Production overrides for any custom settings specific to your app.
|
||||
* (for example, production credentials for 3rd party APIs like Stripe)
|
||||
*
|
||||
* > See config/custom.js for more info on how to configure these options.
|
||||
*
|
||||
*/
|
||||
|
||||
custom: {
|
||||
// baseUrl: 'https://example.com',
|
||||
// internalEmailAddress: 'support@example.com',
|
||||
},
|
||||
};
|
||||
Vendored
+70
@@ -0,0 +1,70 @@
|
||||
/**
|
||||
* Test environment settings
|
||||
* (sails.config.*)
|
||||
*
|
||||
* What you see below is a quick outline of the built-in settings you need
|
||||
* to configure your Sails app for test. The configuration in this file
|
||||
* is only used in your test environment, i.e. when you lift your app using:
|
||||
*
|
||||
* ```
|
||||
* NODE_ENV=test node app
|
||||
* ```
|
||||
*
|
||||
* > If you're using git as a version control solution for your Sails app,
|
||||
* > this file WILL BE COMMITTED to your repository by default, unless you add
|
||||
* > it to your .gitignore file. If your repository will be publicly viewable,
|
||||
* > don't add private/sensitive data (like API secrets / db passwords) to this file!
|
||||
*
|
||||
* For more best practices and tips, see:
|
||||
* https://sailsjs.com/docs/concepts/deployment
|
||||
*/
|
||||
|
||||
module.exports = {
|
||||
/**
|
||||
*
|
||||
* Tell Sails what database(s) it should use in test.
|
||||
*
|
||||
* (https://sailsjs.com/config/datastores)
|
||||
*
|
||||
*/
|
||||
|
||||
datastores: {
|
||||
/**
|
||||
*
|
||||
* Configure your default test database.
|
||||
*
|
||||
* 1. Choose an adapter:
|
||||
* https://sailsjs.com/plugins/databases
|
||||
*
|
||||
* 2. Install it as a dependency of your Sails app.
|
||||
* (For example: npm install sails-mysql --save)
|
||||
*
|
||||
* 3. Then set it here (`adapter`), along with a connection URL (`url`)
|
||||
* and any other, adapter-specific customizations.
|
||||
* (See https://sailsjs.com/config/datastores for help.)
|
||||
*
|
||||
*/
|
||||
|
||||
default: {
|
||||
adapter: 'sails-disk',
|
||||
|
||||
/**
|
||||
*
|
||||
* More adapter-specific options
|
||||
*
|
||||
* > For example, for some hosted PostgreSQL providers (like Heroku), the
|
||||
* > extra `ssl: true` option is mandatory and must be provided.
|
||||
*
|
||||
* More info:
|
||||
* https://sailsjs.com/config/datastores
|
||||
*
|
||||
*/
|
||||
|
||||
inMemoryOnly: true,
|
||||
},
|
||||
},
|
||||
|
||||
log: {
|
||||
level: 'warn',
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,50 @@
|
||||
/**
|
||||
* Global Variable Configuration
|
||||
* (sails.config.globals)
|
||||
*
|
||||
* Configure which global variables which will be exposed
|
||||
* automatically by Sails.
|
||||
*
|
||||
* For more information on any of these options, check out:
|
||||
* https://sailsjs.com/config/globals
|
||||
*/
|
||||
|
||||
module.exports.globals = {
|
||||
/**
|
||||
*
|
||||
* Whether to expose the locally-installed Lodash as a global variable
|
||||
* (`_`), making it accessible throughout your app.
|
||||
*
|
||||
*/
|
||||
|
||||
_: require('lodash'), // eslint-disable-line global-require
|
||||
|
||||
/**
|
||||
*
|
||||
* This app was generated without a dependency on the "async" NPM package.
|
||||
*
|
||||
* > Don't worry! This is totally unrelated to JavaScript's "async/await".
|
||||
* > Your code can (and probably should) use `await` as much as possible.
|
||||
*
|
||||
*/
|
||||
|
||||
async: false,
|
||||
|
||||
/**
|
||||
*
|
||||
* Whether to expose each of your app's models as global variables.
|
||||
* (See the link at the top of this file for more information.)
|
||||
*
|
||||
*/
|
||||
|
||||
models: true,
|
||||
|
||||
/**
|
||||
*
|
||||
* Whether to expose the Sails app instance as a global variable (`sails`),
|
||||
* making it accessible throughout your app.
|
||||
*
|
||||
*/
|
||||
|
||||
sails: true,
|
||||
};
|
||||
@@ -0,0 +1,66 @@
|
||||
/**
|
||||
* HTTP Server Settings
|
||||
* (sails.config.http)
|
||||
*
|
||||
* Configuration for the underlying HTTP server in Sails.
|
||||
* (for additional recommended settings, see `config/env/production.js`)
|
||||
*
|
||||
* For more information on configuration, check out:
|
||||
* https://sailsjs.com/config/http
|
||||
*/
|
||||
|
||||
const serveStatic = require('serve-static');
|
||||
const sails = require('sails');
|
||||
|
||||
module.exports.http = {
|
||||
/**
|
||||
*
|
||||
* Sails/Express middleware to run for every HTTP request.
|
||||
* (Only applies to HTTP requests -- not virtual WebSocket requests.)
|
||||
*
|
||||
* https://sailsjs.com/documentation/concepts/middleware
|
||||
*
|
||||
*/
|
||||
|
||||
middleware: {
|
||||
/**
|
||||
*
|
||||
* The order in which middleware should be run for HTTP requests.
|
||||
* (This Sails app's routes are handled by the "router" middleware below.)
|
||||
*
|
||||
*/
|
||||
// order: [
|
||||
// 'cookieParser',
|
||||
// 'session',
|
||||
// 'bodyParser',
|
||||
// 'compress',
|
||||
// 'poweredBy',
|
||||
// 'router',
|
||||
// 'www',
|
||||
// 'favicon',
|
||||
// ],
|
||||
/**
|
||||
*
|
||||
* The body parser that will handle incoming multipart HTTP requests.
|
||||
*
|
||||
* https://sailsjs.com/config/http#?customizing-the-body-parser
|
||||
*
|
||||
*/
|
||||
// bodyParser: (function _configureBodyParser(){
|
||||
// var skipper = require('skipper');
|
||||
// var middlewareFn = skipper({ strict: true });
|
||||
// return middlewareFn;
|
||||
// })(),
|
||||
|
||||
poweredBy: false,
|
||||
|
||||
www(req, res, next) {
|
||||
const middleware = serveStatic(sails.config.paths.public, {
|
||||
maxAge: sails.config.http.cache,
|
||||
immutable: req.url.startsWith('/assets/'),
|
||||
});
|
||||
|
||||
return middleware(req, res, next);
|
||||
},
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,79 @@
|
||||
/**
|
||||
* Internationalization / Localization Settings
|
||||
* (sails.config.i18n)
|
||||
*
|
||||
* If your app will touch people from all over the world, i18n (or internationalization)
|
||||
* may be an important part of your international strategy.
|
||||
*
|
||||
* For a complete list of options for Sails' built-in i18n support, see:
|
||||
* https://sailsjs.com/config/i-18-n
|
||||
*
|
||||
* For more info on i18n in Sails in general, check out:
|
||||
* https://sailsjs.com/docs/concepts/internationalization
|
||||
*/
|
||||
|
||||
module.exports.i18n = {
|
||||
/**
|
||||
*
|
||||
* Which locales are supported?
|
||||
*
|
||||
*/
|
||||
|
||||
locales: [
|
||||
'ar-YE',
|
||||
'bg-BG',
|
||||
'ca-ES',
|
||||
'cs-CZ',
|
||||
'da-DK',
|
||||
'de-DE',
|
||||
'el-GR',
|
||||
'en-GB',
|
||||
'en-US',
|
||||
'es-ES',
|
||||
'et-EE',
|
||||
'fa-IR',
|
||||
'fi-FI',
|
||||
'fr-FR',
|
||||
'hu-HU',
|
||||
'id-ID',
|
||||
'it-IT',
|
||||
'ja-JP',
|
||||
'ko-KR',
|
||||
'nl-NL',
|
||||
'pl-PL',
|
||||
'pt-BR',
|
||||
'pt-PT',
|
||||
'ro-RO',
|
||||
'ru-RU',
|
||||
'sk-SK',
|
||||
'sr-Cyrl-RS',
|
||||
'sr-Latn-RS',
|
||||
'sv-SE',
|
||||
'tr-TR',
|
||||
'uk-UA',
|
||||
'uz-UZ',
|
||||
'vi-VN',
|
||||
'zh-CN',
|
||||
'zh-TW',
|
||||
],
|
||||
|
||||
/**
|
||||
*
|
||||
* What is the default locale for the site? Note that this setting will be
|
||||
* overridden for any request that sends an "Accept-Language" header (i.e.
|
||||
* most browsers), but it's still useful if you need to localize the
|
||||
* response for requests made by non-browser clients (e.g. cURL).
|
||||
*
|
||||
*/
|
||||
|
||||
defaultLocale: process.env.DEFAULT_LANGUAGE || 'en-US',
|
||||
|
||||
/**
|
||||
*
|
||||
* Path (relative to app root) of directory to store locale (translation)
|
||||
* files in.
|
||||
*
|
||||
*/
|
||||
|
||||
// localesDirectory: 'config/locales',
|
||||
};
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"Archive": "أرشيف",
|
||||
"Card Created": "تم إنشاء البطاقة",
|
||||
"Card Moved": "تم نقل البطاقة",
|
||||
"copy": "نسخة",
|
||||
"New Comment": "تعليق جديد",
|
||||
"Test Title": "عنوان تجريبي",
|
||||
"This is a test text message!": "هذه رسالة نصية تجريبية!",
|
||||
"This is a *test* **markdown** `message`!": "هذه *رسالة* **markdown** `تجريبية`!",
|
||||
"This is a <i>test</i> <b>html</b> <code>message</code>!": "هذه <i>رسالة</i> <b>html</b> <code>تجريبية</code>!",
|
||||
"Trash": "سلة المهملات",
|
||||
"You Were Added to Card": "تمت إضافتك إلى البطاقة",
|
||||
"You Were Mentioned in Comment": "تم ذكرك في تعليق",
|
||||
"%s added you to %s on %s": "%s أضافك إلى %s في %s",
|
||||
"%s created %s in %s on %s": "%s أنشأ %s في %s في %s",
|
||||
"%s left a new comment to %s on %s": "%s ترك تعليقاً جديداً على %s في %s",
|
||||
"%s mentioned you in %s on %s": "%s ذكرك في %s في %s",
|
||||
"%s moved %s from %s to %s on %s": "%s نقل %s من %s إلى %s في %s"
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"Archive": "Архив",
|
||||
"Card Created": "Картата е създадена",
|
||||
"Card Moved": "Картата е преместена",
|
||||
"copy": "копие",
|
||||
"New Comment": "Нов коментар",
|
||||
"Test Title": "Тестово заглавие",
|
||||
"This is a test text message!": "Това е тестово текстово съобщение!",
|
||||
"This is a *test* **markdown** `message`!": "Това е *тестово* **markdown** `съобщение`!",
|
||||
"This is a <i>test</i> <b>html</b> <code>message</code>!": "Това е <i>тестово</i> <b>html</b> <code>съобщение</code>!",
|
||||
"Trash": "Кошче",
|
||||
"You Were Added to Card": "Бяхте добавени към картата",
|
||||
"You Were Mentioned in Comment": "Бяхте споменати в коментар",
|
||||
"%s added you to %s on %s": "%s ви добави към %s на %s",
|
||||
"%s created %s in %s on %s": "%s създаде %s в %s на %s",
|
||||
"%s left a new comment to %s on %s": "%s остави нов коментар към %s на %s",
|
||||
"%s mentioned you in %s on %s": "%s ви спомена в %s на %s",
|
||||
"%s moved %s from %s to %s on %s": "%s премести %s от %s към %s на %s"
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"Archive": "Arxivar",
|
||||
"Card Created": "Targeta creada",
|
||||
"Card Moved": "Targeta moguda",
|
||||
"copy": "còpia",
|
||||
"New Comment": "Comentari nou",
|
||||
"Test Title": "Títol de prova",
|
||||
"This is a test text message!": "Aquest és un missatge de text de prova!",
|
||||
"This is a *test* **markdown** `message`!": "Aquest és un *missatge* **markdown** `de prova`!",
|
||||
"This is a <i>test</i> <b>html</b> <code>message</code>!": "Aquest és un <i>missatge</i> <b>html</b> <code>de prova</code>!",
|
||||
"Trash": "Paperera",
|
||||
"You Were Added to Card": "Has estat afegit a la targeta",
|
||||
"You Were Mentioned in Comment": "Has estat mencionat en un comentari",
|
||||
"%s added you to %s on %s": "%s t'ha afegit a %s el %s",
|
||||
"%s created %s in %s on %s": "%s s'ha creat %s a %s el %s",
|
||||
"%s left a new comment to %s on %s": "%s ha deixat un comentari nou a %s el %s",
|
||||
"%s mentioned you in %s on %s": "%s t'ha mencionat a %s el %s",
|
||||
"%s moved %s from %s to %s on %s": "%s s'ha mogut %s de %s a %s el %s"
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"Archive": "Archiv",
|
||||
"Card Created": "Karta vytvořena",
|
||||
"Card Moved": "Karta přesunuta",
|
||||
"copy": "kopie",
|
||||
"New Comment": "Nový komentář",
|
||||
"Test Title": "Testovací název",
|
||||
"This is a test text message!": "Toto je testovací textová zpráva!",
|
||||
"This is a *test* **markdown** `message`!": "Toto je *testovací* **markdown** `zpráva`!",
|
||||
"This is a <i>test</i> <b>html</b> <code>message</code>!": "Toto je <i>testovací</i> <b>html</b> <code>zpráva</code>!",
|
||||
"Trash": "Koš",
|
||||
"You Were Added to Card": "Byli jste přidáni ke kartě",
|
||||
"You Were Mentioned in Comment": "Byli jste zmíněni v komentáři",
|
||||
"%s added you to %s on %s": "%s vás přidal k %s dne %s",
|
||||
"%s created %s in %s on %s": "%s vytvořil %s v %s dne %s",
|
||||
"%s left a new comment to %s on %s": "%s zanechal nový komentář k %s dne %s",
|
||||
"%s mentioned you in %s on %s": "%s vás zmínil v %s dne %s",
|
||||
"%s moved %s from %s to %s on %s": "%s přesunul %s z %s do %s dne %s"
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"Archive": "Arkiv",
|
||||
"Card Created": "Kort oprettet",
|
||||
"Card Moved": "Kort flyttet",
|
||||
"copy": "kopi",
|
||||
"New Comment": "Ny kommentar",
|
||||
"Test Title": "Test titel",
|
||||
"This is a test text message!": "Dette er en test tekstbesked!",
|
||||
"This is a *test* **markdown** `message`!": "Dette er en *test* **markdown** `besked`!",
|
||||
"This is a <i>test</i> <b>html</b> <code>message</code>!": "Dette er en <i>test</i> <b>html</b> <code>besked</code>!",
|
||||
"Trash": "Papirkurv",
|
||||
"You Were Added to Card": "Du blev tilføjet til kortet",
|
||||
"You Were Mentioned in Comment": "Du blev nævnt i en kommentar",
|
||||
"%s added you to %s on %s": "%s tilføjede dig til %s den %s",
|
||||
"%s created %s in %s on %s": "%s oprettede %s i %s den %s",
|
||||
"%s left a new comment to %s on %s": "%s efterlod en ny kommentar til %s den %s",
|
||||
"%s mentioned you in %s on %s": "%s nævnte dig i %s den %s",
|
||||
"%s moved %s from %s to %s on %s": "%s flyttede %s fra %s til %s den %s"
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"Archive": "Archiv",
|
||||
"Card Created": "Karte erstellt",
|
||||
"Card Moved": "Karte verschoben",
|
||||
"copy": "Kopie",
|
||||
"New Comment": "Neuer Kommentar",
|
||||
"Test Title": "Testtitel",
|
||||
"This is a test text message!": "Dies ist eine Test-Textnachricht!",
|
||||
"This is a *test* **markdown** `message`!": "Dies ist eine *Test*-**Markdown**-`Nachricht`!",
|
||||
"This is a <i>test</i> <b>html</b> <code>message</code>!": "Dies ist eine <i>Test</i>-<b>HTML</b>-<code>Nachricht</code>!",
|
||||
"Trash": "Papierkorb",
|
||||
"You Were Added to Card": "Sie wurden zur Karte hinzugefügt",
|
||||
"You Were Mentioned in Comment": "Sie wurden in einem Kommentar erwähnt",
|
||||
"%s added you to %s on %s": "%s hat Sie zur Karte %s auf dem Board %s hinzugefügt",
|
||||
"%s created %s in %s on %s": "%s hat die Karte %s in der Liste %s auf dem Board %s erstellt",
|
||||
"%s left a new comment to %s on %s": "%s hat einen neuen Kommentar zur Karte %s auf dem Board %s hinterlassen",
|
||||
"%s mentioned you in %s on %s": "%s hat Sie in der Karte %s auf dem Board %s erwähnt",
|
||||
"%s moved %s from %s to %s on %s": "%s hat die Karte %s von der Liste %s in die Liste %s auf dem Board %s verschoben"
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"Archive": "Αρχείο",
|
||||
"Card Created": "Η κάρτα δημιουργήθηκε",
|
||||
"Card Moved": "Η κάρτα μετακινήθηκε",
|
||||
"copy": "αντίγραφο",
|
||||
"New Comment": "Νέο σχόλιο",
|
||||
"Test Title": "Τίτλος δοκιμής",
|
||||
"This is a test text message!": "Αυτό είναι ένα δοκιμαστικό μήνυμα!",
|
||||
"This is a *test* **markdown** `message`!": "Αυτό είναι ένα *δοκιμαστικό* **markdown** `μήνυμα`!",
|
||||
"This is a <i>test</i> <b>html</b> <code>message</code>!": "Αυτό είναι ένα <i>δοκιμαστικό</i> <b>html</b> <code>μήνυμα</code>!",
|
||||
"Trash": "Κάδος απορριμμάτων",
|
||||
"You Were Added to Card": "Προστέθηκες στην κάρτα",
|
||||
"You Were Mentioned in Comment": "Αναφέρθηκες σε σχόλιο",
|
||||
"%s added you to %s on %s": "%s σε πρόσθεσε στο %s στο %s",
|
||||
"%s created %s in %s on %s": "%s δημιούργησε το %s στο %s στο %s",
|
||||
"%s left a new comment to %s on %s": "%s άφησε νέο σχόλιο στο %s στο %s",
|
||||
"%s mentioned you in %s on %s": "%s σε ανέφερε στο %s στο %s",
|
||||
"%s moved %s from %s to %s on %s": "%s μετακίνησε το %s από το %s στο %s στο %s"
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"Archive": "Archive",
|
||||
"Card Created": "Card Created",
|
||||
"Card Moved": "Card Moved",
|
||||
"copy": "copy",
|
||||
"New Comment": "New Comment",
|
||||
"Test Title": "Test Title",
|
||||
"This is a test text message!": "This is a test text message!",
|
||||
"This is a *test* **markdown** `message`!": "This is a *test* **markdown** `message`!",
|
||||
"This is a <i>test</i> <b>html</b> <code>message</code>!": "This is a <i>test</i> <b>html</b> <code>message</code>!",
|
||||
"Trash": "Trash",
|
||||
"You Were Added to Card": "You Were Added to Card",
|
||||
"You Were Mentioned in Comment": "You Were Mentioned in Comment",
|
||||
"%s added you to %s on %s": "%s added you to %s on %s",
|
||||
"%s created %s in %s on %s": "%s created %s in %s on %s",
|
||||
"%s left a new comment to %s on %s": "%s left a new comment to %s on %s",
|
||||
"%s mentioned you in %s on %s": "%s mentioned you in %s on %s",
|
||||
"%s moved %s from %s to %s on %s": "%s moved %s from %s to %s on %s"
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"Archive": "Archive",
|
||||
"Card Created": "Card Created",
|
||||
"Card Moved": "Card Moved",
|
||||
"copy": "copy",
|
||||
"New Comment": "New Comment",
|
||||
"Test Title": "Test Title",
|
||||
"This is a test text message!": "This is a test text message!",
|
||||
"This is a *test* **markdown** `message`!": "This is a *test* **markdown** `message`!",
|
||||
"This is a <i>test</i> <b>html</b> <code>message</code>!": "This is a <i>test</i> <b>html</b> <code>message</code>!",
|
||||
"Trash": "Trash",
|
||||
"You Were Added to Card": "You Were Added to Card",
|
||||
"You Were Mentioned in Comment": "You Were Mentioned in Comment",
|
||||
"%s added you to %s on %s": "%s added you to %s on %s",
|
||||
"%s created %s in %s on %s": "%s created %s in %s on %s",
|
||||
"%s left a new comment to %s on %s": "%s left a new comment to %s on %s",
|
||||
"%s mentioned you in %s on %s": "%s mentioned you in %s on %s",
|
||||
"%s moved %s from %s to %s on %s": "%s moved %s from %s to %s on %s"
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"Archive": "Archivo",
|
||||
"Card Created": "Tarjeta creada",
|
||||
"Card Moved": "Tarjeta movida",
|
||||
"copy": "copia",
|
||||
"New Comment": "Nuevo comentario",
|
||||
"Test Title": "Título de prueba",
|
||||
"This is a test text message!": "¡Este es un mensaje de texto de prueba!",
|
||||
"This is a *test* **markdown** `message`!": "¡Este es un *mensaje* **markdown** `de prueba`!",
|
||||
"This is a <i>test</i> <b>html</b> <code>message</code>!": "¡Este es un <i>mensaje</i> <b>html</b> <code>de prueba</code>!",
|
||||
"Trash": "Papelera",
|
||||
"You Were Added to Card": "Fuiste añadido a la tarjeta",
|
||||
"You Were Mentioned in Comment": "Fuiste mencionado en un comentario",
|
||||
"%s added you to %s on %s": "%s te añadió a %s en %s",
|
||||
"%s created %s in %s on %s": "%s creó %s en %s el %s",
|
||||
"%s left a new comment to %s on %s": "%s dejó un nuevo comentario en %s el %s",
|
||||
"%s mentioned you in %s on %s": "%s te mencionó en %s el %s",
|
||||
"%s moved %s from %s to %s on %s": "%s movió %s de %s a %s el %s"
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"Archive": "Arhiiv",
|
||||
"Card Created": "Kaart loodud",
|
||||
"Card Moved": "Kaart liigutatud",
|
||||
"copy": "koopia",
|
||||
"New Comment": "Uus kommentaar",
|
||||
"Test Title": "Testi pealkiri",
|
||||
"This is a test text message!": "See on testi tekstisõnum!",
|
||||
"This is a *test* **markdown** `message`!": "See on *testi* **markdown** `sõnum`!",
|
||||
"This is a <i>test</i> <b>html</b> <code>message</code>!": "See on <i>testi</i> <b>html</b> <code>sõnum</code>!",
|
||||
"Trash": "Prügikast",
|
||||
"You Were Added to Card": "Teid lisati kaardile",
|
||||
"You Were Mentioned in Comment": "Teid mainiti kommentaaris",
|
||||
"%s added you to %s on %s": "%s lisas teid %s-le %s",
|
||||
"%s created %s in %s on %s": "%s lõi %s %s-s %s",
|
||||
"%s left a new comment to %s on %s": "%s jättis uue kommentaari %s-le %s",
|
||||
"%s mentioned you in %s on %s": "%s mainis teid %s-s %s",
|
||||
"%s moved %s from %s to %s on %s": "%s liigutas %s %s-st %s-sse %s"
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"Archive": "بایگانی",
|
||||
"Card Created": "کارت ایجاد شد",
|
||||
"Card Moved": "کارت منتقل شد",
|
||||
"copy": "کپی",
|
||||
"New Comment": "نظر جدید",
|
||||
"Test Title": "عنوان آزمایشی",
|
||||
"This is a test text message!": "این یک پیام متنی آزمایشی است!",
|
||||
"This is a *test* **markdown** `message`!": "این یک *پیام* **markdown** `آزمایشی` است!",
|
||||
"This is a <i>test</i> <b>html</b> <code>message</code>!": "این یک <i>پیام</i> <b>html</b> <code>آزمایشی</code> است!",
|
||||
"Trash": "سطل زباله",
|
||||
"You Were Added to Card": "شما به کارت اضافه شدید",
|
||||
"You Were Mentioned in Comment": "در نظری از شما نام برده شد",
|
||||
"%s added you to %s on %s": "%s شما را به %s در %s اضافه کرد",
|
||||
"%s created %s in %s on %s": "%s ایجاد کرد %s در %s در %s",
|
||||
"%s left a new comment to %s on %s": "%s نظر جدیدی برای %s در %s گذاشت",
|
||||
"%s mentioned you in %s on %s": "%s از شما در %s در %s نام برد",
|
||||
"%s moved %s from %s to %s on %s": "%s منتقل کرد %s از %s به %s در %s"
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"Archive": "Arkisto",
|
||||
"Card Created": "Kortti luotu",
|
||||
"Card Moved": "Kortti siirretty",
|
||||
"copy": "kopio",
|
||||
"New Comment": "Uusi kommentti",
|
||||
"Test Title": "Testin otsikko",
|
||||
"This is a test text message!": "Tämä on testiviesti!",
|
||||
"This is a *test* **markdown** `message`!": "Tämä on *testi* **markdown** `viesti`!",
|
||||
"This is a <i>test</i> <b>html</b> <code>message</code>!": "Tämä on <i>testi</i> <b>html</b> <code>viesti</code>!",
|
||||
"Trash": "Roskakori",
|
||||
"You Were Added to Card": "Sinut lisättiin korttiin",
|
||||
"You Were Mentioned in Comment": "Sinut mainittiin kommentissa",
|
||||
"%s added you to %s on %s": "%s lisäsi sinut kohteeseen %s kohteessa %s",
|
||||
"%s created %s in %s on %s": "%s loi %s kohteessa %s kohteessa %s",
|
||||
"%s left a new comment to %s on %s": "%s jätti uuden kommentin kohteeseen %s kohteessa %s",
|
||||
"%s mentioned you in %s on %s": "%s mainitsi sinut kohteessa %s kohteessa %s",
|
||||
"%s moved %s from %s to %s on %s": "%s siirsi %s kohteesta %s kohteeseen %s kohteessa %s"
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"Archive": "Archive",
|
||||
"Card Created": "Carte créée",
|
||||
"Card Moved": "Carte déplacée",
|
||||
"copy": "copie",
|
||||
"New Comment": "Nouveau commentaire",
|
||||
"Test Title": "Titre de test",
|
||||
"This is a test text message!": "Ceci est un message texte de test !",
|
||||
"This is a *test* **markdown** `message`!": "Ceci est un *message* **markdown** `de test` !",
|
||||
"This is a <i>test</i> <b>html</b> <code>message</code>!": "Ceci est un <i>test</i> <b>html</b> <code>message</code>!",
|
||||
"Trash": "Corbeille",
|
||||
"You Were Added to Card": "Vous avez été ajouté à la carte",
|
||||
"You Were Mentioned in Comment": "Vous avez été mentionné dans un commentaire",
|
||||
"%s added you to %s on %s": "%s vous a ajouté à %s le %s",
|
||||
"%s created %s in %s on %s": "%s a créé %s dans %s le %s",
|
||||
"%s left a new comment to %s on %s": "%s a laissé un nouveau commentaire sur %s le %s",
|
||||
"%s mentioned you in %s on %s": "%s vous a mentionné dans %s le %s",
|
||||
"%s moved %s from %s to %s on %s": "%s a déplacé %s de %s vers %s le %s"
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"Archive": "Archívum",
|
||||
"Card Created": "Kártya létrehozva",
|
||||
"Card Moved": "Kártya áthelyezve",
|
||||
"copy": "másolat",
|
||||
"New Comment": "Új hozzászólás",
|
||||
"Test Title": "Teszt cím",
|
||||
"This is a test text message!": "Ez itt egy szöveges teszt üzenet!",
|
||||
"This is a *test* **markdown** `message`!": "Ez itt egy **markdown** formátumú *teszt* `üzenet`!",
|
||||
"This is a <i>test</i> <b>html</b> <code>message</code>!": "Ez egy <b>html</b> formátumú <i>teszt</i> <code>üzenet</code>!",
|
||||
"Trash": "Kuka",
|
||||
"You Were Added to Card": "Hozzádrendeltek egy kártyát",
|
||||
"You Were Mentioned in Comment": "Megemlítettek egy kártyán",
|
||||
"%s added you to %s on %s": "%s hozzárendelt téged a(z) %s kártyához a(z) %s projektben",
|
||||
"%s created %s in %s on %s": "%s létrehozta a(z) %s kártyát a(z) %s projektben ekkor: %s",
|
||||
"%s left a new comment to %s on %s": "%s hozzászólt a(z) %s kártyához a(z) %s projektben",
|
||||
"%s mentioned you in %s on %s": "%s megemlített téged a(z) %s kártyán a(z) %s projektben",
|
||||
"%s moved %s from %s to %s on %s": "%s átmozgatta a(z) %s kártyát a(z) %s projektből a(z) %s projektbe ekkor: %s"
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"Archive": "Arsip",
|
||||
"Card Created": "Kartu dibuat",
|
||||
"Card Moved": "Kartu dipindahkan",
|
||||
"copy": "salinan",
|
||||
"New Comment": "Komentar baru",
|
||||
"Test Title": "Judul tes",
|
||||
"This is a test text message!": "Ini adalah pesan teks tes!",
|
||||
"This is a *test* **markdown** `message`!": "Ini adalah *pesan* **markdown** `tes`!",
|
||||
"This is a <i>test</i> <b>html</b> <code>message</code>!": "Ini adalah <i>pesan</i> <b>html</b> <code>tes</code>!",
|
||||
"Trash": "Sampah",
|
||||
"You Were Added to Card": "Anda ditambahkan ke kartu",
|
||||
"You Were Mentioned in Comment": "Anda disebutkan dalam komentar",
|
||||
"%s added you to %s on %s": "%s menambahkan Anda ke %s pada %s",
|
||||
"%s created %s in %s on %s": "%s membuat %s di %s pada %s",
|
||||
"%s left a new comment to %s on %s": "%s meninggalkan komentar baru untuk %s pada %s",
|
||||
"%s mentioned you in %s on %s": "%s menyebutkan Anda di %s pada %s",
|
||||
"%s moved %s from %s to %s on %s": "%s memindahkan %s dari %s ke %s pada %s"
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"Archive": "Archivio",
|
||||
"Card Created": "Nuova task creata",
|
||||
"Card Moved": "Task spostata",
|
||||
"copy": "copia",
|
||||
"New Comment": "Nuovo commento",
|
||||
"Test Title": "Titolo di test",
|
||||
"This is a test text message!": "Questo è un messaggio di testo di test!",
|
||||
"This is a *test* **markdown** `message`!": "Questo è un *test* **markdown** `messaggio`!",
|
||||
"This is a <i>test</i> <b>html</b> <code>message</code>!": "Questo è un <i>test</i> <b>html</b> <code>messaggio</code>!",
|
||||
"Trash": "Cestino",
|
||||
"You Were Added to Card": "Sei stato aggiunto alla task",
|
||||
"You Were Mentioned in Comment": "Sei stato menzionato nel commento",
|
||||
"%s created %s in %s on %s": "%s ha creato %s in %s in %s",
|
||||
"%s left a new comment to %s on %s": "%s ha commentato %s in %s",
|
||||
"%s mentioned you in %s on %s": "%s ti ha menzionato in %s in %s",
|
||||
"%s moved %s from %s to %s on %s": "%s ha spostato %s da %s a %s in %s"
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"Archive": "アーカイブ",
|
||||
"Card Created": "カードが作成されました",
|
||||
"Card Moved": "カードが移動されました",
|
||||
"copy": "コピー",
|
||||
"New Comment": "新しいコメント",
|
||||
"Test Title": "テストタイトル",
|
||||
"This is a test text message!": "これはテストテキストメッセージです!",
|
||||
"This is a *test* **markdown** `message`!": "これは*テスト***markdown**`メッセージ`です!",
|
||||
"This is a <i>test</i> <b>html</b> <code>message</code>!": "これは<i>テスト</i><b>html</b><code>メッセージ</code>です!",
|
||||
"Trash": "ゴミ箱",
|
||||
"You Were Added to Card": "カードに追加されました",
|
||||
"You Were Mentioned in Comment": "コメントでメンションされました",
|
||||
"%s added you to %s on %s": "%sが%sの%sにあなたを追加しました",
|
||||
"%s created %s in %s on %s": "%sが%sの%sに%sを作成しました",
|
||||
"%s left a new comment to %s on %s": "%sが%sの%sに新しいコメントを残しました",
|
||||
"%s mentioned you in %s on %s": "%sが%sの%sであなたをメンションしました",
|
||||
"%s moved %s from %s to %s on %s": "%sが%sの%sを%sから%sに移動しました"
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"Archive": "보관함",
|
||||
"Card Created": "카드가 생성됨",
|
||||
"Card Moved": "카드가 이동됨",
|
||||
"copy": "복사본",
|
||||
"New Comment": "새 댓글",
|
||||
"Test Title": "테스트 제목",
|
||||
"This is a test text message!": "이것은 테스트 텍스트 메시지입니다!",
|
||||
"This is a *test* **markdown** `message`!": "이것은 *테스트* **markdown** `메시지`입니다!",
|
||||
"This is a <i>test</i> <b>html</b> <code>message</code>!": "이것은 <i>테스트</i> <b>html</b> <code>메시지</code>입니다!",
|
||||
"Trash": "휴지통",
|
||||
"You Were Added to Card": "카드에 추가되었습니다",
|
||||
"You Were Mentioned in Comment": "댓글에서 언급되었습니다",
|
||||
"%s added you to %s on %s": "%s님이 %s의 %s에 당신을 추가했습니다",
|
||||
"%s created %s in %s on %s": "%s님이 %s의 %s에 %s을(를) 생성했습니다",
|
||||
"%s left a new comment to %s on %s": "%s님이 %s의 %s에 새 댓글을 남겼습니다",
|
||||
"%s mentioned you in %s on %s": "%s님이 %s의 %s에서 당신을 언급했습니다",
|
||||
"%s moved %s from %s to %s on %s": "%s님이 %s의 %s을(를) %s에서 %s(으)로 이동했습니다"
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"Archive": "Archief",
|
||||
"Card Created": "Kaart aangemaakt",
|
||||
"Card Moved": "Kaart verplaatst",
|
||||
"copy": "kopie",
|
||||
"New Comment": "Nieuwe reactie",
|
||||
"Test Title": "Test titel",
|
||||
"This is a test text message!": "Dit is een test tekstbericht!",
|
||||
"This is a *test* **markdown** `message`!": "Dit is een *test* **markdown** `bericht`!",
|
||||
"This is a <i>test</i> <b>html</b> <code>message</code>!": "Dit is een <i>test</i> <b>html</b> <code>bericht</code>!",
|
||||
"Trash": "Prullenbak",
|
||||
"You Were Added to Card": "Je bent toegevoegd aan kaart",
|
||||
"You Were Mentioned in Comment": "Je bent genoemd in reactie",
|
||||
"%s added you to %s on %s": "%s heeft je toegevoegd aan %s op %s",
|
||||
"%s created %s in %s on %s": "%s heeft %s aangemaakt in %s op %s",
|
||||
"%s left a new comment to %s on %s": "%s heeft een nieuwe reactie achtergelaten op %s op %s",
|
||||
"%s mentioned you in %s on %s": "%s heeft je genoemd in %s op %s",
|
||||
"%s moved %s from %s to %s on %s": "%s heeft %s verplaatst van %s naar %s op %s"
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"Archive": "Archiwum",
|
||||
"Card Created": "Karta utworzona",
|
||||
"Card Moved": "Karta przeniesiona",
|
||||
"copy": "kopia",
|
||||
"New Comment": "Nowy komentarz",
|
||||
"Test Title": "Tytuł testowy",
|
||||
"This is a test text message!": "To jest testowa wiadomość tekstowa!",
|
||||
"This is a *test* **markdown** `message`!": "To jest *testowa* **markdown** `wiadomość`!",
|
||||
"This is a <i>test</i> <b>html</b> <code>message</code>!": "To jest <i>testowa</i> <b>html</b> <code>wiadomość</code>!",
|
||||
"Trash": "Kosz",
|
||||
"You Were Added to Card": "Zostałeś dodany do karty",
|
||||
"You Were Mentioned in Comment": "Zostałeś wspomniany w komentarzu",
|
||||
"%s added you to %s on %s": "%s dodał cię do %s w dniu %s",
|
||||
"%s created %s in %s on %s": "%s utworzył %s w %s w dniu %s",
|
||||
"%s left a new comment to %s on %s": "%s zostawił nowy komentarz do %s w dniu %s",
|
||||
"%s mentioned you in %s on %s": "%s wspomniał o tobie w %s w dniu %s",
|
||||
"%s moved %s from %s to %s on %s": "%s przeniósł %s z %s do %s w dniu %s"
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"Archive": "Arquivo",
|
||||
"Card Created": "Cartão criado",
|
||||
"Card Moved": "Cartão movido",
|
||||
"copy": "cópia",
|
||||
"New Comment": "Novo comentário",
|
||||
"Test Title": "Título de teste",
|
||||
"This is a test text message!": "Esta é uma mensagem de texto de teste!",
|
||||
"This is a *test* **markdown** `message`!": "Esta é uma *mensagem* **markdown** `de teste`!",
|
||||
"This is a <i>test</i> <b>html</b> <code>message</code>!": "Esta é uma <i>mensagem</i> <b>html</b> <code>de teste</code>!",
|
||||
"Trash": "Lixeira",
|
||||
"You Were Added to Card": "Você foi adicionado ao cartão",
|
||||
"You Were Mentioned in Comment": "Você foi mencionado em comentário",
|
||||
"%s added you to %s on %s": "%s adicionou você a %s em %s",
|
||||
"%s created %s in %s on %s": "%s criou %s em %s em %s",
|
||||
"%s left a new comment to %s on %s": "%s deixou um novo comentário em %s em %s",
|
||||
"%s mentioned you in %s on %s": "%s mencionou você em %s em %s",
|
||||
"%s moved %s from %s to %s on %s": "%s moveu %s de %s para %s em %s"
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"Archive": "Arquivo",
|
||||
"Card Created": "Cartão criado",
|
||||
"Card Moved": "Cartão movido",
|
||||
"copy": "cópia",
|
||||
"New Comment": "Novo comentário",
|
||||
"Test Title": "Título de teste",
|
||||
"This is a test text message!": "Esta é uma mensagem de texto de teste!",
|
||||
"This is a *test* **markdown** `message`!": "Esta é uma *mensagem* **markdown** `de teste`!",
|
||||
"This is a <i>test</i> <b>html</b> <code>message</code>!": "Esta é uma <i>mensagem</i> <b>html</b> <code>de teste</code>!",
|
||||
"Trash": "Lixo",
|
||||
"You Were Added to Card": "Foi adicionado ao cartão",
|
||||
"You Were Mentioned in Comment": "Foi mencionado num comentário",
|
||||
"%s added you to %s on %s": "%s adicionou-o a %s em %s",
|
||||
"%s created %s in %s on %s": "%s criou %s em %s em %s",
|
||||
"%s left a new comment to %s on %s": "%s deixou um novo comentário em %s em %s",
|
||||
"%s mentioned you in %s on %s": "%s mencionou-o em %s em %s",
|
||||
"%s moved %s from %s to %s on %s": "%s moveu %s de %s para %s em %s"
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"Archive": "Arhivă",
|
||||
"Card Created": "Card creat",
|
||||
"Card Moved": "Card mutat",
|
||||
"copy": "copie",
|
||||
"New Comment": "Comentariu nou",
|
||||
"Test Title": "Titlu de test",
|
||||
"This is a test text message!": "Acesta este un mesaj text de test!",
|
||||
"This is a *test* **markdown** `message`!": "Acesta este un *mesaj* **markdown** `de test`!",
|
||||
"This is a <i>test</i> <b>html</b> <code>message</code>!": "Acesta este un <i>mesaj</i> <b>html</b> <code>de test</code>!",
|
||||
"Trash": "Coș de gunoi",
|
||||
"You Were Added to Card": "Ați fost adăugat la card",
|
||||
"You Were Mentioned in Comment": "Ați fost menționat într-un comentariu",
|
||||
"%s added you to %s on %s": "%s v-a adăugat la %s pe %s",
|
||||
"%s created %s in %s on %s": "%s a creat %s în %s pe %s",
|
||||
"%s left a new comment to %s on %s": "%s a lăsat un comentariu nou la %s pe %s",
|
||||
"%s mentioned you in %s on %s": "%s v-a menționat în %s pe %s",
|
||||
"%s moved %s from %s to %s on %s": "%s a mutat %s din %s în %s pe %s"
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"Archive": "Архив",
|
||||
"Card Created": "Карточка создана",
|
||||
"Card Moved": "Карточка перемещена",
|
||||
"copy": "копия",
|
||||
"New Comment": "Новый комментарий",
|
||||
"Test Title": "Тестовый заголовок",
|
||||
"This is a test text message!": "Это тестовое сообщение!",
|
||||
"This is a *test* **markdown** `message`!": "Это *тестовое* **markdown** `сообщение`!",
|
||||
"This is a <i>test</i> <b>html</b> <code>message</code>!": "Это <i>тестовое</i> <b>html</b> <code>сообщение</code>!",
|
||||
"Trash": "Корзина",
|
||||
"You Were Added to Card": "Вы были добавлены к карточке",
|
||||
"You Were Mentioned in Comment": "Вы были упомянуты в комментарии",
|
||||
"%s added you to %s on %s": "%s добавил(а) вас к %s на %s",
|
||||
"%s created %s in %s on %s": "%s создал(а) %s в %s на %s",
|
||||
"%s left a new comment to %s on %s": "%s оставил(а) новый комментарий к %s на %s",
|
||||
"%s mentioned you in %s on %s": "%s упомянул(а) вас в %s на %s",
|
||||
"%s moved %s from %s to %s on %s": "%s переместил(а) %s из %s в %s на %s"
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"Archive": "Archív",
|
||||
"Card Created": "Karta vytvorená",
|
||||
"Card Moved": "Karta presunutá",
|
||||
"copy": "kópia",
|
||||
"New Comment": "Nový komentár",
|
||||
"Test Title": "Testovací názov",
|
||||
"This is a test text message!": "Toto je testovacia textová správa!",
|
||||
"This is a *test* **markdown** `message`!": "Toto je *testovacia* **markdown** `správa`!",
|
||||
"This is a <i>test</i> <b>html</b> <code>message</code>!": "Toto je <i>testovacia</i> <b>html</b> <code>správa</code>!",
|
||||
"Trash": "Kôš",
|
||||
"You Were Added to Card": "Boli ste pridaní ku karte",
|
||||
"You Were Mentioned in Comment": "Boli ste spomenutí v komentári",
|
||||
"%s added you to %s on %s": "%s vás pridal k %s dňa %s",
|
||||
"%s created %s in %s on %s": "%s vytvoril %s v %s dňa %s",
|
||||
"%s left a new comment to %s on %s": "%s zanechal nový komentár k %s dňa %s",
|
||||
"%s mentioned you in %s on %s": "%s vás spomenul v %s dňa %s",
|
||||
"%s moved %s from %s to %s on %s": "%s presunul %s z %s do %s dňa %s"
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"Archive": "Архива",
|
||||
"Card Created": "Картица креирана",
|
||||
"Card Moved": "Картица премештена",
|
||||
"copy": "копија",
|
||||
"New Comment": "Нови коментар",
|
||||
"Test Title": "Тест наслов",
|
||||
"This is a test text message!": "Ово је тест текстуална порука!",
|
||||
"This is a *test* **markdown** `message`!": "Ово је *тест* **markdown** `порука`!",
|
||||
"This is a <i>test</i> <b>html</b> <code>message</code>!": "Ово је <i>тест</i> <b>html</b> <code>порука</code>!",
|
||||
"Trash": "Корпа за отпатке",
|
||||
"You Were Added to Card": "Додати сте на картицу",
|
||||
"You Were Mentioned in Comment": "Поменути сте у коментару",
|
||||
"%s added you to %s on %s": "%s вас је додао на %s дана %s",
|
||||
"%s created %s in %s on %s": "%s је креирао %s у %s дана %s",
|
||||
"%s left a new comment to %s on %s": "%s је оставио нови коментар на %s дана %s",
|
||||
"%s mentioned you in %s on %s": "%s вас је поменуо у %s дана %s",
|
||||
"%s moved %s from %s to %s on %s": "%s је преместио %s из %s у %s дана %s"
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"Archive": "Arhiva",
|
||||
"Card Created": "Kartica kreirana",
|
||||
"Card Moved": "Kartica premeštena",
|
||||
"copy": "kopija",
|
||||
"New Comment": "Novi komentar",
|
||||
"Test Title": "Test naslov",
|
||||
"This is a test text message!": "Ovo je test tekstualna poruka!",
|
||||
"This is a *test* **markdown** `message`!": "Ovo je *test* **markdown** `poruka`!",
|
||||
"This is a <i>test</i> <b>html</b> <code>message</code>!": "Ovo je <i>test</i> <b>html</b> <code>poruka</code>!",
|
||||
"Trash": "Korpa za otpatke",
|
||||
"You Were Added to Card": "Dodati ste na karticu",
|
||||
"You Were Mentioned in Comment": "Pomenuti ste u komentaru",
|
||||
"%s added you to %s on %s": "%s vas je dodao na %s dana %s",
|
||||
"%s created %s in %s on %s": "%s je kreirao %s u %s dana %s",
|
||||
"%s left a new comment to %s on %s": "%s je ostavio novi komentar na %s dana %s",
|
||||
"%s mentioned you in %s on %s": "%s vas je pomenuo u %s dana %s",
|
||||
"%s moved %s from %s to %s on %s": "%s je premestio %s iz %s u %s dana %s"
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"Archive": "Arkiv",
|
||||
"Card Created": "Kort skapat",
|
||||
"Card Moved": "Kort flyttat",
|
||||
"copy": "kopia",
|
||||
"New Comment": "Ny kommentar",
|
||||
"Test Title": "Test titel",
|
||||
"This is a test text message!": "Detta är ett test textmeddelande!",
|
||||
"This is a *test* **markdown** `message`!": "Detta är ett *test* **markdown** `meddelande`!",
|
||||
"This is a <i>test</i> <b>html</b> <code>message</code>!": "Detta är ett <i>test</i> <b>html</b> <code>meddelande</code>!",
|
||||
"Trash": "Papperskorg",
|
||||
"You Were Added to Card": "Du lades till på kort",
|
||||
"You Were Mentioned in Comment": "Du nämndes i kommentar",
|
||||
"%s added you to %s on %s": "%s lade till dig på %s den %s",
|
||||
"%s created %s in %s on %s": "%s skapade %s i %s den %s",
|
||||
"%s left a new comment to %s on %s": "%s lämnade en ny kommentar till %s den %s",
|
||||
"%s mentioned you in %s on %s": "%s nämnde dig i %s den %s",
|
||||
"%s moved %s from %s to %s on %s": "%s flyttade %s från %s till %s den %s"
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"Archive": "Arşiv",
|
||||
"Card Created": "Kart oluşturuldu",
|
||||
"Card Moved": "Kart taşındı",
|
||||
"copy": "kopya",
|
||||
"New Comment": "Yeni yorum",
|
||||
"Test Title": "Test başlığı",
|
||||
"This is a test text message!": "Bu bir test metin mesajıdır!",
|
||||
"This is a *test* **markdown** `message`!": "Bu bir *test* **markdown** `mesajı`!",
|
||||
"This is a <i>test</i> <b>html</b> <code>message</code>!": "Bu bir <i>test</i> <b>html</b> <code>mesajı</code>!",
|
||||
"Trash": "Çöp kutusu",
|
||||
"You Were Added to Card": "Karta eklendiniz",
|
||||
"You Were Mentioned in Comment": "Bir yorumda bahsedildiniz",
|
||||
"%s added you to %s on %s": "%s sizi %s'ye %s tarihinde ekledi",
|
||||
"%s created %s in %s on %s": "%s, %s'i %s içinde %s tarihinde oluşturdu",
|
||||
"%s left a new comment to %s on %s": "%s, %s'ye %s tarihinde yeni bir yorum bıraktı",
|
||||
"%s mentioned you in %s on %s": "%s, %s içinde %s tarihinde sizden bahsetti",
|
||||
"%s moved %s from %s to %s on %s": "%s, %s'yi %s'den %s'ye %s tarihinde taşıdı"
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"Archive": "Архів",
|
||||
"Card Created": "Картку створено",
|
||||
"Card Moved": "Картку переміщено",
|
||||
"copy": "копія",
|
||||
"New Comment": "Новий коментар",
|
||||
"Test Title": "Тестовий заголовок",
|
||||
"This is a test text message!": "Це нове повідомлення!",
|
||||
"This is a *test* **markdown** `message`!": "Це *тестове* **markdown** `повідомлення`!",
|
||||
"This is a <i>test</i> <b>html</b> <code>message</code>!": "Це <i>тестове</i> <b>html</b> <code>повідомлення</code>!",
|
||||
"Trash": "Кошик",
|
||||
"You Were Added to Card": "Вас було додано до картки",
|
||||
"You Were Mentioned in Comment": "Вас було згадано у коментарі",
|
||||
"%s added you to %s on %s": "%s додав(ла) вас до %s на %s",
|
||||
"%s created %s in %s on %s": "%s створив(ла) %s в %s на %s",
|
||||
"%s left a new comment to %s on %s": "%s залишив(ла) новий коментар до %s на %s",
|
||||
"%s mentioned you in %s on %s": "%s згадав(ла) вас в %s на %s",
|
||||
"%s moved %s from %s to %s on %s": "%s перемістив(ла) %s з %s в %s на %s"
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"Archive": "Arxiv",
|
||||
"Card Created": "Karta yaratildi",
|
||||
"Card Moved": "Karta ko'chirildi",
|
||||
"copy": "nusxa",
|
||||
"New Comment": "Yangi izoh",
|
||||
"Test Title": "Test sarlavha",
|
||||
"This is a test text message!": "Bu test matn xabari!",
|
||||
"This is a *test* **markdown** `message`!": "Bu *test* **markdown** `xabar`!",
|
||||
"This is a <i>test</i> <b>html</b> <code>message</code>!": "Bu <i>test</i> <b>html</b> <code>xabar</code>!",
|
||||
"Trash": "Chiqindi quti",
|
||||
"You Were Added to Card": "Siz kartaga qo'shildingiz",
|
||||
"You Were Mentioned in Comment": "Siz izohda eslatildingiz",
|
||||
"%s added you to %s on %s": "%s sizni %s ga %s da qo'shdi",
|
||||
"%s created %s in %s on %s": "%s yaratdi %s ni %s da %s da",
|
||||
"%s left a new comment to %s on %s": "%s yangi izoh qoldirdi %s ga %s da",
|
||||
"%s mentioned you in %s on %s": "%s sizni esladi %s da %s da",
|
||||
"%s moved %s from %s to %s on %s": "%s ko'chirdi %s ni %s dan %s ga %s da"
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"Archive": "Lưu trữ",
|
||||
"Card Created": "Thẻ đã được tạo",
|
||||
"Card Moved": "Thẻ đã được di chuyển",
|
||||
"copy": "bản sao",
|
||||
"New Comment": "Bình luận mới",
|
||||
"Test Title": "Tiêu đề thử nghiệm",
|
||||
"This is a test text message!": "Đây là tin nhắn văn bản thử nghiệm!",
|
||||
"This is a *test* **markdown** `message`!": "Đây là *tin nhắn* **markdown** `thử nghiệm`!",
|
||||
"This is a <i>test</i> <b>html</b> <code>message</code>!": "Đây là <i>tin nhắn</i> <b>html</b> <code>thử nghiệm</code>!",
|
||||
"Trash": "Thùng rác",
|
||||
"You Were Added to Card": "Bạn đã được thêm vào thẻ",
|
||||
"You Were Mentioned in Comment": "Bạn đã được nhắc đến trong bình luận",
|
||||
"%s added you to %s on %s": "%s đã thêm bạn vào %s vào %s",
|
||||
"%s created %s in %s on %s": "%s đã tạo %s trong %s vào %s",
|
||||
"%s left a new comment to %s on %s": "%s đã để lại bình luận mới cho %s vào %s",
|
||||
"%s mentioned you in %s on %s": "%s đã nhắc đến bạn trong %s vào %s",
|
||||
"%s moved %s from %s to %s on %s": "%s đã di chuyển %s từ %s đến %s vào %s"
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"Archive": "归档",
|
||||
"Card Created": "卡片已创建",
|
||||
"Card Moved": "卡片已移动",
|
||||
"copy": "副本",
|
||||
"New Comment": "新评论",
|
||||
"Test Title": "测试标题",
|
||||
"This is a test text message!": "这是一条测试文本消息!",
|
||||
"This is a *test* **markdown** `message`!": "这是一条*测试***markdown**`消息`!",
|
||||
"This is a <i>test</i> <b>html</b> <code>message</code>!": "这是一条<i>测试</i><b>html</b><code>消息</code>!",
|
||||
"Trash": "回收站",
|
||||
"You Were Added to Card": "您已被添加到卡片",
|
||||
"You Were Mentioned in Comment": "您在评论中被提及",
|
||||
"%s added you to %s on %s": "%s 在 %s 将您添加到 %s",
|
||||
"%s created %s in %s on %s": "%s 在 %s 的 %s 中创建了 %s",
|
||||
"%s left a new comment to %s on %s": "%s 在 %s 对 %s 留下了新评论",
|
||||
"%s mentioned you in %s on %s": "%s 在 %s 的 %s 中提及了您",
|
||||
"%s moved %s from %s to %s on %s": "%s 在 %s 将 %s 从 %s 移动到 %s"
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"Archive": "封存",
|
||||
"Card Created": "卡片已建立",
|
||||
"Card Moved": "卡片已移動",
|
||||
"copy": "副本",
|
||||
"New Comment": "新留言",
|
||||
"Test Title": "測試標題",
|
||||
"This is a test text message!": "這是一則測試文字訊息!",
|
||||
"This is a *test* **markdown** `message`!": "這是一則*測試***markdown**`訊息`!",
|
||||
"This is a <i>test</i> <b>html</b> <code>message</code>!": "這是一則<i>測試</i><b>html</b><code>訊息</code>!",
|
||||
"Trash": "垃圾桶",
|
||||
"You Were Added to Card": "您已被加入卡片",
|
||||
"You Were Mentioned in Comment": "您在留言中被提及",
|
||||
"%s added you to %s on %s": "%s 在 %s 將您加入 %s",
|
||||
"%s created %s in %s on %s": "%s 在 %s 的 %s 中建立了 %s",
|
||||
"%s left a new comment to %s on %s": "%s 在 %s 對 %s 留下了新留言",
|
||||
"%s mentioned you in %s on %s": "%s 在 %s 的 %s 中提及了您",
|
||||
"%s moved %s from %s to %s on %s": "%s 在 %s 將 %s 從 %s 移動到 %s"
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
/**
|
||||
* Built-in Log Configuration
|
||||
* (sails.config.log)
|
||||
*
|
||||
* Configure the log level for your app, as well as the transport
|
||||
* (Underneath the covers, Sails uses Winston for logging, which
|
||||
* allows for some pretty neat custom transports/adapters for log messages)
|
||||
*
|
||||
* For more information on the Sails logger, check out:
|
||||
* https://sailsjs.com/docs/concepts/logging
|
||||
*/
|
||||
|
||||
module.exports.log = {
|
||||
/**
|
||||
*
|
||||
* Valid `level` configs: i.e. the minimum log level to capture with
|
||||
* sails.log.*()
|
||||
*
|
||||
* The order of precedence for log levels from lowest to highest is:
|
||||
* silly, verbose, info, debug, warn, error
|
||||
*
|
||||
* You may also set the level to "silent" to suppress all logs.
|
||||
*
|
||||
*/
|
||||
// level: 'info',
|
||||
};
|
||||
@@ -0,0 +1,128 @@
|
||||
/**
|
||||
* Default model settings
|
||||
* (sails.config.models)
|
||||
*
|
||||
* Your default, project-wide model settings. Can also be overridden on a
|
||||
* per-model basis by setting a top-level properties in the model definition.
|
||||
*
|
||||
* For details about all available model settings, see:
|
||||
* https://sailsjs.com/config/models
|
||||
*
|
||||
* For more general background on Sails model settings, and how to configure
|
||||
* them on a project-wide or per-model basis, see:
|
||||
* https://sailsjs.com/docs/concepts/models-and-orm/model-settings
|
||||
*/
|
||||
|
||||
module.exports.models = {
|
||||
/**
|
||||
*
|
||||
* Whether model methods like `.create()` and `.update()` should ignore
|
||||
* (and refuse to persist) unrecognized data-- i.e. properties other than
|
||||
* those explicitly defined by attributes in the model definition.
|
||||
*
|
||||
* To ease future maintenance of your code base, it is usually a good idea
|
||||
* to set this to `true`.
|
||||
*
|
||||
* > Note that `schema: false` is not supported by every database.
|
||||
* > For example, if you are using a SQL database, then relevant models
|
||||
* > are always effectively `schema: true`. And if no `schema` setting is
|
||||
* > provided whatsoever, the behavior is left up to the database adapter.
|
||||
* >
|
||||
* > For more info, see:
|
||||
* > https://sailsjs.com/docs/concepts/orm/model-settings#?schema
|
||||
*
|
||||
*/
|
||||
|
||||
// schema: true,
|
||||
|
||||
/**
|
||||
*
|
||||
* How and whether Sails will attempt to automatically rebuild the
|
||||
* tables/collections/etc. in your schema.
|
||||
*
|
||||
* > Note that, when running in a production environment, this will be
|
||||
* > automatically set to `migrate: 'safe'`, no matter what you configure
|
||||
* > here. This is a failsafe to prevent Sails from accidentally running
|
||||
* > auto-migrations on your production database.
|
||||
* >
|
||||
* > For more info, see:
|
||||
* > https://sailsjs.com/docs/concepts/orm/model-settings#?migrate
|
||||
*
|
||||
*/
|
||||
|
||||
migrate: 'safe',
|
||||
|
||||
/**
|
||||
*
|
||||
* Base attributes that are included in all of your models by default.
|
||||
* By convention, this is your primary key attribute (`id`), as well as two
|
||||
* other timestamp attributes for tracking when records were last created
|
||||
* or updated.
|
||||
*
|
||||
* > For more info, see:
|
||||
* > https://sailsjs.com/docs/concepts/orm/model-settings#?attributes
|
||||
*
|
||||
*/
|
||||
|
||||
attributes: {
|
||||
id: {
|
||||
type: 'string',
|
||||
autoIncrement: true,
|
||||
},
|
||||
createdAt: {
|
||||
type: 'ref',
|
||||
columnName: 'created_at',
|
||||
},
|
||||
updatedAt: {
|
||||
type: 'ref',
|
||||
columnName: 'updated_at',
|
||||
},
|
||||
},
|
||||
|
||||
beforeCreate(valuesToSet, proceed) {
|
||||
valuesToSet.createdAt = new Date().toISOString(); // eslint-disable-line no-param-reassign
|
||||
|
||||
proceed();
|
||||
},
|
||||
|
||||
beforeUpdate(valuesToSet, proceed) {
|
||||
valuesToSet.updatedAt = new Date().toISOString(); // eslint-disable-line no-param-reassign
|
||||
|
||||
proceed();
|
||||
},
|
||||
|
||||
/**
|
||||
*
|
||||
* The set of DEKs (data encryption keys) for at-rest encryption.
|
||||
* i.e. when encrypting/decrypting data for attributes with `encrypt: true`.
|
||||
*
|
||||
* > The `default` DEK is used for all new encryptions, but multiple DEKs
|
||||
* > can be configured to allow for key rotation. In production, be sure to
|
||||
* > manage these keys like you would any other sensitive credential.
|
||||
*
|
||||
* > For more info, see:
|
||||
* > https://sailsjs.com/docs/concepts/orm/model-settings#?dataEncryptionKeys
|
||||
*
|
||||
*/
|
||||
|
||||
dataEncryptionKeys: {
|
||||
default: 'fKSf/hPekelUegjM7IyM/EhHbd7HI9Kiec5Lxy2t+7w=',
|
||||
},
|
||||
|
||||
/**
|
||||
*
|
||||
* Whether or not implicit records for associations should be cleaned up
|
||||
* automatically using the built-in polyfill. This is especially useful
|
||||
* during development with sails-disk.
|
||||
*
|
||||
* Depending on which databases you're using, you may want to disable this
|
||||
* polyfill in your production environment.
|
||||
*
|
||||
* (For production configuration, see `config/env/production.js`.)
|
||||
*
|
||||
*/
|
||||
|
||||
// cascadeOnDestroy: true,
|
||||
|
||||
archiveModelIdentity: false,
|
||||
};
|
||||
@@ -0,0 +1,56 @@
|
||||
/**
|
||||
* Policy Mappings
|
||||
* (sails.config.policies)
|
||||
*
|
||||
* Policies are simple functions which run **before** your actions.
|
||||
*
|
||||
* For more information on configuring policies, check out:
|
||||
* https://sailsjs.com/docs/concepts/policies
|
||||
*/
|
||||
|
||||
module.exports.policies = {
|
||||
/**
|
||||
*
|
||||
* Default policy for all controllers and actions, unless overridden.
|
||||
* (`true` allows public access)
|
||||
*
|
||||
*/
|
||||
|
||||
'*': ['is-authenticated', 'is-external'],
|
||||
|
||||
'config/show': ['is-authenticated', 'is-admin'],
|
||||
'config/update': ['is-authenticated', 'is-admin'],
|
||||
'config/test-smtp': ['is-authenticated', 'is-admin'],
|
||||
|
||||
'webhooks/index': ['is-authenticated', 'is-external', 'is-admin'],
|
||||
'webhooks/create': ['is-authenticated', 'is-external', 'is-admin'],
|
||||
'webhooks/update': ['is-authenticated', 'is-external', 'is-admin'],
|
||||
'webhooks/delete': ['is-authenticated', 'is-external', 'is-admin'],
|
||||
|
||||
'access-tokens/delete': ['is-authenticated', 'is-external', 'is-session'],
|
||||
|
||||
'users/index': 'is-authenticated',
|
||||
'users/create': ['is-authenticated', 'is-admin'],
|
||||
'users/show': 'is-authenticated',
|
||||
'users/update': 'is-authenticated',
|
||||
'users/update-email': 'is-authenticated',
|
||||
'users/update-password': 'is-authenticated',
|
||||
'users/update-username': 'is-authenticated',
|
||||
'users/update-avatar': 'is-authenticated',
|
||||
'users/create-api-key': ['is-authenticated', 'is-admin'],
|
||||
'users/delete': ['is-authenticated', 'is-admin'],
|
||||
|
||||
'projects/create': ['is-authenticated', 'is-external', 'is-admin-or-project-owner'],
|
||||
|
||||
'_internal/update-config': ['is-authenticated', 'is-internal'],
|
||||
|
||||
index: true,
|
||||
'swagger/show': true,
|
||||
'bootstrap/show': true,
|
||||
'terms/show': true,
|
||||
'access-tokens/create': true,
|
||||
'access-tokens/exchange-with-oidc': true,
|
||||
'access-tokens/debug-oidc': true,
|
||||
'access-tokens/accept-terms': true,
|
||||
'access-tokens/revoke-pending-token': true,
|
||||
};
|
||||
@@ -0,0 +1,272 @@
|
||||
/**
|
||||
* Route Mappings
|
||||
* (sails.config.routes)
|
||||
*
|
||||
* Your routes tell Sails what to do each time it receives a request.
|
||||
*
|
||||
* For more information on configuring custom routes, check out:
|
||||
* https://sailsjs.com/anatomy/config/routes-js
|
||||
*/
|
||||
|
||||
const path = require('path');
|
||||
const sails = require('sails');
|
||||
|
||||
// Remove prefix from urlPath, assuming completely matches a subpath of
|
||||
// urlPath. The result preserves query params and fragment if present
|
||||
//
|
||||
// Examples:
|
||||
// '/foo', '/foo/bar' -> '/bar'
|
||||
// '/foo', '/foo' -> '/'
|
||||
// '/foo', '/foo?baz=bux' -> '/?baz=bux'
|
||||
// '/foo', '/foobar' -> '/foobar'
|
||||
const removeRoutePrefix = (prefix, urlPath) => {
|
||||
if (urlPath.startsWith(prefix)) {
|
||||
const subpath = urlPath.substring(prefix.length);
|
||||
|
||||
if (subpath.startsWith('/')) {
|
||||
// Prefix matched a complete set of path segments, with a valid path
|
||||
// remaining.
|
||||
return subpath;
|
||||
}
|
||||
|
||||
if (subpath.length === 0 || subpath.startsWith('?') || subpath.startsWith('#')) {
|
||||
// Prefix matched a complete set of path segments, but there is no path
|
||||
// remaining. Add '/'.
|
||||
return `/${subpath}`;
|
||||
}
|
||||
}
|
||||
|
||||
// Either the prefix didn't match at all, or it wasn't a complete path match
|
||||
// (e.g. we don't want to treat '/foo' as a prefix of '/foobar'). Leave the
|
||||
// path as-is.
|
||||
return urlPath;
|
||||
};
|
||||
|
||||
const serveStatic = async (prefix, getPathSegment, req, res) => {
|
||||
// Custom config properties are not available when the routes config is
|
||||
// loaded, so resolve the target value just before serving the request.
|
||||
const pathSegment = getPathSegment();
|
||||
// Remove the leading route prefix, since it's already included in path
|
||||
// segment.
|
||||
const normalizedUrlPath = removeRoutePrefix(prefix, req.url);
|
||||
|
||||
const fileManager = sails.hooks['file-manager'].getInstance();
|
||||
const filePathSegment = path.join(pathSegment, normalizedUrlPath);
|
||||
|
||||
let readStream;
|
||||
let headers;
|
||||
|
||||
try {
|
||||
[readStream, headers] = await fileManager.read(filePathSegment, {
|
||||
withHeaders: true,
|
||||
});
|
||||
} catch (err) {
|
||||
return res.sendStatus(404);
|
||||
}
|
||||
|
||||
res.set({
|
||||
...headers,
|
||||
'Cache-Control': `private, max-age=${sails.config.http.cache}, immutable`,
|
||||
});
|
||||
|
||||
readStream.on('error', () => {
|
||||
if (res.headersSent) {
|
||||
res.destroy();
|
||||
} else {
|
||||
res.sendStatus(404);
|
||||
}
|
||||
});
|
||||
|
||||
return readStream.pipe(res);
|
||||
};
|
||||
|
||||
/* const publicStaticDirServer = (prefix, getPathSegment) => (req, res, next) => {
|
||||
if (!req.url.startsWith(prefix)) {
|
||||
return next();
|
||||
}
|
||||
|
||||
return serveStatic(prefix, getPathSegment, req, res);
|
||||
}; */
|
||||
|
||||
const protectedStaticDirServer = (prefix, getPathSegment) => (req, res, next) => {
|
||||
if (!req.url.startsWith(prefix)) {
|
||||
return next();
|
||||
}
|
||||
|
||||
try {
|
||||
sails.helpers.utils.verifyJwtToken(req.cookies.accessToken);
|
||||
} catch (error) {
|
||||
return res.sendStatus(401);
|
||||
}
|
||||
|
||||
return serveStatic(prefix, getPathSegment, req, res);
|
||||
};
|
||||
|
||||
module.exports.routes = {
|
||||
'GET /api/bootstrap': 'bootstrap/show',
|
||||
|
||||
'GET /api/terms': 'terms/show',
|
||||
|
||||
'GET /api/config': 'config/show',
|
||||
'PATCH /api/config': 'config/update',
|
||||
'POST /api/config/test-smtp': 'config/test-smtp',
|
||||
|
||||
'GET /api/webhooks': 'webhooks/index',
|
||||
'POST /api/webhooks': 'webhooks/create',
|
||||
'PATCH /api/webhooks/:id': 'webhooks/update',
|
||||
'DELETE /api/webhooks/:id': 'webhooks/delete',
|
||||
|
||||
'POST /api/access-tokens': 'access-tokens/create',
|
||||
'POST /api/access-tokens/exchange-with-oidc': 'access-tokens/exchange-with-oidc',
|
||||
'POST /api/access-tokens/debug-oidc': 'access-tokens/debug-oidc',
|
||||
'POST /api/access-tokens/accept-terms': 'access-tokens/accept-terms',
|
||||
'POST /api/access-tokens/revoke-pending-token': 'access-tokens/revoke-pending-token',
|
||||
'DELETE /api/access-tokens/me': 'access-tokens/delete',
|
||||
|
||||
'GET /api/users': 'users/index',
|
||||
'POST /api/users': 'users/create',
|
||||
'GET /api/users/:id': 'users/show',
|
||||
'PATCH /api/users/:id': 'users/update',
|
||||
'PATCH /api/users/:id/email': 'users/update-email',
|
||||
'PATCH /api/users/:id/password': 'users/update-password',
|
||||
'PATCH /api/users/:id/username': 'users/update-username',
|
||||
'POST /api/users/:id/avatar': 'users/update-avatar',
|
||||
'POST /api/users/:id/api-key': 'users/create-api-key',
|
||||
'DELETE /api/users/:id': 'users/delete',
|
||||
|
||||
'GET /api/projects': 'projects/index',
|
||||
'POST /api/projects': 'projects/create',
|
||||
'GET /api/projects/:id': 'projects/show',
|
||||
'PATCH /api/projects/:id': 'projects/update',
|
||||
'DELETE /api/projects/:id': 'projects/delete',
|
||||
|
||||
'POST /api/projects/:projectId/project-managers': 'project-managers/create',
|
||||
'DELETE /api/project-managers/:id': 'project-managers/delete',
|
||||
|
||||
'POST /api/projects/:projectId/background-images': 'background-images/create',
|
||||
'DELETE /api/background-images/:id': 'background-images/delete',
|
||||
|
||||
'POST /api/projects/:projectId/base-custom-field-groups': 'base-custom-field-groups/create',
|
||||
'PATCH /api/base-custom-field-groups/:id': 'base-custom-field-groups/update',
|
||||
'DELETE /api/base-custom-field-groups/:id': 'base-custom-field-groups/delete',
|
||||
|
||||
'POST /api/projects/:projectId/boards': 'boards/create',
|
||||
'GET /api/boards/:id': 'boards/show',
|
||||
'PATCH /api/boards/:id': 'boards/update',
|
||||
'DELETE /api/boards/:id': 'boards/delete',
|
||||
|
||||
'POST /api/boards/:boardId/board-memberships': 'board-memberships/create',
|
||||
'PATCH /api/board-memberships/:id': 'board-memberships/update',
|
||||
'DELETE /api/board-memberships/:id': 'board-memberships/delete',
|
||||
|
||||
'POST /api/boards/:boardId/labels': 'labels/create',
|
||||
'PATCH /api/labels/:id': 'labels/update',
|
||||
'DELETE /api/labels/:id': 'labels/delete',
|
||||
|
||||
'POST /api/boards/:boardId/lists': 'lists/create',
|
||||
'GET /api/lists/:id': 'lists/show',
|
||||
'PATCH /api/lists/:id': 'lists/update',
|
||||
'POST /api/lists/:id/sort': 'lists/sort',
|
||||
'POST /api/lists/:id/move-cards': 'lists/move-cards',
|
||||
'POST /api/lists/:id/clear': 'lists/clear',
|
||||
'DELETE /api/lists/:id': 'lists/delete',
|
||||
|
||||
'GET /api/lists/:listId/cards': 'cards/index',
|
||||
'POST /api/lists/:listId/cards': 'cards/create',
|
||||
'GET /api/cards/:id': 'cards/show',
|
||||
'PATCH /api/cards/:id': 'cards/update',
|
||||
'POST /api/cards/:id/duplicate': 'cards/duplicate',
|
||||
'POST /api/cards/:id/read-notifications': 'cards/read-notifications',
|
||||
'DELETE /api/cards/:id': 'cards/delete',
|
||||
'POST /api/cards/:cardId/card-memberships': 'card-memberships/create',
|
||||
'DELETE /api/cards/:cardId/card-memberships/userId::userId': 'card-memberships/delete',
|
||||
'POST /api/cards/:cardId/card-labels': 'card-labels/create',
|
||||
'DELETE /api/cards/:cardId/card-labels/labelId::labelId': 'card-labels/delete',
|
||||
|
||||
'POST /api/cards/:cardId/task-lists': 'task-lists/create',
|
||||
'GET /api/task-lists/:id': 'task-lists/show',
|
||||
'PATCH /api/task-lists/:id': 'task-lists/update',
|
||||
'DELETE /api/task-lists/:id': 'task-lists/delete',
|
||||
|
||||
'POST /api/task-lists/:taskListId/tasks': 'tasks/create',
|
||||
'PATCH /api/tasks/:id': 'tasks/update',
|
||||
'DELETE /api/tasks/:id': 'tasks/delete',
|
||||
|
||||
'POST /api/cards/:cardId/attachments': 'attachments/create',
|
||||
'PATCH /api/attachments/:id': 'attachments/update',
|
||||
'DELETE /api/attachments/:id': 'attachments/delete',
|
||||
|
||||
'POST /api/boards/:boardId/custom-field-groups': 'custom-field-groups/create-in-board',
|
||||
'POST /api/cards/:cardId/custom-field-groups': 'custom-field-groups/create-in-card',
|
||||
'GET /api/custom-field-groups/:id': 'custom-field-groups/show',
|
||||
'PATCH /api/custom-field-groups/:id': 'custom-field-groups/update',
|
||||
'DELETE /api/custom-field-groups/:id': 'custom-field-groups/delete',
|
||||
|
||||
'POST /api/base-custom-field-groups/:baseCustomFieldGroupId/custom-fields':
|
||||
'custom-fields/create-in-base-custom-field-group',
|
||||
'POST /api/custom-field-groups/:customFieldGroupId/custom-fields':
|
||||
'custom-fields/create-in-custom-field-group',
|
||||
'PATCH /api/custom-fields/:id': 'custom-fields/update',
|
||||
'DELETE /api/custom-fields/:id': 'custom-fields/delete',
|
||||
|
||||
'PATCH /api/cards/:cardId/custom-field-values/customFieldGroupId::customFieldGroupId[:]customFieldId::customFieldId':
|
||||
'custom-field-values/create-or-update',
|
||||
'DELETE /api/cards/:cardId/custom-field-values/customFieldGroupId::customFieldGroupId[:]customFieldId::customFieldId':
|
||||
'custom-field-values/delete',
|
||||
|
||||
'GET /api/cards/:cardId/comments': 'comments/index',
|
||||
'POST /api/cards/:cardId/comments': 'comments/create',
|
||||
'PATCH /api/comments/:id': 'comments/update',
|
||||
'DELETE /api/comments/:id': 'comments/delete',
|
||||
|
||||
'GET /api/boards/:boardId/actions': 'actions/index-in-board',
|
||||
'GET /api/cards/:cardId/actions': 'actions/index-in-card',
|
||||
|
||||
'GET /api/notifications': 'notifications/index',
|
||||
'GET /api/notifications/:id': 'notifications/show',
|
||||
'PATCH /api/notifications/:id': 'notifications/update',
|
||||
'POST /api/notifications/read-all': 'notifications/read-all',
|
||||
|
||||
'POST /api/users/:userId/notification-services': 'notification-services/create-in-user',
|
||||
'POST /api/boards/:boardId/notification-services': 'notification-services/create-in-board',
|
||||
'PATCH /api/notification-services/:id': 'notification-services/update',
|
||||
'POST /api/notification-services/:id/test': 'notification-services/test',
|
||||
'DELETE /api/notification-services/:id': 'notification-services/delete',
|
||||
|
||||
'PATCH /api/_internal/config': '_internal/update-config',
|
||||
|
||||
'GET /swagger.json': 'swagger/show',
|
||||
|
||||
'GET /favicons/*': {
|
||||
fn: protectedStaticDirServer('/favicons', () => sails.config.custom.faviconsPathSegment),
|
||||
skipAssets: false,
|
||||
},
|
||||
|
||||
'GET /user-avatars/*': {
|
||||
fn: protectedStaticDirServer('/user-avatars', () => sails.config.custom.userAvatarsPathSegment),
|
||||
skipAssets: false,
|
||||
},
|
||||
|
||||
'GET /background-images/*': {
|
||||
fn: protectedStaticDirServer(
|
||||
'/background-images',
|
||||
() => sails.config.custom.backgroundImagesPathSegment,
|
||||
),
|
||||
skipAssets: false,
|
||||
},
|
||||
|
||||
'GET /attachments/:id/download/:filename': {
|
||||
action: 'file-attachments/download',
|
||||
skipAssets: false,
|
||||
},
|
||||
|
||||
'GET r|^/attachments/(\\w+)/download/thumbnails/([\\w-]+).(\\w+)$|id,fileName,fileExtension': {
|
||||
action: 'file-attachments/download-thumbnail',
|
||||
skipAssets: false,
|
||||
},
|
||||
|
||||
'GET /*': {
|
||||
action: 'index',
|
||||
skipAssets: true,
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,52 @@
|
||||
/**
|
||||
* Security Settings
|
||||
* (sails.config.security)
|
||||
*
|
||||
* These settings affect aspects of your app's security, such
|
||||
* as how it deals with cross-origin requests (CORS) and which
|
||||
* routes require a CSRF token to be included with the request.
|
||||
*
|
||||
* For an overview of how Sails handles security, see:
|
||||
* https://sailsjs.com/documentation/concepts/security
|
||||
*
|
||||
* For additional options and more information, see:
|
||||
* https://sailsjs.com/config/security
|
||||
*/
|
||||
|
||||
module.exports.security = {
|
||||
/**
|
||||
*
|
||||
* CORS is like a more modern version of JSONP-- it allows your application
|
||||
* to circumvent browsers' same-origin policy, so that the responses from
|
||||
* your Sails app hosted on one domain (e.g. example.com) can be received
|
||||
* in the client-side JavaScript code from a page you trust hosted on _some
|
||||
* other_ domain (e.g. trustedsite.net).
|
||||
*
|
||||
* For additional options and more information, see:
|
||||
* https://sailsjs.com/docs/concepts/security/cors
|
||||
*
|
||||
*/
|
||||
|
||||
cors: {
|
||||
allRoutes: true,
|
||||
allowOrigins: ['http://localhost:3000'],
|
||||
allowRequestHeaders: ['Authorization'],
|
||||
allowCredentials: true,
|
||||
},
|
||||
|
||||
/**
|
||||
*
|
||||
* By default, Sails' built-in CSRF protection is disabled to facilitate
|
||||
* rapid development. But be warned! If your Sails app will be accessed by
|
||||
* web browsers, you should _always_ enable CSRF protection before deploying
|
||||
* to production.
|
||||
*
|
||||
* To enable CSRF protection, set this to `true`.
|
||||
*
|
||||
* For more information, see:
|
||||
* https://sailsjs.com/docs/concepts/security/csrf
|
||||
*
|
||||
*/
|
||||
|
||||
// csrf: false,
|
||||
};
|
||||
@@ -0,0 +1,38 @@
|
||||
/**
|
||||
* Session Configuration
|
||||
* (sails.config.session)
|
||||
*
|
||||
* Use the settings below to configure session integration in your app.
|
||||
* (for additional recommended settings, see `config/env/production.js`)
|
||||
*
|
||||
* For all available options, see:
|
||||
* https://sailsjs.com/config/session
|
||||
*/
|
||||
|
||||
module.exports.session = {
|
||||
/**
|
||||
*
|
||||
* Session secret is automatically generated when your new app is created
|
||||
* Replace at your own risk in production-- you will invalidate the cookies
|
||||
* of your users, forcing them to log in again.
|
||||
*
|
||||
*/
|
||||
|
||||
secret: process.env.SECRET_KEY,
|
||||
|
||||
/**
|
||||
*
|
||||
* Customize when built-in session support will be skipped.
|
||||
*
|
||||
* (Useful for performance tuning; particularly to avoid wasting cycles on
|
||||
* session management when responding to simple requests for static assets,
|
||||
* like images or stylesheets.)
|
||||
*
|
||||
* https://sailsjs.com/config/session
|
||||
*
|
||||
*/
|
||||
|
||||
// isSessionDisabled: function (req){
|
||||
// return !!req.path.match(req._sails.LOOKS_LIKE_ASSET_RX);
|
||||
// },
|
||||
};
|
||||
@@ -0,0 +1,69 @@
|
||||
/**
|
||||
* WebSocket Server Settings
|
||||
* (sails.config.sockets)
|
||||
*
|
||||
* Use the settings below to configure realtime functionality in your app.
|
||||
* (for additional recommended settings, see `config/env/production.js`)
|
||||
*
|
||||
* For all available options, see:
|
||||
* https://sailsjs.com/config/sockets
|
||||
*/
|
||||
|
||||
module.exports.sockets = {
|
||||
/**
|
||||
*
|
||||
* `transports`
|
||||
*
|
||||
* The protocols or "transports" that socket clients are permitted to
|
||||
* use when connecting and communicating with this Sails application.
|
||||
*
|
||||
* > Never change this here without also configuring `io.sails.transports`
|
||||
* > in your client-side code. If the client and the server are not using
|
||||
* > the same array of transports, sockets will not work properly.
|
||||
* >
|
||||
* > For more info, see:
|
||||
* > https://sailsjs.com/docs/reference/web-sockets/socket-client
|
||||
*
|
||||
*/
|
||||
// transports: [ 'websocket' ],
|
||||
/**
|
||||
*
|
||||
* `beforeConnect`
|
||||
*
|
||||
* This custom beforeConnect function will be run each time BEFORE a new
|
||||
* socket is allowed to connect, when the initial socket.io handshake is
|
||||
* performed with the server.
|
||||
*
|
||||
* https://sailsjs.com/config/sockets#?beforeconnect
|
||||
*
|
||||
*/
|
||||
// beforeConnect: function(handshake, proceed) {
|
||||
//
|
||||
// // `true` allows the socket to connect.
|
||||
// // (`false` would reject the connection)
|
||||
// return proceed(undefined, true);
|
||||
//
|
||||
// },
|
||||
/**
|
||||
*
|
||||
* `afterDisconnect`
|
||||
*
|
||||
* This custom afterDisconnect function will be run each time a socket
|
||||
* disconnects
|
||||
*
|
||||
*/
|
||||
// afterDisconnect: function(session, socket, done) {
|
||||
//
|
||||
// // By default: do nothing.
|
||||
// // (but always trigger the callback)
|
||||
// return done();
|
||||
//
|
||||
// },
|
||||
/**
|
||||
*
|
||||
* Whether to expose a 'GET /__getcookie' route that sets an HTTP-only
|
||||
* session cookie.
|
||||
*
|
||||
*/
|
||||
// grant3rdPartyCookie: true,
|
||||
};
|
||||
@@ -0,0 +1,46 @@
|
||||
const version = require('../version');
|
||||
|
||||
module.exports = {
|
||||
definition: {
|
||||
openapi: '3.0.0',
|
||||
info: {
|
||||
version,
|
||||
title: 'PLANKA API',
|
||||
description:
|
||||
'API documentation for PLANKA - Real-Time Collaborative Kanban Board Application',
|
||||
license: {
|
||||
name: 'Fair Use License',
|
||||
url: 'https://github.com/plankanban/planka/blob/master/LICENSE.md',
|
||||
},
|
||||
},
|
||||
servers: [
|
||||
{
|
||||
url: '/api',
|
||||
description: 'Base path for API endpoints',
|
||||
},
|
||||
],
|
||||
components: {
|
||||
securitySchemes: {
|
||||
bearerAuth: {
|
||||
type: 'http',
|
||||
scheme: 'bearer',
|
||||
bearerFormat: 'JWT',
|
||||
},
|
||||
apiKeyAuth: {
|
||||
type: 'apiKey',
|
||||
in: 'header',
|
||||
name: 'X-Api-Key',
|
||||
},
|
||||
},
|
||||
},
|
||||
security: [
|
||||
{
|
||||
bearerAuth: [],
|
||||
},
|
||||
{
|
||||
apiKeyAuth: [],
|
||||
},
|
||||
],
|
||||
},
|
||||
apis: ['./api/controllers/**/*.js', './api/models/*.js', './api/responses/*.js'],
|
||||
};
|
||||
@@ -0,0 +1,39 @@
|
||||
/**
|
||||
* View Engine Configuration
|
||||
* (sails.config.views)
|
||||
*
|
||||
* Server-sent views are a secure and effective way to get your app up
|
||||
* and running. Views are normally served from actions. Below, you can
|
||||
* configure your templating language/framework of choice and configure
|
||||
* Sails' layout support.
|
||||
*
|
||||
* For details on available options for configuring server-side views, check out:
|
||||
* https://sailsjs.com/config/views
|
||||
*
|
||||
* For more background information on views and partials in Sails, check out:
|
||||
* https://sailsjs.com/docs/concepts/views
|
||||
*/
|
||||
|
||||
module.exports.views = {
|
||||
/**
|
||||
*
|
||||
* Extension to use for your views. When calling `res.view()` in an action,
|
||||
* you can leave this extension off. For example, calling
|
||||
* `res.view('homepage')` will (using default settings) look for a
|
||||
* `views/homepage.ejs` file.
|
||||
*
|
||||
*/
|
||||
|
||||
// extension: 'ejs',
|
||||
|
||||
/**
|
||||
*
|
||||
* The path (relative to the views directory, and without extension) to
|
||||
* the default layout file to use, or `false` to disable layouts entirely.
|
||||
*
|
||||
* Note that layouts only work with the built-in EJS view engine!
|
||||
*
|
||||
*/
|
||||
|
||||
layout: false,
|
||||
};
|
||||
Reference in New Issue
Block a user