From 05a6705db983d8f03e446c0543da5c53a2862a12 Mon Sep 17 00:00:00 2001 From: Sagi Dayan Date: Mon, 13 Jan 2020 20:57:43 -0500 Subject: [PATCH] Initial commit --- .editorconfig | 13 ++ .env.example | 18 ++ .gitignore | 16 ++ README.md | 3 + ace | 21 ++ app/Middleware/ConvertEmptyStringsToNull.js | 17 ++ app/Models/Token.js | 9 + app/Models/Traits/NoTimestamp.js | 16 ++ app/Models/User.js | 39 ++++ config/app.js | 243 ++++++++++++++++++++ config/auth.js | 94 ++++++++ config/bodyParser.js | 157 +++++++++++++ config/cors.js | 87 +++++++ config/database.js | 81 +++++++ config/hash.js | 49 ++++ config/session.js | 101 ++++++++ config/shield.js | 145 ++++++++++++ database/factory.js | 21 ++ database/migrations/1503248427885_user.js | 22 ++ database/migrations/1503248427886_token.js | 23 ++ package.json | 34 +++ public/logo.svg | 1 + public/pyramid.png | Bin 0 -> 113407 bytes public/splash.png | Bin 0 -> 25171 bytes public/style.css | 92 ++++++++ public/title.svg | 1 + resources/views/welcome.edge | 20 ++ server.js | 25 ++ start/app.js | 61 +++++ start/kernel.js | 63 +++++ start/routes.js | 19 ++ 31 files changed, 1491 insertions(+) create mode 100644 .editorconfig create mode 100644 .env.example create mode 100644 .gitignore create mode 100644 README.md create mode 100644 ace create mode 100644 app/Middleware/ConvertEmptyStringsToNull.js create mode 100644 app/Models/Token.js create mode 100644 app/Models/Traits/NoTimestamp.js create mode 100644 app/Models/User.js create mode 100644 config/app.js create mode 100644 config/auth.js create mode 100644 config/bodyParser.js create mode 100644 config/cors.js create mode 100644 config/database.js create mode 100644 config/hash.js create mode 100644 config/session.js create mode 100644 config/shield.js create mode 100644 database/factory.js create mode 100644 database/migrations/1503248427885_user.js create mode 100644 database/migrations/1503248427886_token.js create mode 100644 package.json create mode 100644 public/logo.svg create mode 100644 public/pyramid.png create mode 100644 public/splash.png create mode 100644 public/style.css create mode 100644 public/title.svg create mode 100644 resources/views/welcome.edge create mode 100644 server.js create mode 100644 start/app.js create mode 100644 start/kernel.js create mode 100644 start/routes.js diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..9142239 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,13 @@ +# editorconfig.org +root = true + +[*] +indent_size = 2 +indent_style = space +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..6a2fb47 --- /dev/null +++ b/.env.example @@ -0,0 +1,18 @@ +HOST=127.0.0.1 +PORT=3333 +NODE_ENV=development +APP_URL=http://${HOST}:${PORT} + +CACHE_VIEWS=false + +APP_KEY= + +DB_CONNECTION=sqlite +DB_HOST=127.0.0.1 +DB_PORT=3306 +DB_USER=root +DB_PASSWORD= +DB_DATABASE=adonis + +SESSION_DRIVER=cookie +HASH_DRIVER=bcrypt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..585b363 --- /dev/null +++ b/.gitignore @@ -0,0 +1,16 @@ +# Node modules +node_modules +package-lock.json + +# Adonis directory for storing tmp files +tmp + +# Environment variables, never commit this file +.env + +# The development sqlite file +database/*.sqlite + +# VSCode & Webstorm history directories +.history +.idea diff --git a/README.md b/README.md new file mode 100644 index 0000000..14cf2b1 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# Seepur + +#### A shared story time experience \ No newline at end of file diff --git a/ace b/ace new file mode 100644 index 0000000..271a604 --- /dev/null +++ b/ace @@ -0,0 +1,21 @@ +'use strict' + +/* +|-------------------------------------------------------------------------- +| Ace Commands +|-------------------------------------------------------------------------- +| +| The ace file is just a regular Javascript file but with no extension. You +| can call `node ace` followed by the command name and it just works. +| +| Also you can use `adonis` followed by the command name, since the adonis +| global proxy all the ace commands. +| +*/ + +const { Ignitor } = require('@adonisjs/ignitor') + +new Ignitor(require('@adonisjs/fold')) + .appRoot(__dirname) + .fireAce() + .catch(console.error) diff --git a/app/Middleware/ConvertEmptyStringsToNull.js b/app/Middleware/ConvertEmptyStringsToNull.js new file mode 100644 index 0000000..a5750cc --- /dev/null +++ b/app/Middleware/ConvertEmptyStringsToNull.js @@ -0,0 +1,17 @@ +'use strict' + +class ConvertEmptyStringsToNull { + async handle ({ request }, next) { + if (Object.keys(request.body).length) { + request.body = Object.assign( + ...Object.keys(request.body).map(key => ({ + [key]: request.body[key] !== '' ? request.body[key] : null + })) + ) + } + + await next() + } +} + +module.exports = ConvertEmptyStringsToNull diff --git a/app/Models/Token.js b/app/Models/Token.js new file mode 100644 index 0000000..e089e87 --- /dev/null +++ b/app/Models/Token.js @@ -0,0 +1,9 @@ +'use strict' + +/** @type {typeof import('@adonisjs/lucid/src/Lucid/Model')} */ +const Model = use('Model') + +class Token extends Model { +} + +module.exports = Token diff --git a/app/Models/Traits/NoTimestamp.js b/app/Models/Traits/NoTimestamp.js new file mode 100644 index 0000000..58c9340 --- /dev/null +++ b/app/Models/Traits/NoTimestamp.js @@ -0,0 +1,16 @@ +'use strict' + +class NoTimestamp { + register (Model) { + Object.defineProperties(Model, { + createdAtColumn: { + get: () => null, + }, + updatedAtColumn: { + get: () => null, + }, + }) + } +} + +module.exports = NoTimestamp diff --git a/app/Models/User.js b/app/Models/User.js new file mode 100644 index 0000000..2804a44 --- /dev/null +++ b/app/Models/User.js @@ -0,0 +1,39 @@ +'use strict' + +/** @type {import('@adonisjs/framework/src/Hash')} */ +const Hash = use('Hash') + +/** @type {typeof import('@adonisjs/lucid/src/Lucid/Model')} */ +const Model = use('Model') + +class User extends Model { + static boot () { + super.boot() + + /** + * A hook to hash the user password before saving + * it to the database. + */ + this.addHook('beforeSave', async (userInstance) => { + if (userInstance.dirty.password) { + userInstance.password = await Hash.make(userInstance.password) + } + }) + } + + /** + * A relationship on tokens is required for auth to + * work. Since features like `refreshTokens` or + * `rememberToken` will be saved inside the + * tokens table. + * + * @method tokens + * + * @return {Object} + */ + tokens () { + return this.hasMany('App/Models/Token') + } +} + +module.exports = User diff --git a/config/app.js b/config/app.js new file mode 100644 index 0000000..42c63a3 --- /dev/null +++ b/config/app.js @@ -0,0 +1,243 @@ +'use strict' + +/** @type {import('@adonisjs/framework/src/Env')} */ +const Env = use('Env') + +module.exports = { + + /* + |-------------------------------------------------------------------------- + | Application Name + |-------------------------------------------------------------------------- + | + | This value is the name of your application and can be used when you + | need to place the application's name in a email, view or + | other location. + | + */ + + name: Env.get('APP_NAME', 'AdonisJs'), + + /* + |-------------------------------------------------------------------------- + | App Key + |-------------------------------------------------------------------------- + | + | App key is a randomly generated 16 or 32 characters long string required + | to encrypted cookies, sessions and other sensitive data. + | + */ + appKey: Env.getOrFail('APP_KEY'), + + http: { + /* + |-------------------------------------------------------------------------- + | Allow Method Spoofing + |-------------------------------------------------------------------------- + | + | Method spoofing allows you to make requests by spoofing the http verb. + | Which means you can make a GET request but instruct the server to + | treat as a POST or PUT request. If you want this feature, set the + | below value to true. + | + */ + allowMethodSpoofing: true, + + /* + |-------------------------------------------------------------------------- + | Trust Proxy + |-------------------------------------------------------------------------- + | + | Trust proxy defines whether X-Forwarded-* headers should be trusted or not. + | When your application is behind a proxy server like nginx, these values + | are set automatically and should be trusted. Apart from setting it + | to true or false Adonis supports a handful of ways to allow proxy + | values. Read documentation for that. + | + */ + trustProxy: false, + + /* + |-------------------------------------------------------------------------- + | Subdomains + |-------------------------------------------------------------------------- + | + | Offset to be used for returning subdomains for a given request. For + | majority of applications it will be 2, until you have nested + | sudomains. + | cheatsheet.adonisjs.com - offset - 2 + | virk.cheatsheet.adonisjs.com - offset - 3 + | + */ + subdomainOffset: 2, + + /* + |-------------------------------------------------------------------------- + | JSONP Callback + |-------------------------------------------------------------------------- + | + | Default jsonp callback to be used when callback query string is missing + | in request url. + | + */ + jsonpCallback: 'callback', + + + /* + |-------------------------------------------------------------------------- + | Etag + |-------------------------------------------------------------------------- + | + | Set etag on all HTTP responses. In order to disable for selected routes, + | you can call the `response.send` with an options object as follows. + | + | response.send('Hello', { ignoreEtag: true }) + | + */ + etag: false + }, + + views: { + /* + |-------------------------------------------------------------------------- + | Cache Views + |-------------------------------------------------------------------------- + | + | Define whether or not to cache the compiled view. Set it to true in + | production to optimize view loading time. + | + */ + cache: Env.get('CACHE_VIEWS', true) + }, + + static: { + /* + |-------------------------------------------------------------------------- + | Dot Files + |-------------------------------------------------------------------------- + | + | Define how to treat dot files when trying to serve static resources. + | By default it is set to ignore, which will pretend that dotfiles + | do not exist. + | + | Can be one of the following + | ignore, deny, allow + | + */ + dotfiles: 'ignore', + + /* + |-------------------------------------------------------------------------- + | ETag + |-------------------------------------------------------------------------- + | + | Enable or disable etag generation + | + */ + etag: true, + + /* + |-------------------------------------------------------------------------- + | Extensions + |-------------------------------------------------------------------------- + | + | Set file extension fallbacks. When set, if a file is not found, the given + | extensions will be added to the file name and search for. The first + | that exists will be served. Example: ['html', 'htm']. + | + */ + extensions: false + }, + + locales: { + /* + |-------------------------------------------------------------------------- + | Loader + |-------------------------------------------------------------------------- + | + | The loader to be used for fetching and updating locales. Below is the + | list of available options. + | + | file, database + | + */ + loader: 'file', + + /* + |-------------------------------------------------------------------------- + | Default Locale + |-------------------------------------------------------------------------- + | + | Default locale to be used by Antl provider. You can always switch drivers + | in runtime or use the official Antl middleware to detect the driver + | based on HTTP headers/query string. + | + */ + locale: 'en' + }, + + logger: { + /* + |-------------------------------------------------------------------------- + | Transport + |-------------------------------------------------------------------------- + | + | Transport to be used for logging messages. You can have multiple + | transports using same driver. + | + | Available drivers are: `file` and `console`. + | + */ + transport: 'console', + + /* + |-------------------------------------------------------------------------- + | Console Transport + |-------------------------------------------------------------------------- + | + | Using `console` driver for logging. This driver writes to `stdout` + | and `stderr` + | + */ + console: { + driver: 'console', + name: 'adonis-app', + level: 'info' + }, + + /* + |-------------------------------------------------------------------------- + | File Transport + |-------------------------------------------------------------------------- + | + | File transport uses file driver and writes log messages for a given + | file inside `tmp` directory for your app. + | + | For a different directory, set an absolute path for the filename. + | + */ + file: { + driver: 'file', + name: 'adonis-app', + filename: 'adonis.log', + level: 'info' + } + }, + + /* + |-------------------------------------------------------------------------- + | Generic Cookie Options + |-------------------------------------------------------------------------- + | + | The following cookie options are generic settings used by AdonisJs to create + | cookies. However, some parts of the application like `sessions` can have + | seperate settings for cookies inside `config/session.js`. + | + */ + cookie: { + httpOnly: true, + sameSite: false, + path: '/', + maxAge: 7200 + } +} diff --git a/config/auth.js b/config/auth.js new file mode 100644 index 0000000..5fceb35 --- /dev/null +++ b/config/auth.js @@ -0,0 +1,94 @@ +'use strict' + +/** @type {import('@adonisjs/framework/src/Env')} */ +const Env = use('Env') + +module.exports = { + /* + |-------------------------------------------------------------------------- + | Authenticator + |-------------------------------------------------------------------------- + | + | Authentication is a combination of serializer and scheme with extra + | config to define on how to authenticate a user. + | + | Available Schemes - basic, session, jwt, api + | Available Serializers - lucid, database + | + */ + authenticator: 'session', + + /* + |-------------------------------------------------------------------------- + | Session + |-------------------------------------------------------------------------- + | + | Session authenticator makes use of sessions to authenticate a user. + | Session authentication is always persistent. + | + */ + session: { + serializer: 'lucid', + model: 'App/Models/User', + scheme: 'session', + uid: 'email', + password: 'password' + }, + + /* + |-------------------------------------------------------------------------- + | Basic Auth + |-------------------------------------------------------------------------- + | + | The basic auth authenticator uses basic auth header to authenticate a + | user. + | + | NOTE: + | This scheme is not persistent and users are supposed to pass + | login credentials on each request. + | + */ + basic: { + serializer: 'lucid', + model: 'App/Models/User', + scheme: 'basic', + uid: 'email', + password: 'password' + }, + + /* + |-------------------------------------------------------------------------- + | Jwt + |-------------------------------------------------------------------------- + | + | The jwt authenticator works by passing a jwt token on each HTTP request + | via HTTP `Authorization` header. + | + */ + jwt: { + serializer: 'lucid', + model: 'App/Models/User', + scheme: 'jwt', + uid: 'email', + password: 'password', + options: { + secret: Env.get('APP_KEY') + } + }, + + /* + |-------------------------------------------------------------------------- + | Api + |-------------------------------------------------------------------------- + | + | The Api scheme makes use of API personal tokens to authenticate a user. + | + */ + api: { + serializer: 'lucid', + model: 'App/Models/User', + scheme: 'api', + uid: 'email', + password: 'password' + } +} diff --git a/config/bodyParser.js b/config/bodyParser.js new file mode 100644 index 0000000..6b40f1a --- /dev/null +++ b/config/bodyParser.js @@ -0,0 +1,157 @@ +'use strict' + +module.exports = { + /* + |-------------------------------------------------------------------------- + | JSON Parser + |-------------------------------------------------------------------------- + | + | Below settings are applied when request body contains JSON payload. If + | you want body parser to ignore JSON payload, then simply set `types` + | to an empty array. + */ + json: { + /* + |-------------------------------------------------------------------------- + | limit + |-------------------------------------------------------------------------- + | + | Defines the limit of JSON that can be sent by the client. If payload + | is over 1mb it will not be processed. + | + */ + limit: '1mb', + + /* + |-------------------------------------------------------------------------- + | strict + |-------------------------------------------------------------------------- + | + | When `scrict` is set to true, body parser will only parse Arrays and + | Object. Otherwise everything parseable by `JSON.parse` is parsed. + | + */ + strict: true, + + /* + |-------------------------------------------------------------------------- + | types + |-------------------------------------------------------------------------- + | + | Which content types are processed as JSON payloads. You are free to + | add your own types here, but the request body should be parseable + | by `JSON.parse` method. + | + */ + types: [ + 'application/json', + 'application/json-patch+json', + 'application/vnd.api+json', + 'application/csp-report' + ] + }, + + /* + |-------------------------------------------------------------------------- + | Raw Parser + |-------------------------------------------------------------------------- + | + | + | + */ + raw: { + types: [ + 'text/*' + ] + }, + + /* + |-------------------------------------------------------------------------- + | Form Parser + |-------------------------------------------------------------------------- + | + | + | + */ + form: { + types: [ + 'application/x-www-form-urlencoded' + ] + }, + + /* + |-------------------------------------------------------------------------- + | Files Parser + |-------------------------------------------------------------------------- + | + | + | + */ + files: { + types: [ + 'multipart/form-data' + ], + + /* + |-------------------------------------------------------------------------- + | Max Size + |-------------------------------------------------------------------------- + | + | Below value is the max size of all the files uploaded to the server. It + | is validated even before files have been processed and hard exception + | is thrown. + | + | Consider setting a reasonable value here, otherwise people may upload GB's + | of files which will keep your server busy. + | + | Also this value is considered when `autoProcess` is set to true. + | + */ + maxSize: '20mb', + + /* + |-------------------------------------------------------------------------- + | Auto Process + |-------------------------------------------------------------------------- + | + | Whether or not to auto-process files. Since HTTP servers handle files via + | couple of specific endpoints. It is better to set this value off and + | manually process the files when required. + | + | This value can contain a boolean or an array of route patterns + | to be autoprocessed. + */ + autoProcess: true, + + /* + |-------------------------------------------------------------------------- + | Process Manually + |-------------------------------------------------------------------------- + | + | The list of routes that should not process files and instead rely on + | manual process. This list should only contain routes when autoProcess + | is to true. Otherwise everything is processed manually. + | + */ + processManually: [] + + /* + |-------------------------------------------------------------------------- + | Temporary file name + |-------------------------------------------------------------------------- + | + | Define a function, which should return a string to be used as the + | tmp file name. + | + | If not defined, Bodyparser will use `uuid` as the tmp file name. + | + | To be defined as. If you are defining the function, then do make sure + | to return a value from it. + | + | tmpFileName () { + | return 'some-unique-value' + | } + | + */ + } +} diff --git a/config/cors.js b/config/cors.js new file mode 100644 index 0000000..4c3848e --- /dev/null +++ b/config/cors.js @@ -0,0 +1,87 @@ +'use strict' + +module.exports = { + /* + |-------------------------------------------------------------------------- + | Origin + |-------------------------------------------------------------------------- + | + | Set a list of origins to be allowed. The value can be one of the following + | + | Boolean: true - Allow current request origin + | Boolean: false - Disallow all + | String - Comma seperated list of allowed origins + | Array - An array of allowed origins + | String: * - A wildcard to allow current request origin + | Function - Receives the current origin and should return one of the above values. + | + */ + origin: false, + + /* + |-------------------------------------------------------------------------- + | Methods + |-------------------------------------------------------------------------- + | + | HTTP methods to be allowed. The value can be one of the following + | + | String - Comma seperated list of allowed methods + | Array - An array of allowed methods + | + */ + methods: ['GET', 'PUT', 'PATCH', 'POST', 'DELETE'], + + /* + |-------------------------------------------------------------------------- + | Headers + |-------------------------------------------------------------------------- + | + | List of headers to be allowed via Access-Control-Request-Headers header. + | The value can be on of the following. + | + | Boolean: true - Allow current request headers + | Boolean: false - Disallow all + | String - Comma seperated list of allowed headers + | Array - An array of allowed headers + | String: * - A wildcard to allow current request headers + | Function - Receives the current header and should return one of the above values. + | + */ + headers: true, + + /* + |-------------------------------------------------------------------------- + | Expose Headers + |-------------------------------------------------------------------------- + | + | A list of headers to be exposed via `Access-Control-Expose-Headers` + | header. The value can be on of the following. + | + | Boolean: false - Disallow all + | String: Comma seperated list of allowed headers + | Array - An array of allowed headers + | + */ + exposeHeaders: false, + + /* + |-------------------------------------------------------------------------- + | Credentials + |-------------------------------------------------------------------------- + | + | Define Access-Control-Allow-Credentials header. It should always be a + | boolean. + | + */ + credentials: false, + + /* + |-------------------------------------------------------------------------- + | MaxAge + |-------------------------------------------------------------------------- + | + | Define Access-Control-Allow-Max-Age + | + */ + maxAge: 90 +} diff --git a/config/database.js b/config/database.js new file mode 100644 index 0000000..e9cb916 --- /dev/null +++ b/config/database.js @@ -0,0 +1,81 @@ +'use strict' + +/** @type {import('@adonisjs/framework/src/Env')} */ +const Env = use('Env') + +/** @type {import('@adonisjs/ignitor/src/Helpers')} */ +const Helpers = use('Helpers') + +module.exports = { + /* + |-------------------------------------------------------------------------- + | Default Connection + |-------------------------------------------------------------------------- + | + | Connection defines the default connection settings to be used while + | interacting with SQL databases. + | + */ + connection: Env.get('DB_CONNECTION', 'sqlite'), + + /* + |-------------------------------------------------------------------------- + | Sqlite + |-------------------------------------------------------------------------- + | + | Sqlite is a flat file database and can be good choice under development + | environment. + | + | npm i --save sqlite3 + | + */ + sqlite: { + client: 'sqlite3', + connection: { + filename: Helpers.databasePath(`${Env.get('DB_DATABASE', 'development')}.sqlite`) + }, + useNullAsDefault: true + }, + + /* + |-------------------------------------------------------------------------- + | MySQL + |-------------------------------------------------------------------------- + | + | Here we define connection settings for MySQL database. + | + | npm i --save mysql + | + */ + mysql: { + client: 'mysql', + connection: { + host: Env.get('DB_HOST', 'localhost'), + port: Env.get('DB_PORT', ''), + user: Env.get('DB_USER', 'root'), + password: Env.get('DB_PASSWORD', ''), + database: Env.get('DB_DATABASE', 'adonis') + } + }, + + /* + |-------------------------------------------------------------------------- + | PostgreSQL + |-------------------------------------------------------------------------- + | + | Here we define connection settings for PostgreSQL database. + | + | npm i --save pg + | + */ + pg: { + client: 'pg', + connection: { + host: Env.get('DB_HOST', 'localhost'), + port: Env.get('DB_PORT', ''), + user: Env.get('DB_USER', 'root'), + password: Env.get('DB_PASSWORD', ''), + database: Env.get('DB_DATABASE', 'adonis') + } + } +} diff --git a/config/hash.js b/config/hash.js new file mode 100644 index 0000000..42f5805 --- /dev/null +++ b/config/hash.js @@ -0,0 +1,49 @@ +'use strict' + +/** @type {import('@adonisjs/framework/src/Env')} */ +const Env = use('Env') + +module.exports = { + /* + |-------------------------------------------------------------------------- + | Driver + |-------------------------------------------------------------------------- + | + | Driver to be used for hashing values. The same driver is used by the + | auth module too. + | + */ + driver: Env.get('HASH_DRIVER', 'bcrypt'), + + /* + |-------------------------------------------------------------------------- + | Bcrypt + |-------------------------------------------------------------------------- + | + | Config related to bcrypt hashing. https://www.npmjs.com/package/bcrypt + | package is used internally. + | + */ + bcrypt: { + rounds: 10 + }, + + /* + |-------------------------------------------------------------------------- + | Argon + |-------------------------------------------------------------------------- + | + | Config related to argon. https://www.npmjs.com/package/argon2 package is + | used internally. + | + | Since argon is optional, you will have to install the dependency yourself + | + |============================================================================ + | npm i argon2 + |============================================================================ + | + */ + argon: { + type: 1 + } +} diff --git a/config/session.js b/config/session.js new file mode 100644 index 0000000..30d6bab --- /dev/null +++ b/config/session.js @@ -0,0 +1,101 @@ +'use strict' + +/** @type {import('@adonisjs/framework/src/Env')} */ +const Env = use('Env') + +module.exports = { + /* + |-------------------------------------------------------------------------- + | Session Driver + |-------------------------------------------------------------------------- + | + | The session driver to be used for storing session values. It can be + | cookie, file or redis. + | + | For `redis` driver, make sure to install and register `@adonisjs/redis` + | + */ + driver: Env.get('SESSION_DRIVER', 'cookie'), + + /* + |-------------------------------------------------------------------------- + | Cookie Name + |-------------------------------------------------------------------------- + | + | The name of the cookie to be used for saving session id. Session ids + | are signed and encrypted. + | + */ + cookieName: 'adonis-session', + + /* + |-------------------------------------------------------------------------- + | Clear session when browser closes + |-------------------------------------------------------------------------- + | + | If this value is true, the session cookie will be temporary and will be + | removed when browser closes. + | + */ + clearWithBrowser: true, + + /* + |-------------------------------------------------------------------------- + | Session age + |-------------------------------------------------------------------------- + | + | This value is only used when `clearWithBrowser` is set to false. The + | age must be a valid https://npmjs.org/package/ms string or should + | be in milliseconds. + | + | Valid values are: + | '2h', '10d', '5y', '2.5 hrs' + | + */ + age: '2h', + + /* + |-------------------------------------------------------------------------- + | Cookie options + |-------------------------------------------------------------------------- + | + | Cookie options defines the options to be used for setting up session + | cookie + | + */ + cookie: { + httpOnly: true, + sameSite: false, + path: '/' + }, + + /* + |-------------------------------------------------------------------------- + | Sessions location + |-------------------------------------------------------------------------- + | + | If driver is set to file, we need to define the relative location from + | the temporary path or absolute url to any location. + | + */ + file: { + location: 'sessions' + }, + + /* + |-------------------------------------------------------------------------- + | Redis config + |-------------------------------------------------------------------------- + | + | The configuration for the redis driver. By default we reference it from + | the redis file. But you are free to define an object here too. + | + */ + redis: { + host: '127.0.0.1', + port: 6379, + password: null, + db: 0, + keyPrefix: '' + } +} diff --git a/config/shield.js b/config/shield.js new file mode 100644 index 0000000..255cee3 --- /dev/null +++ b/config/shield.js @@ -0,0 +1,145 @@ +'use strict' + +module.exports = { + /* + |-------------------------------------------------------------------------- + | Content Security Policy + |-------------------------------------------------------------------------- + | + | Content security policy filters out the origins not allowed to execute + | and load resources like scripts, styles and fonts. There are wide + | variety of options to choose from. + */ + csp: { + /* + |-------------------------------------------------------------------------- + | Directives + |-------------------------------------------------------------------------- + | + | All directives are defined in camelCase and here is the list of + | available directives and their possible values. + | + | https://content-security-policy.com + | + | @example + | directives: { + | defaultSrc: ['self', '@nonce', 'cdnjs.cloudflare.com'] + | } + | + */ + directives: { + }, + /* + |-------------------------------------------------------------------------- + | Report only + |-------------------------------------------------------------------------- + | + | Setting `reportOnly=true` will not block the scripts from running and + | instead report them to a URL. + | + */ + reportOnly: false, + /* + |-------------------------------------------------------------------------- + | Set all headers + |-------------------------------------------------------------------------- + | + | Headers staring with `X` have been depreciated, since all major browsers + | supports the standard CSP header. So its better to disable deperciated + | headers, unless you want them to be set. + | + */ + setAllHeaders: false, + + /* + |-------------------------------------------------------------------------- + | Disable on android + |-------------------------------------------------------------------------- + | + | Certain versions of android are buggy with CSP policy. So you can set + | this value to true, to disable it for Android versions with buggy + | behavior. + | + | Here is an issue reported on a different package, but helpful to read + | if you want to know the behavior. https://github.com/helmetjs/helmet/pull/82 + | + */ + disableAndroid: true + }, + + /* + |-------------------------------------------------------------------------- + | X-XSS-Protection + |-------------------------------------------------------------------------- + | + | X-XSS Protection saves applications from XSS attacks. It is adopted + | by IE and later followed by some other browsers. + | + | Learn more at https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection + | + */ + xss: { + enabled: true, + enableOnOldIE: false + }, + + /* + |-------------------------------------------------------------------------- + | Iframe Options + |-------------------------------------------------------------------------- + | + | xframe defines whether or not your website can be embedded inside an + | iframe. Choose from one of the following options. + | @available options + | DENY, SAMEORIGIN, ALLOW-FROM http://example.com + | + | Learn more at https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options + */ + xframe: 'DENY', + + /* + |-------------------------------------------------------------------------- + | No Sniff + |-------------------------------------------------------------------------- + | + | Browsers have a habit of sniffing content-type of a response. Which means + | files with .txt extension containing Javascript code will be executed as + | Javascript. You can disable this behavior by setting nosniff to false. + | + | Learn more at https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options + | + */ + nosniff: true, + + /* + |-------------------------------------------------------------------------- + | No Open + |-------------------------------------------------------------------------- + | + | IE users can execute webpages in the context of your website, which is + | a serious security risk. Below option will manage this for you. + | + */ + noopen: true, + + /* + |-------------------------------------------------------------------------- + | CSRF Protection + |-------------------------------------------------------------------------- + | + | CSRF Protection adds another layer of security by making sure, actionable + | routes does have a valid token to execute an action. + | + */ + csrf: { + enable: true, + methods: ['POST', 'PUT', 'DELETE'], + filterUris: [], + cookieOptions: { + httpOnly: false, + sameSite: true, + path: '/', + maxAge: 7200 + } + } +} diff --git a/database/factory.js b/database/factory.js new file mode 100644 index 0000000..16b5084 --- /dev/null +++ b/database/factory.js @@ -0,0 +1,21 @@ +'use strict' + +/* +|-------------------------------------------------------------------------- +| Factory +|-------------------------------------------------------------------------- +| +| Factories are used to define blueprints for database tables or Lucid +| models. Later you can use these blueprints to seed your database +| with dummy data. +| +*/ + +/** @type {import('@adonisjs/lucid/src/Factory')} */ +// const Factory = use('Factory') + +// Factory.blueprint('App/Models/User', (faker) => { +// return { +// username: faker.username() +// } +// }) diff --git a/database/migrations/1503248427885_user.js b/database/migrations/1503248427885_user.js new file mode 100644 index 0000000..1ade2f5 --- /dev/null +++ b/database/migrations/1503248427885_user.js @@ -0,0 +1,22 @@ +'use strict' + +/** @type {import('@adonisjs/lucid/src/Schema')} */ +const Schema = use('Schema') + +class UserSchema extends Schema { + up () { + this.create('users', (table) => { + table.increments() + table.string('username', 80).notNullable().unique() + table.string('email', 254).notNullable().unique() + table.string('password', 60).notNullable() + table.timestamps() + }) + } + + down () { + this.drop('users') + } +} + +module.exports = UserSchema diff --git a/database/migrations/1503248427886_token.js b/database/migrations/1503248427886_token.js new file mode 100644 index 0000000..c8bb9fc --- /dev/null +++ b/database/migrations/1503248427886_token.js @@ -0,0 +1,23 @@ +'use strict' + +/** @type {import('@adonisjs/lucid/src/Schema')} */ +const Schema = use('Schema') + +class TokensSchema extends Schema { + up () { + this.create('tokens', (table) => { + table.increments() + table.integer('user_id').unsigned().references('id').inTable('users') + table.string('token', 255).notNullable().unique().index() + table.string('type', 80).notNullable() + table.boolean('is_revoked').defaultTo(false) + table.timestamps() + }) + } + + down () { + this.drop('tokens') + } +} + +module.exports = TokensSchema diff --git a/package.json b/package.json new file mode 100644 index 0000000..00f6deb --- /dev/null +++ b/package.json @@ -0,0 +1,34 @@ +{ + "name": "adonis-fullstack-app", + "version": "4.1.0", + "adonis-version": "4.1.0", + "description": "The fullstack application boilerplate for Adonisjs", + "main": "index.js", + "scripts": { + "start": "node server.js", + "test": "node ace test" + }, + "keywords": [ + "adonisjs", + "adonis-app" + ], + "author": "", + "license": "UNLICENSED", + "private": true, + "dependencies": { + "@adonisjs/ace": "^5.0.8", + "@adonisjs/auth": "^3.0.7", + "@adonisjs/bodyparser": "^2.0.5", + "@adonisjs/cors": "^1.0.7", + "@adonisjs/fold": "^4.0.9", + "@adonisjs/framework": "^5.0.9", + "@adonisjs/ignitor": "^2.0.8", + "@adonisjs/lucid": "^6.1.3", + "@adonisjs/session": "^1.0.27", + "@adonisjs/shield": "^1.0.8" + }, + "devDependencies": {}, + "autoload": { + "App": "./app" + } +} diff --git a/public/logo.svg b/public/logo.svg new file mode 100644 index 0000000..c8be274 --- /dev/null +++ b/public/logo.svg @@ -0,0 +1 @@ + diff --git a/public/pyramid.png b/public/pyramid.png new file mode 100644 index 0000000000000000000000000000000000000000..369ab18b77161f14a7df262e53af6f54267c9573 GIT binary patch literal 113407 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 z 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

urEzhScE zfN-qP8HUvj^(oFb#cG7$PstDx?Vy!2od)1IFd5fpvn=wsq2hiMC=>7-NLESiH|iQO zFY}!rD+30CD_cT*(+36ns8${8XG9D;i;sc7eJJL*D4MQvi+|G@s{}N|FSjzXVXY__ z2RQ359TXbFTHFZ1(kPz+Ksni}gJyM}A_|tab@)X6G}j%R>~GuHb-aif~F8mY8Ko&tZCT~Ij=Bncy5X=m8IvFP7oHp zsIdaUnT9GKCWZ}$i_yMPzoB$`zPf&T`a=3x6(HeCoHFbO<%d@IeEqWO1R_EYj8DiL z2ErMiwv|lZC*^ju5r8b&3SLZk^c(66<)O*(AvbP71**9F6Y_qBO*n1RLXm-J;l_QD z7Wr6tOk+@iFfPbe1{1pEj;o}jY!X(f2w)VA+aa>vxn+kU<9c@a>^Bhab_V@!r}wlJ z)YZkmdE+-%R#uv%ZNPl{lHO7UYR;-SytTx)Ic3_A;b!y2~@ zALG~$+)N<)VM$D3Z=H}lEBzX&*7)XS-?BFOOzT!8kT2n+P?EQ4T_aISuo*i#NG2dj z8Mqh_5_T!cuoe<;>cwfm;fM=gzpN~vz>tK2Aa0o$8b}<9Kr&6vpr$2cT?<7y0j`O& z@ts$4bsBV0TFU)qc8ERMlW*8@`1O2naNMrht~Xi~F+d#v@);%(pD56`5)x6xJ9lvhY#)H5(FDx&v%;#4}L>l}7wZIFuVcM=u3495y<#y^NB4 zZ}0N)^&9s;ynol8hkyQG{ru_3TPY!~p72|yU_5x|%F@wiAN#(JPMX9+@RQX8aev|2 z%;HP}oHn>6y!mVfuMLjr<5z9Z0zjY$m*pq9Eq#;NEDo}b<7L`F47Wapsi^?9f<&QE z3&4>nVom(J==2m&pxD!(Vs8t2M9hwXFzWQox-99t=CBg?_$0E^FIH{7JdnkD>k z(dG|leq}z23`^`OGku16x5{-=6UXh6iLDaj1(Ajy%eDc~jOsW_51RU+9^-KWi>rvG z=q$fMQwSzC3+^~r({%ooqHVg+n_A>@MFBxVp&*d4tq?emxM0{Cp>og1WXVvR;JL<{ zzEPrhL7Uti+HP1>A3Lk(e>qR|B@8UWWjyG_fz2vir70dNG!HPLNsf38Py+qtWht>J z1EUXLz-|oop<9ND8a93)oaH;HoW@CYlw34n(WZa3IvrsmO{T zwHfwx;3*kc)x@NK+v~J-dLwZreUyr*ALX!3GS0CQf@`ydLSdfKb_-`QfG@XZx}9}V z`jg&{#nr$2whxWcIUPTEP_9ZK-{_G%O1n)1Sb3|Yq~kDjDq2p&C($k#DN+MAh<(75 zOb(DTo7+HZHuQ94~H)8{mhVc$r<$utXPq`E3=KEeq{`^4EN=)K(BNy!NJ_YKdVR4WZlG)+7Eby{V1C`WLs%9d6lOPEcEU(tmOwn@T-w+i-x;&n&C z$}6wnG~8gRqeZ+}wdi*S$F?nY5AWM|;NidX=&zh5|L=9b(uj67CcY&K#&_@i!iRbn z*YBhOP|xAq8tgkG166Z_(yP8WLcoMZeS_E^&D|IS&dywn6q8I1|ZpKgh?;s3cFp}AAtdO23N8*+KeQOHsY6buQa`~N)m1T zMqAcx5w-u_Y6~1}q&=OK!W{;)nCPtlWIrh+5?gsptQQynN|>tRds?~RQ|oGpRC)-I z`pt39L0E|x;UOR;L|-zoO5u$GJ`(7tdjX^K*1&epr#LaNy;%W&%TsCS~6whY*uP!Al_aCqt*) zP4miS+MsB-tdLhY=x3j-HqJ5u+ZG4dga-zpA3xFKFx|z)%kh;!mW79tyK$s6Y4GQeW;neCGO)1cJh{fepXMY( zlxql=-lB%_&4eh~t9rY=Rs%cq7&fKr^>qTlEr ztE*{cXcREYr5iky5}c#zYi!%La+Ac>xRM%4210hMgHBX121geg0St1D?g zxRoGRFHl44+nTWJ|Kah!v~AGcQ&OovhiI~XqV-H8D&24N0jhYkFW`fK0XO<}l2gEg zfN@%oA7N-bCr;&+5vr9t#T#)fi2TNSFvBr^W)r!M^y_%hVM&Cc_C&R;=`g8i`Rrq^ z>1`)m1rK$&l^heu@OPMp8RFfSm%=^-CFc!2T`wELfVZfDk-cDea&410!Q_B5Pf`dE zDuY1405W0}-%;DH?)J|z&v5HHSgwN@~al+C}`x#0UFILd%x z(Qw^VXDPJgwe!i|j-}PV|L{L}KHy)8-*?4NZgE$pET7;1;QJQO_dnk6=<>`2lJPKU zdnF8!$jE+?nI3-1&h4_qoEiqdAlC{WAd9qF+=+}_Rsn^4W(Lw2fdeHAGX|uQrD5$i z0#$`nKyNZ}?JEWapn1Dud6q#h3tGXODn8B`#LG0tdvQ)9%qI(WxXMuCYF}2X3@8`4 zxEUf^9Bi!kkMJ?i(l2=jnfPJiUy6Yb+LXys8W%8!q0tmBVF;(w_b=<7KOZ>*i?^lG z2|dxeQEy8w7w1nfx87#33?>tPKCA)%rNy<*Yk6X80%ghGr6C`QaAjIb(XTTN&=hwX z1adgf2SGIGmc)T6B5?$NfTzKa;|r=FHx>#-D~q{;W6yAsDBd+Iput zCv2g!0Fb-b@;o`@lfQ za0=EOITu9hqUvc7uqFIJ1OB$ozU{J>9}hdpG*G>tzeKsl)2*>-jH=&t-oIn1^X&PH zooOE$fOF|mO-v|VdIUohSFh9Ui*U5f+c;kmAG;k5;{U#jPBXF-*Ga6A2m0Yt4JCQM!9JbyO$2hHH0=o?>O zz^dxTX(&F(OB}p)$#u;F{RV}itK$Ucqpc_S;S<@R_I+^I?#?dxm(&;5MF)J~aAlad z-r%FoQ@>eH^TfaozQ}bcd5tHc&FUgG-Y9v4tJWfAGZ@zVd(mzo!qs^lzU0H%X&wLGGOh za>W#kOaI~ezbJFyx0jXRhk(!Duo;$6!@;A1Gory9cR$F)JeZB6YxL4Lsm%^1;Ai$F z*@@vMUyjS`*wQMx$z|hAwe%%YtO#kvcS%L>rjCDq!!nZK*sc zK1#cwPJK>)jjkjeSm4+>oczn8&FaD>4OAyCUMN;jkPVn_C<52--Yw;-8-Lemuskc} z2DuW9X?r@d?{xDd?r>Vw+oN(NEjiIbX}fUgqTndR=G{e2JYC7RLxbfTmw9^4j`VSy zjFTj5#;;Nh>;#BX4Y*W|@wnshDNbLd`e-`wxLqyvs!J3m{=&NaGpUJ4Eizps{8?zC zU?367!=Sqm3dK3KFK!>5Gagkc!^;0TI1@o+P9Spo>GL7 zJLsx{nRxXVa)vK{C=$@sB;FU?UbWS({HSQrxTv;pRtnA_2ESt-JogmY3#6DyBNVS$yD1o7X#ZLxEM6sAQLYEfmR-<-RM!kg$q z%8CZzQrQ?A7Fsu2V`MtE{k?DtVJ1BcKti4k0K^HqLy?{4N21Z6Z$GQT~fbsnGzp(C&&PgFh;t{ zJ&Jn%H5y+eWJ1vI&{{AxoQsrmjVm2%P48@v_j*gKzxdK`rmum#RFQbk1bAXwas#dL zet!9(AJp=k>vk$VKdNa6hJ)Z(SOaB0ys^OJMKhW45Y0IyUR$=tX$#-P85$$_WkSxF zg^yulAQFC%%bk{R8lXly6K4nFV?cuERt%l|yp{z+xj?=GpP^`3d#Biks0JD6>fdOW z55$;QpXU?uq5TD6F4Re!*8HZ zIkSwQ)bmSzC{CxP1ob$v&*)xJC7fJ*zkxwb4rQdL{b%-^q1)t2`sClC<@duP9^@Mk z8fv@&DkZth_BY7j3{$AbosLf)RYe#-!{%nPvEqPh>CD#t202^Ose_rG{bssqqm)V$ zAroS5ttwxd+>#Hb{`CK%CTZw#xG>cQ*HqOnzz^(13n&h2av*r^G7~G=&`-{NH74Xp zO1C9mJaS(@ofl7V?J`Z?iB#g3Xy?gZw9H$; z0ale&vACVCl^A+s@KgD;&`{Mw;3Tx*1%beqY(Y2plPWio#y4En;&uxbPMfTDg2H&f z;ZsCgLWx(uIifM7k~!)iik+n&hAS8d6%KL3MvogSmhWB{i|08z3%EQcU|+? z-~Pidu{8Ofc3W03zH7%9zGtC3I7kKaFzmOfRX-H)rnyGgGSQ54nzIn9qHmZ9%qqML zQ{hg)aaM`j2CsyNMjIU9jOR8V{iaF;qHvk0v&Zs)SnhyY+54rDch za+-cw42OfRBQ^hw6oBnI9G7frX!Rsct#8EOu-X2dy5c5gEUhw_x!l1&({&ghhpmuM z$WnCV7Z~=0V^WG7KFMv&1d1f4Ns7aULN&QfIL|PVWnkw4k28%FYyVrXg*x30ltN+c{f9=(v^Wp}k@5zMJ!Zum-@7ncKhq{+f z-)D3l8*cRRrL;-E#skI=b{xE6N8p@jzeb2Y6NH5{f;Wyyk#3Tk!P^W@P4q&N$-$6Q zKNZg^py%Q8XA-q&q>{!w#v1^rEJ>!-i5ejfoM0)8O@^?`02A_pS<1^GnuIadCCBor zK=w=7cwJv4jR@(bGab^*EBiqsrxQM>!D){Mvq%>VD=J|qM`5Q0xJtB~;o@UYBu;SP zveNLTlne&6jRQE!Ou9x(Ye!^m#c(U+MBH>Cb?6+nPfi&gLZ)<hi+PCww=vmaO&Kr(m zn-FdN(wQI9ErUiHT0sBY9!=@KKE9JU%>K6XsBVrWdyfk8#_ zC=Wi!&Uc=D(MYhuVQ>;?23IiCDPSu>DxgHWLPDro9-oZIVF!ZHajb!wCa`jNH|8s^ z449_`6Dtjon|?yh3|}NuG`aXGlOr6}ROC|^vA4bfa`pra1YNH|cTr3jG)F$Koyj3C zOWVs_NtB~Z^)n(Llu~s{``@v2O?3jOAKO(So@$AV%{yqAmiGzKEt~KLZ=aOuS7jnTO>RJykPf@XN>0urP5C_FtN@ThpJ6*A zxfb{Vm@w-&C)uJ?j|tQF>YK;cWY404Cy-VgxGL_ep{z6QRO&9T*&n zQlcH5i-xE&u|jt;=Z7}|f0%Ecq@?hhD#syx_ZX#!Hh<)TZRaE`eo>JQY4s$&@~T)e ztmW(PL%7ipSbCw+^U$%_3p&H{Xm?v@^%uVNTdxP)^P|x7*sul~m4jjS_|W~!5B?cl zyt;lo#4v}4gGob$No6HDxZLz`=QeeWS{)(7|`g`ZJf!q1dnn<*KF;#;blDh zHvBv=2M-Vk@Mq^VeEm5K%bl!jCWV2)Om7$YjojxT$PSkW2_|M-C>r*aX2m1$l+LzE zHV_^!7c4neG>b~dyz+K!w{QmH4Cb(%XJ5477;=y%UMLxFD$TC0EbP&n8gDh=vF$)P zPm53a*=oxlG$>QS&vffPZ!woO=%NH55%jAMHPwI_@KD?^mSl75HIR`gZXwkm6YrBQ5m$Pbh%cK1^iASvB?CCS zvV73Pd%b1&NhNEkEjMVrC@x1 z?~m^9T)g;s8`K&;;^}n?tljXjJEhq-j{R|X&Nr1x;U@tk0Qhs5sKa%lh7-&Oc$_u9bAZ)g6Y>8Go(dTh!C_0^O)?rJQcZ?1+W^F?i$5fjD_s7rx{x0yX@2B{ zCpqJ^g|E{}O{ShYj5|MkGjq1vQUO$fkf*;{<+ z(FUG@G!4|sP$nx4Z)SSwStOh+E{K_eybQ}_91Le4cxc0e+Tj!OKC4nl6mN${U-@_KTJHQinGqjRf3iH;%T(HnR3WqoxR_=Aj72jr04{@l zB{@5uvkBSww!O{DrerE~NSm?MwVEFt?75cf93cIwf5Q4e=|)pl`VJJ(7K#TOvtq3ootE znPwnF|6sL)CW^fcM9Dc0$RE;$AAO5{GnB)iz@;*>LKh(=^`(el{`}lp-F(ClKH=5l zCEXNen`5W<2qo8Lg^_0zfAG9kPgei@?YBJnXTQ2qmB`fQe)}4jS;6@1jxXG|I9R`V z5(^#|E;W@Dp7dLPypv$bGku3A@iDA@H`?Gqgbe;1woh^n(|N)fE=R|CC9gIphHnGg z#B)}>=uaY4&08YS*IUZVnpin>h2!96$R(gq7;+_GaE7H)>WjAw_0V)6R767#;31IX ziAhn#qzk5~W}OjB0~vhcWV-wkfGG4zIOryL6p6@&YlH)tG|9$R1_!iu1Ft`pt^*IA z%0~%6mYZ$DTk(Ad(kJ9uq7It+iLyluy6FuFnIc~}BTmtv>SV$3j}ueeN)2iP zC;)>nz&K-bl3g-rkj5%0(+_q+k~2*5Z`P-1_H2PvT)b`=nZu1d&@&v_)w*O5`tES@;QRI{xrUn||`uHDtp3ls6}J7uC2W)+ zYKn7Pj0c?CVnsuCP|tN2dXFscSUkM)^jD4o{R=N8ocZtOYk<0L?LK?p$M!6qyZGIK z;O9I6yKGJqz$$VCX2CJd5@(uNh6Q(I3&k1s-8QpK5!DZVxM_?8WKtQUm1mraPb;iZ zUTtwbIGZO5Rr*+1jcM-OK1)yyG(zC?{0ZJhfDyqM6f(T2I4vf2<(c0wUlXJ{{`I|` z(b=iw# z)cCUMn%XP)q>WZ~x)#pOifEr1hJKU2F9hv`6{yOuuJ=BpJ{)D?9zDHz>z zYd;_hvrAZ_EymcX0`X|=$|mQuCf_)2er@oKgWm?v@FTR1XrXf4uuOWi)vc7@@|i`G zZ+>Ooh@53cEnMQZ#c5NZSW4v8Ch9;xni$hZ(K45^QWOp_WOKTF%VyuAGbp{R0fK=T zKEB5vV=}ZvjKS>M{0VtzFKN}`McLG-6ays!&mZuCn;F#O<{PUbidZ2CS`g3p#tR=L z3l2=?6Ul`0N=%^VFelqD%19DshWUiN&uI+lrY~@^G87diVmmZwzN)htNv6ayYE$*? zGF9>jDNP}uXQ4vKTmT_3Jz&`Dvj_HcUVH6me3ILcl~1{dOmHr`LG4dKnVMyqCE$n{ zO#sub?Q8$dRp|&6XcB(3mD$W*6S9@F0bp@@L@_%*On@snrS& zHbRg=@_4rUP=c%9rzK%l0i-w_Ide+BCCQKoR7SB_!i*XJYZowNm1QN-9dECF$JC68)6MnIGC%GDrvXWv$S$f-=MdA6Yp=v81-g zipX(R(IijeY}EtGmLc)SEP0quujnOeNrt|*Z_)wlbasn=)30uwB(4cE(;cjLJI^jH zY+L>0XTRr99{T-_5M(m4*>#f$I299|2AgzQF1V_oNXk4rDjrr9r01 z5HCM3`)2>T6ead$c^g96h?T0uw!&fXw-OT9Znc8@rdC~OD5h668l?qo*b}gGTz*Iv zc^Z<%GXO(}Vu)stO>`|w!0SgMil6cWH!BthkZA>Bg`vo*&>kij#W}QlK=cpl?dyQn1x;$d&O3&x&7XVtV$+(#!H!_(rf0j%T=t=5VUJ3Nz{<1UGJxH7RHo zlVHeWBEBHQTJAR`p2O+tu^x^R=r`D*V1=%9hP9uHliCV!X=+YWJaJk_`h+|fK;t;v zXbMBvl$R#_R3ZEhX%G98aj`XVu5(rf>F75o>Iphma&VH}2`LwB3DIDems1}*f&wpS z^GUpsFv)1ChMYE*EY#%at3!T?Lhcg~?G8>W_mSR#?T3H)u`eGFJ}>+evzz;GaSbq> zO?7V^ee(wvI^DGKZD^jnpKEFp5qG<-IJ1?hG9d^-NP1L?K+xV=kRaYp-BcSjNC-#kS$wWNuB2BMc zsbux3zWA3gQ-NFz`&7U%oT`JHR6ErMLOE9BJf-kPdlowQsP@eFJUD1g+e#~Rmd2D5 z-=VUB0V;8S5RZwG=yQLL+2~IweWQ?LQ;!4_O*g&M=3MSC4H1fPP^E%}+zI~yEvLNIbSDkJj zx(?$L6(5WlQ4iJ15E<|n491*p-p7U8>{L$nn@1Eq(*z{w>IVUw9%;%`(ov;99Unw< zVgjSjmadLk=CuiL6~Bo`O~fXU=Crynxo-W8H#=V4ch7C=H*xWxnQzNfwjN`(33v&E zGV-Ff7n@vI+?D**^KSyGrG-H-6&6LO?r7IHV^2eTqaGALrhYTLPFu%t+?7ha3_D+R zrLGE9D$z%}6JeXbhotL@QmP|9rzzfO?@!6>5$#BGZW{icqP<32dul%4E& zXoWy!a}!(E)#lT2|H>F;g*mOPwK7b8g6F$FVftR`Irdu0a+T@?A4KF^NNjyjCamoa z^IhqskAk%}Snn@9y|}!%y6dmK@0pdAmAViXbnbr}YG9&*apZ+pzh3}pO*RYXr{~8U z$xbW_P^M+zP&forDH`suC0;FTGA%$yFiX75ek6Zf#CYUS;#tB)hpZDE0Z7DLeh5#Z zJ&6=~ZEzdd*U8r6!e9lX$?ekQCSy%HO{tCi+DbqJJiHlHCb@lFp#*>lPNNzIf=+6} z;|-qjL1Sz=>xC0+IHkwc(yF4s_?GWzIhxy6D>$##q;?K#i~#f{any!N6xn&#M2j8_p%J{HFMQj_4b$){U zjZo2ik}jwGYRrPH>)R}jah{;TEvu!_Z#dwqYuD2pVod8dyVXzPI~rL?&NiHlHoT!l zPGdKcABRNM_h<^KdN@;2mpN4w`8MJ0sxww1nkcxVaTpZS_w*a!n{fD$+b)%Zvqkhv z&O5z$%;!%==>>&B=R|j*`|zISy$`QE^QE-Rvy!;af3Kbz;F&kN@7(?1hu1F-KGK+( z6Ne2YCD05uxDqJ0lStCfNT=O^IGRu=GnzX-R^p9^YR)lkW4SVlVeD^!bq4Uc`~<7X zgvgA}BscJCpkr8kvv0&>Yve?IKoQbG>6h<2IHdfFI{j`SJXmXYKv0+I!vWUfdR3{GKi`zg zYLZzohPenYbg78ISK@*ua!E(Ci;fkd5Vw+>^h30nTQ^+$hBABG3X&*Rjg-zRlX1UN z0YJ4*>CAoVW1o48v<)r1{FVu}-E(-c)^YtO{oY=_I={Bdwm8)7v{SOv>G<4YZRjnx z@{H;PGqL;2$>WioNq86XydqC+=Lt!tS=eAH=@PZ6v?w;wkfB$@q}q{AIjTvG<**mTPJ>) zFnD#7lNypA8if0aJ61Z$gQzFFxwO&uOW)7mXWugPD+5dA^(7-!F{8P8K)4Z~0=~I3 zS{GnPV`~!Fm)Uh(e!T+!wsZ8UTk9y($*x)_dJNgCvsWKG`WYc3QwF>*8L`6Os@wgk z?Kj0`X2N*LoW{s-mXuDU8+-T3QWzaIFk`3i4#*gv7ERa-vzbqim zk-z^SX^&zvx3Cmw$yEhCM9?$u1rv5^c-0lHsmRn^xHFL85oALgQ^-zt2RMh&Iq{d9vl68Z5}vZM-2k303)Lls}$b~~q;5iL7iFPEzCX*&OC zW~1ZiI`4?^fzp79tv-Mh0yv5 z;W`fb;nSJu&lfcZQoYkB3M|A(q(M1P2$g=LMw)ZW-8KY5K)n`#VgJ z%2IYkh#o!@!@y^Uro|1jPNt#y!!6$y=9NMymB6z}0eyPEoArKVW=oB#A)JnD{V>Kd z>*wXR=qs%V!9;w%`pPr+4pgPxog*`|w+!?pW}@3cA|}+K(f(UE(Z6p$(1?GR6z_Oa zHpEOsF*JzA$HO4xs%g&4an%j$Wu#gnN_?8Z)t^{TphRbA=lR>jWQrLQ`b$^X{2`VFR4($kDBF z>1B-`?PSzS?LIRiD{Y2WN)71{EHh5K@N8-}{=uxE9n>8S@y%2Ys^r@-{hThX3*c1I zw=0|&w3ia|#rXcbu(A zFk>VXxcY>W^q8jz+F`%%UWB`22;g;x*_+Ar`mTqh5AcGn7J&z&QV%6OEd}vMMqb9? ztuPDF%NpEml~U2l&4u^0bY$KyqFIveat6Yp-PrCGnDOW%=}SYsB7_LLM^#!NKT;^n z2(|~;$fbDQW9Sld$Mi+N;#Qi&)B~Pnk$L}8=lR^NhnS0?FH?i;^xx5c(ka!j9~qMZ z^U2tG6RDZneYaK)bNRi;y(&+YwOD3w`%SG$FenUl;Ejqeefhj?GaDq|13{hVa$(^( z`5D4C^P)$dSSpC7Gu)}q$FQ!@f4!nx2=qpnv@t$dcPEyZ*ec^Hi?(J#ajNfNnrga# zMmuPw@I$W=0|^JR(-WzPH!i({kqzZ~ZG%dgxGuFG>v&F|6@a@mF1Xl3wSK0sG;9|< zt#zgVu`6^GyN|`a*RM}8dvG<&34c(XH4Ol4(Y7MH8!(z{K5BY?h1i{$Qfl+FPIPXr6Fpj`c@k9$<6DD;?vBa;4`k_Kd+x4KT+5%jr$ z(ZLizVy+vv7dv9iM=!lhByWO>u^;tYa^vNe6cyz(TBFV6DH0zNF>o2fkTHPQ-C7M- z-7mSSplL@?#P^GU!7sO`@4#K_cn?GGg-l{X;=P<7DR?C)>2qx&<>;C`j8Gw#GsTzO zLAYyUWNErGz7*hhC;7I%6fd?uBizcZ#FYYsY5Ui9$ikIu@K#hGrkMmC4P!>}xjBKK zX2BO1>gQDftSeUi$*rk_U3|x#7E84^jc-vur?Vr-V)(L{gBOcYopaFIT~u5fiPOz6|x(EqNPf>VJC9&Y4DcG(|?9_T;nr>b#^vVJMugzw{ zD7s%LmPY?P&4vcIJ2=KgnArp-4`uzZvn6=;ITNdcXyw9XlUtO0>rX*mpKpA&E##$G zB-4T(I7WYJW}Z%|CR+md$3`F<2dL%bTdV$+Vw6C}}>c zjB83Q38f-?({sw@*$?wnhoC%+v7dh8LMbwxwpZl$B{_qAwfU>ed)QeN@|S^wP7jxw zf{NfH+IIo#Ayy=`^55YsNc^vEf<^bf9`Ju5%jrk2Na>RioDLCT2e$PR>pPbI-8HPD zWbDXMzb1W!d4Vf5vMc?!_^7(pemyj5NVv)NQU9;@#|YU5O5M?^WWo4@juAr}Nw2iZ zXcTXuGd$bt12iY9PTlb!gq2n={M8_v@f@vcXpVL1Dh28mfh~4YkV>&5qw>KwM|M2v zF(wacKqH2qUl~OCIgvyr1@)gkqb=-!7XVtz!o!BiW7LalNHaJA!Qp;Mqj;Nx;?K)4twhCg1Lcj|+|* z+npXTaFgo_Ee!4ydjPRqOK8Ms#!;biVWdPEOENnlzaOYl^Os%Ohh%*u0WS*Hh*}sK zZ%Nw#aO*70m1IKWY)Q(T?vs)A=u3(4KYcb+4~1{JS}@=v_lgyJ0LVxXMMb>qj^zt; z&HdHFFsG`(c;1urEH${*XUjNq->;qA+;g8Ni~w=XPR7PQ>3uy?;|K7%R83hqd^6Mm zb$bI{l6xtg9ET8oEqcw-o!&JbMKQ@O&Gk3BT!vJp=N3ycy|m=@m#Ub$k$$118r01K$v{yVw#!_E#^q`4(hnr6aiMT=RDE z8H4GeC4!6@?ncH1IZ`?f> z?_8*){^`ov0k*`;N|9=RF~M&Ci?U5;fiyQ>=gK=(G1b(LS03^?)wlz;_2SsG2X)rK zQCWN97$xl%mF1qexmen)!YM8o&N6d|BDxtW>W;uIg(Zbz!7p;I+tiTGS(lYWkL>Vv zpc7jYtq!NA8e>PJjGjxJ7VEra#pX|{_6)pdcsYo-v9!S&|Jwuzn!{h$($H}UG}UiE zYc;ij({~~ojOzj4wwQZyh`Osiz|`n2OE=5EYruMextcuVb{pgx67V{AwOWG6ke;z= z3^UpA7fmYcf6@=E7CXw$-%+;Uq6aB{jegZm#Ln z--te$IFT~J4htMPVFS=|@9e(5{S?#o1HdwwRMQQ2Yxy1D?z_1U^b!k)!*~|knA+oI zsmJv1Io>#O{nZESDj1Hehl?}a9pN&3K20lRceMy7PK$YA^MYNFsWoS;o2_8Rb+u%q z5E8^!GqS#O(gfW=Sy($?93^CUMvEWa^5rJzpT3SV=ye7PQ!G zT&$-W&b3GvQq(jUkv!~pu)d$9qG-uQUVFUETX)n z_Iv2><7?CD&uy?LQ6I6V=I1kIQY@a!^$s)z^r(Q0uCsEqu%~j7)!qkwdu}wn8hbMx zr3a)Ir`(PG*SM3R&B*gIsT*||aTq~1yw1F~IRkb^qzP9auJ$+UkR5iq!%Bl$Wuy25 zXjaO(MW5XR%Qq_oe;3LdbG|<)j|!pHr4ZV#Xr>b#6H9E|5V#Zj((VGdUnii6ITVL0 z45I;!^MaMAo?h6HX<^W${n_qRb}SyoKw8}y&<3>ZU^{>e*pO8Y9V8yJG+yA|iNN2F zCBz7d&h!oyee95wpu=MXiD3WOv6YBg-9EhY3buNhfMo$}SO^S)*c0I{R4@6lujp5f zKXE<&TwTt5x{IrYU(%}v4wbI1-E(>89#bBRFWs+l2U@ly9mA*LSfre5-BSmkkGr{Z zWMA`ke4KwE4>g^*q(gPjC5H}Cmq|)FvNRIsT(-5JTh?VoH>CI`j-pH$tKHD$F31~W+N)uwD)}Ucw6o@Q#EaQS>7ah zxA9c?Y-i%pUH#;)#gydef+$xnSBVM4(O{yD>&veXqAwj#STqs4baNKC5D2d4`{SrK z5j3WS>`9F1)Y+rJ+x1oIwbf2iiB%w>Wi#*H$!MD2(HM~{=b6AfA4(xGWhSobTF$?1 z8!>ilz?h}S+fGxI1WW}37N1jC<-+wmr#;rr1(ki`J#k(5`vgxuEB`8J-H>_9M$#Bf zCN$cnjCKypSVCR)B$AqgFJ_wqw|1qQB5`>MQBm!o&-$&5O8+wVig1|>okwoh6}77# z@ba2uafTuvy$!-9((s*2GvgaNWt0N>)F1ypo2o>l>3CrSL%F%MHMRC^#S@J)n5A@| zH{C0B0jv&ru^xprBerDRRfT3|Rb2AOdu?Z1_Gb7EK~Hi@11u&_cS}w1WnIv5>)MAg zKGpZUCE|q`Fq?C!nM!I_ zI#$!Ot975(aZ}WHLhDN|K~)XszuYdoGwPj2!34n z{E?UYxPK>DXNtp3VKx7sF6>bA$9$B6y6{Q6iK$fa;-|e zI9ZApO4F|XSQ|?296fAbs@HYo7+(&~8(0UTKMXig5k5FYgd!&h@dGKQ6tY?!c~KrvchJDn@E#V6FG%cMtqZ06Jg#MxipqylBHl!sAyrYkK{7*mvzPG zcf~>W^C&gz=<2+wzY7tJeI8`YuNU*yf7ter$pu?|6}tq%$1#pySKxjpT%eK>{=3Nx zD%=S>>FX10;_$>heV%lF9vmHw^}xb4!jhOWFnF{thqDfwEIbZhw|(~oHP1ZPp?#%F zZPDINX3cpiCJWU)XzF#THtQEq(&he!{Vmbmc(F07$hNq!0l#Zese9u!GrSB6{Yfy& zv>h^#_xf}%R=bmhAI|A%y4bX61YZvsU;S!q?eQiz!e@RBw5Rif;eF9p@>(7oJtA7?E;U%Ft~SlZNeed&IG zVrKSr`w+ENmaxNZ*rFoS%D}iMRtSC7c`Apvtb%;px6?QH5AQ6kRkmU8|#H~gs)^yrUo@viZKOf$cW23DG z_`s)z<`+Z?4F7sNPYcAdnOA+$Mjrg623ce`IeY9sq%>qB6BC5k)xjc*Rm~6;z*2Id zG}LvC`lNZH+i>v*u2EDa1p|zw;HoBD|GZ0ox5uRmcc1IH$#HKr8*lSnveO8_Vp^!C zF19xxS|-;@ZO94k@#K$dXHTmDXqKpODULHmmI$fqAP$+=;tyHOBC=&deXKV*$&);e zBtC%rF+7^SpP`y>G&ysTkNhZ4EEz&D%`4_cfF$JaBT|C>2mRp_qN^grw4bEl-ICL zjVRYoTK0kt6y9T71E#)yVM?F&yYZ^~sZA|b+{ew_|5;#!97KTaVve0bR~-DQI~zIc z%UE!pGQDbR%(_;Yp*$v6}k^%9K-E1 zH_Nx?H+@C_zO?d_c^3eqcFu2HkPiS~Te_6RO1tl_aZLGXN={Pl-4T35XHw)F`@! z@vgkh5=n78Q#{K>4h56jZV%|%6}fJAh`@QAdDJL2_WIGf`w>)&Z-+Keom_lY>eW%c z5+Ortl*$;T0O9q(&hI%bm-^G|nAEXoQazVV8Rx7tT1u5f0$Vxx7mAd3ZEZ^%nA9#7 zD?G_n7zN{h7c*K-*r>eQoe>Ev@B@#$Axm@!W*}2UVd8scsmC+;6jd#zmB>5f9rp@@1s-=iRNYI&>Mu?r_ zy0((Z8FvoX<+fR}b0_Y0r)`>#mpc7VscsQ;uFp?XFrs+Bn+~+5k0=RLe#%4+!yTo@ zhTVY$DSpa-Os$)bhZz#VPOc&6J?0$(!4yl<=@P%k@`l|=E zwVuk+VdVJF?~sf%QiL@~tuxFeMp|F1x>ghhA|;??Fa9F?s>P$)wN}UG9MK}7=Fnd3 zM=>Dg@9#&Gd(7!cv)XBKp45GJ(d|3QWdsU*AU)Z~otLbZK16|CigvR3g#jh_qXdzh z-k1ZbCqd0k?_Ig<;!4VTERyB>A-mBVkRg^n|KN1SX^(!kkG-c!m& zPsM{<^gPqsoH#73$^zIp&=*#;R#2-uTj@#-I&xS?aM6x_3*77N?s^zM_*IYOdk=vW zwl|N{i#1-(;oG0v-OXG$Z2w^Pt&r9GFcI>CJ5=W4@lX6zZX2<14vRo}-yZ$#%3C@s zGt3;qT02x(JGx(3fWxgrIs_ZIK z7lYdGFZc>&uYuCM0}h z0;LWLEA#=>pCgn9v${*cg^7Cr8DVmE@AkD>A8G0*-nC1(`UF#`v3!KjULKor+@!>L zcElJw$zkmK^cfJDy7$N75xG%xQt|ygx^t#XO+c{39q6D`1U1%eWrk$cro(|l{bg!zw^ohXk;hW( zmck91Vms`+vsNqBtHPv%fa((dkT75-Y0Em3VOCM?#eEqb4S$a5XK32)G-Pbq@LlK(GmgBb-jZflr2sBQw zU1knqkCFj$u3s@O4cTTUE8TtO@s?BAAyQ)`M&}o<>=nQ)Xdh+lSRnO}1Mz%$R|N!Z z`E+OFDKN=gu4UVQHgcdr^dXDLK^^aE)yAEQ^1J4QJX_1`Va@_~(`1_p(XHQ)e>cs! z05+tj3+%`$r}f$aEA_YAW@|T5%|L3gN9E@st~|%^943gv`m#QXUP7qmymU^O=}94j zX^yK=$2?W1*;1@`o@;*EC`Kc#u)t!h9*TEfr?dpYST$hflckD9u~jUxx*!jX?8zLB zL3WvWW%4%Mu-6?bL+FFRq6g(|akm6rdWZ!Qgnbxoj4zSzk_cLzp)g_wF!pc|IHwMi zOFYKQ`ZH)F%lhwVo)Pmi`t7u0P){i(ECYiSH>m732k!VLqd(KnWc<9o~ zU(a)MUOyI6tu; z9GK_#9VtlJBC8r^27Y6?GQt_+WS3sQY})DL&3-2I;nciSYl?*BML=f)aeO9$?f2Q~ z%{`xv$mTD%5jll1ie71`X2xdzv1D)n$n~5T&?Z^9?65p4)_3y#`pWKH!1ucM6JUY| z#2!S*?}`?`Ew&Utz^^t@K-?uK$cZ^9H)L5ABawYJkF;o+o=SLJ#TQN}=8bH6-WnD& z%Vd)wDDzovf3G23Q&dARdpOJ35pkARxz}L->PW7^36jaT=`XMQ<<1-VBN5Yf zI!LLBSb{E$Q&ovlZ19W^209QGShV62#DB^v{<#^ z3pwGv(`+#|9M~7TR-$)pUI?%%YIbdDcUiLl`deQ_^#U-)32WcuxH=qXOX}ZkuWLQ0 zcAi+NaSJArGVnIPd^9j_4b>c~oGF%(g8j7BF#@}^1q|$x-+`u z;9o$H-VDw5%&PhDXKX)-gSL8F}ZHMvV}-)Uqx_lFCT*L3=~$l1TT%!s<^S*8INI%-jKtK#PRxjJz< z+P7#Oc`6%>cJP>Nw3iB{;~~2zeG_633c`hV$Ru$%FSo*ypjjZd`l^viy73H$)5kv# zSHfYUYnaP`RHAsCopLI_(*%{iz=F3+PN65)Z9{G9RKit9qe)d_=M?sT|0Nqf);JyX z#PRh%Bpczqc(u0+k~0T4(AvKJIj>?1K-NI19la`z)0uTC-b9QLNzZtk@3@DGDEA+W6Rs_1ts3pBkh^*0pw6E%?T_=UbK>82euHk7j= zr0I_~hBwl*@u~4oL`?^SOic{UiD8F@yBkN6Pa8~DZ2>FpA2bj&$yEH@PGgOnrAE@? zo$-^1+s|lR3;m<{pd&-ed;jKU_?hJ6+S9Vj1Rhem`|guyD;o41Gm`B&z~%YRF<1B1 zp$*9bx=&I&+nRM9xA=pT>*s7Yh~WJh(*?I1Ee^BwxYthH)T`ci_{D-&f^1}}U$lQW zgibG5uFZ@hGj_Of%A5^_-zqL{jCv^y*zwbv^zvF-?iJYC2^XXj>T)X$Wn;!i>Zqez zw|tT7Dlp83rZH+D?je(A9Ln37AVE&2`~iBP^9U}QsHK(8OM9ecz;b>NYm;%KpO%Br z*4S2tw#;~mSNGaMj{Rng(9c-cwt>9Iq#P`>3Qm<1c zJ$^^{`>=nzfqKV@;WBcVa#*}PPmY{--9EV&as!^{1-U_$+*{LoMD8Hy;!ns_T>&w#ti$lQ)*Seuwx9 z8ZEBkzLAt*$om=F$fL9&F@jLV7E~k+p(`5H^ZdV%t8mVUIr++jR0M5)?IVw*YX|Ac zrw&srp$T_%T(;H150x*Q$5$_SPo*@P!S@lJ$$ka?5g^F5b$QsP2aGAq=1JpT2jc7>bbK)&Q6O7|dIC zluc~YlR`d_l65loQamRF+`QLYzfi07Fy>agKDdZA=Z^eAzOlvrHaN`UI#dT&^yQG0 zW+erk0xLXJasj!BBW3j(G5~2#6z_7XZiXc#J^j*CivM>-cnx6gezkgZ!iV-8hv<=$%5ET^Ruh7u@h8omwz3Qg~$_P`kt#YMS_PVXa^eSg^Z z1#$zqt`{Bxm1J3G3Q|o9b(xwzKYtg==JeF9BD&Ux&Q5S4H*Kqm%^XgWkEIJw_sJp^ zeu1Vamw>E=o({AcN1Souc#P``JdEq7Yc3F+@F;Ws)Lu-58~47E zJw{AD?I`EMSsPOSW!&fN(|cug@v8^CYP?^&MTm^h!R((LzHAO=HD(P}tEXaj3qA$H zL5IQFOx@bMBe(O@ViR*SOasfCNPEJq9BLyz?1>m-Yw@ATc(@J62HOtFaLBuA<0^hz zJi&w9L0pKPZ7Fh?Ay>YTCgm#*hCI6XzjFy+jAi&Jg22-L;~(JS^`OZbut=-qbNn^- zoCtc}zb)A1cP+I?NZ|O5QS#>_xETj_RFGbOPFLizXf!;tI-a(?PL37<-Vlf{>xGtb zq*$e)u5KwR3VELxGowria3MIsa!D{6Y4$dXKd*eR3>d-CepWYaDcmB$*<<1P7^AM0 z2TTX${Iwe{L%k0>DO?kEe^PHy^tc=B_F5Ly+b#GBX%xQQ<>#&q@xuuW_>U+>P#Rw| ztMh)4?^SB2GFHJ~Pjtc9*+`h>MGj&p`ixsk+0lqM^9^As^G1t(4V~I-7iRdwAiSa$-E2))it(2Y%rPq)s`b$m!aR__W2B& z>>NXCpv`6O|9lY_9~{T5*K5wmP>#pDPZqb2*$+DTNdiGXe;#ie%%cnCtBhThomub8 z4*9MHxdLr`ngZ}6>(kHcA=vU1!g7?;rAOU!?M4=q8}opDKsax%h5OrQB%27N?h&Ui$`~|D#g|0sM_wh7 zp7{&r8cyOS`(7l}sedl!)`TuZYjtQZ|D%-u-G@1TZk`R3xs)z&L_275P000Rb7a!4 zc%42>dZ?UQQE5)sjr(_G%n~`_qnnt}_6KNvO^`czaR<&PiL961I(vMNbWFOUrgN-A z*;p2i>MCEr24!&M=>%1x8>MYd&-nt-&dML~?MmC_NPz)-lmR>m|KBa}wV6e1!JU9u zxw;eR3=Efko~f^N%b}JM$<-K6E?azKu2jd-vC+||kuorqaXEIy)1g>N8dblFW%fr* zIOtwxFM;=5r=%2FW!+rh8U=@Q@18=g(_&{MW@ z%&_M+$cNm~3{e~#Q1aYsjwm7L?h=+m*qd=giR;!MPx5Sa?e=PgjHHp*=YL!u^!}fY z)uhEmpu(3dYS=+_DHB*YUB$MXAkG6q@MzuF&n?e|37? zVLeYD#RGMVHPD_02ul`i4{KEC@N7Swk?YWi)mMA8f|b;zCw$VaHK=Ufsi`tHq*Ja=&~N$!L8@lNlyh+lJd+q`8^cF zPO}KGbI_FER_hEC-mQe|L@^Md6uyM{3R#F0?mqzo@rJ}e0W{lafg9?vPzGr6FG z``9N_vdfyJ0YZ5T9*jc?w{R_P==g#flLfX%Z#5hBHuMeHP_)^}=;%fy$%ljl@A;7z z=x-Ozk2mq(Ab|MqfFiVA%t6t=EO?%8FQCVgS3kY{;#PaBuemx5&25d?!Juc=1+T;- z<#I)NOf z$5$i;C$}O|3r|Z$HYNRhdB=`21^;KM0S*6_8nE39a=%wxTRR1|xfJoeAqu^Ds=ifd19JbNT zoPr{;<3S7|m(=TgW=K@Mcay_s=)SNyeq7xq4_;GtU+%O=fy4Rf*JL;$|9SKhz9`0t z?R>Q+1 z(8a?$e2VZ0@TP(c+zI?Unld76()y`KIu=;pabfKUAt)WCb_ zQ^RflUn;_^T;+seFK(P!>hC*C^!($n(wWn)x2DR*N^A|AyF3$0mbQF7X>Dg*IxYw= zgIOW>@D73S3DFP8yF|S{)iH;&ZI-L36)v``yooe>o22*i(R+h85jGbSpYbpyhsG}m zzF7YLmv-&cq~6CTMB4+vQmD8@4KIUEVhjdJC(`)Ls}^W{>aA3C9IeqW$Y!Ux-a+57sVF?JP5cA70 zErvCp`J?$-&C(M)10m}P z8ctPwiNF{Z%qm0)i&tB48HxWD_tXHzfI%e25;5gy&rAnxFc}ad|LrTg^(+M)VhbrR z+i=w*5rq?=)+x|KU#ZFdIgJ)3VLx9M>&zg;sfgQ5m}C9!XwUDoZ0Wgq2Bqt39RD4q zMkvALZMtN1>YC0|=;`a3yCUHiED z#>wE^9LVN+duW6DMY?2aC59MFd!_!Rh{TPq=+TdYpXbiV-s4W(Z?y6=_8fY+OBVBm{WYl#TIYMye}rq8P~FiIe+yF zCNY(CXnGh2EPTncylbE-hDY?9v`s;b zGJGxZg6AEn-i?q+93PK3Rd?eplF6J=#e4f*lG1;6;@mh>M!g{C|QJC|DfK|-x z{a#(z?G-?nl>4T>*tERVTg`H@TC_9s@^xO&x%%U|QJtG=|9G|{4nqU?z zN_vc|Hp}g=(gI0|LgUzdNW(7zyzen%vG{}!a)*id6RC%iux0i#Dj~wvR_-_1Tkhw_ zBnRMw9VB=XoN2^{3tc5eg#)T&gVQ|^e?VnwCwL4|Ce`Kex&$2zh#@-vNY(y#0TrA9 zVeA<}T*a0bdKl6$N|9W6l0pXhB&=P_?*hx}3Zc&kC18?+A4A*?wDP$A2-fZcT>IN1 zFNgmJ>y|JccWIFc3bkH0()PIXppm7A$wbqAZc_<>{97pjf;-wvr;1_s08C&v32zuD z_%As7#80G)a=bh;$~0VM+I+2oL-VE029kH@ZN*MO;O>BPjdgXrj0If~yO5)ii0|f4-vIjZBDR_6 z-Wokb1zs1WmF^+Ia+|IUDzUw|S;@laJqNs?&V`<;u4x@pwpFCbm-iB}>$ij{<+(#Y zU60&v5dZJU8#e#;8^nLXH-LAYdDXZzHWaQ_q!CmQl|50yBEFes{A9=@g#(v8fanud zlL#7nxRDN`VzYxxuUwy51b?2CsGeOKZMk%NAw`%IH%vkhRsr4Yr1^A_nN;^_hr?HA zuU==X;ae9{m?24xbNi_Ipe}DG^W7_itSWb4cKxO9?es%K9$;aX`bLCcI<#6J6@og2 zlfX{|*+%z%CJ{viQ1d{AI{dxq=>lSjdGikOVD~12d&$zV zPS=DP*lXq=1Jf_}dD3kKI8S27mA!agfqQLebPAl!x7O39EIB&5>D`QT4GbULc|_^*nV3Jrq4B z>`+a|!_k)_N~SuIn9cC@F2j3IIuk$Nei@vHe6Aau5U&>FyrLs$cX5xsu;K@Z>*yBz zgw6+%KS(5xo8>1KGAtEa_x%vGB-q>bch-PT+aa&5??WE5_|G1%6jai zl`8ICzMB9K z{Y1&iJNAUxHuU!|UQh_zqhi4Pxjrwg20d$31&xjHk1|kOri%)(OUwJ<$cn;I39jNm^IZDXQhm19JJxo4V z(A%vW=!3w|ey>-*Taeo$pnB49mywqQ+||i(Pcr(7XohHpm(c>g#T>Xl1%nget6iU2 zi8$(W(*KS#A-6(bvSAD>A6xFdd;0PECeQsaDu}zY2o-~@Yu+=(kuw#F1QJOt%0CUSFJ@;l`y-ft9_$6fd{#$~$DtB*VmQTJO|oamkL2eOexXw_&zOF-r|i1j z2aX3aeA3*P;o?2E;Qn@vTuGGV+Eb`d&|SkrE#?`GuXfzqA87_2;9yW5)R)?9`5NJS z@zVoo_2Si+b*CBiwmsLAv@1qU3x&|iZoWOCbM}qFq*t-+?as`1MMb=| z(Zmg>>;Y319DDC1s_>J3^j>b1ior7FZneB^ucWEk;Msbzo~dVDnb@{eJSSRZ_&NdI zm_aa1#OL~1Y{UARO~_(;WT_U+a@=7`FG!mw>sab`hu56&dU22ZTUhjx(bbc@G0v2* z4yuSh&u^gRdV>=!L&0wWy3%H2uoA*^S|)n#wIM5gh!)a#5no!=iu00%?a?J$bdUuE zWPrw&zo+>lOxq8TD*PcM(Tv8&2<@c=A;)*o*)4sYOVcjfdnaaSs_u4ZVQw4)t0SX` zHsJ9V@zd!#r^~Y;=fi2+{pIeqr8eUMI;8Z{Vr9cUf?zZ_x`CqhFS+|Ap#vp8SsOVq zFf>y6nvkbZ{gL(1y%-0-hUC$D7~gAu9>EbW8fvN&v-kI1@z3DR8h!ep|8w!D$5>z- z=m)m1#R=dai+b>IfDbxQ#O0$7WaD2Q7Pv0K&730~J6p-Exu8b6>6p63qOb-QBA3yv zQtM%A`aOaX{0Q(s(L(xuXkfapvnJC=8h1yGX*5I~w@-;)B?Ww`TC`imt zm4Ei%ktXC-7`?jBtodeKv~LTU^TLC{shT=F#(CvEW{WEZNQ^$+H7G}SYNdzK$A6Vn z?Y(F|XluGMq+hut*kkEZadvN)`#=|pySkysgvsE63iik0VGbrBi!5ItTZLt2Gor8s)sGm$E&&JdAp-jv#5h z3o%nEl(^XK)cS!K5i&1AhY6ORJTeZ!pQ|f_-aLhIPzDZ`m)5QZ2#qCq#&Yo_9yqE! z>^rbQXvsP-#0MZ?+K>Y@4$wHT3IAXv2VqTAbB>1yXq z+o6_q?TU11_i#;a6$r!{vhf7xz8WIHIqW@K&(q$9>u)bWeLSWTX8knv9zQzMf;HphzM$Vv%Ywm1fvNm+G? z%HqvVvHd5UfJ&7JaK=K;biioNt`54wUzz?>nTeOp-zD=UO9|=;YX6Zfpi2Z$c9k?bAjmrQ;9P%x^#<<>fXN!(;1iTB8Y zHFk|-J20vQPUyWZbk_}}n^#PzSbyuHRy6!_U7%CXIN=m7P0kPm3I{=+ZcSZGmx8(b zKb2e#9&9s~xF{tO)c68d>JM`Ub3Lhw@z*;OVN2(4Gf_T@xYkL>-UPr@*`v+&1 z-Asurzae<4{LYq7*$E{Y-J_4K{&rObBhQCdAZHtw8e>^{S~ZDN7g&B?eDXjdcmGZ! zIt=|r04ouQWp2njAxrFOcjm)q{VIey^SEuv^E~Csr#J(g2Luh{XAcu2%7*hM<~O6b zvlly^cJ9Yu#kDXgn8jnIW87tB?}}D*JS~?uM?4qvXmr<3GvXwsl{3q01|=KJGHH8E zvX-7FPkn7w^6%4823j)8b4knC((=hiWw8ot$ZEx$*c__n1nwyzp5Y1&@rgOZ)FSD0 z1RLg<%aPrWpUH4*i1s)ARO+bQh>*wHn%ibK%#BYJ8*eaC^z`|mKc zo&$n!#T=SpaDDcbhokB7;Hi=crs1q&b{q`M^#?K-eY@fFr=LcK%LHx}4@Tv6>-Gpe zz`4O32J9iyF0_0rAKT(k-iSES_9Uk=Tj3T>giJqHCeP)F zUqbfTqq!ou7(xFOs3-?UcTc>UC{mvbHagFm9=*xa>oU%JWZoK=7H6Tac4ScIbrJAJ z-ti0XkG9M^Q@xzCzTCLJc4O141G+MkyN<#-sE%vq|2ng9it9gj3YaRD+c$6PpG(I) zH^Wr*k=58Z!;TPzpE&o#8kjb#546O*(%X!(nfa#2&zSA85Tm=|=Q=Xblka(xY9EGI zRRQ);J1Z*QLv|2MiQ7#k%=^X5UT0&>&Zjh{k_}v0@>gEJHSl6z!Uk*>0Ehaamep6_ zO+d$q6>Uwke}7z-Awk)tb5N00;wk%e)jo#X<~fBTsZQC zLv;Dc>WQOO{>-wa3*UInmYjxH_ep8fN#HmVp9I@65COH@FmN*J#m(ibeP43sGm1C% zpT$r_UllSxagq^qg)&e$MRcPp*PlDZaj8YZ_YQJ8VJh0kaZ74!AB?wv6O;BGaTIj0 z`-Ij0?<3=5eUzq$53Q<&>K42Af7Y3_mDs0{G3a}~FI?s9@QF`4{c<(4XlP_!eYoDF z?Yfx4s9y6LM4Y|!dG|i_9Lsd{Ccoh@U_2@$Zut>N&Iswm&$IR$W?%%4`poPT~%A%1Uw99)L1>``Bl zBcCt56cAsb%r+H03%(hwUMEG#3s`*M!hH}T#Q7WvmLdy*V6R)IedZ2d`l%ajyc*O$ zWHZ2-d@f_U7af3Spq-G71c%Yy9JKX5DAnK@$9jJHm`gkO*t-)x!ELBT6yPEtB!uSt z;MZU*=Le&u)5&FBoWHR$+2zhQ^jg?2f%IBk970wexQ^E<4qB<`^xETD&?02U8Fq<* zl^H5M@{QUi^}DiJTu;euBlz-Uo~7%=rMs#+kAOxYRKE)E)#}EepE3OnJq)t>EWN+( zeSgQ=#o5xSvbh4IxNzTr3-=R>w|D#ZO^5%Jh|$@{<64=IH|9Y9tHY|jYd#?LfN@xA za3B%~B5@!R|8`oiSy5K8KKpqkFrdM&W9X%{?|ReGg3!oO&s{wY^FWE zM9*}5>T%$mESoH=U~lrCzA$!i%-v^tv(VkcL*T$29V7`maTP3^m`^W%HQV1lyQ#amu)|IVvwDWqhM6WDoC9XUzS{hx2BCDO-1bG5k8&BVux!T1@rgt!X zSKdvQ(#`|DZ9HGi9={FqxA$F^p+#wrO6Vw$yS%3s&?|MDNt0TG?xqzY+$x<}V{0o% ze@VDrl7f0Eg5-anEl^1Y=+;~{Nfx;S(xtuoJ!h+|f@ao5_rzjHh(tw&@aismx+#Gh zBn|$;H637eS=Vlfiu~*-{$2Rs#XwyweQl+|fe?Q*zuCY=y>VU_s=I2n>91YUR55Pj z`oV%Yl$2}y)lQB63mkHtJ4I$DvlJP#C2)R=uI)>xVw3S(X=3i*Y0X=;Zz1IFnlECK z2*c$}W`-7@7hmmc`lxo-(8mvH?U>0>^*}W5qm}nu8Ocr*55GkqE-GRidow?a6S672 zp2rtl^u78Kd3kqEpU7`EBkR$}Iow-rR99)h%gV|e^ySvwc>E$uzj|1gD_hhl8pmz^ zMQ_HC!bYD1-uDKc!_{P>;Z~i0zQG}MAAO{xwTkj*J%vuL z*Mhrlq~1;M)tZo;%>FaCPttMkOfK{lB*EfXEV0$vw`5#UU71@;gkolxfHukfPJUIS z0EW)$>irJ(Nxc$etmWv%m4#m1-dben*}nq5qVNEUhuAf3C{2ZEjHY;;VjKDWsdS6ny^o*RDG<}3U0aVEE?aCK#es1d3lpq470Y|OCF-3q}A zu#6PA<_tA)n8L0A2BafbJtM#Sx4VRb`x_H8eH;pNN0Ltkw_hrMLpu;BuxY_AM3XoZM&jR~9G(sT!n>szp;qOMgMIVm7t7vVZ zHv~dHF%AHIv!OHC`zrK{AjO;le=rL_#n_^d&3sd$_2L}+>N((oxd{@O;c$uzcAZ$r zj(~V3vFfIRsT`M|er1ww3vV~QekB-{dFCOOd$y=bt=p)2xk!BDk}FcwzArNRfAQ=o;LUvDk6zI*;-An!wL7z z22mukD;(owOXekSxp0wA&D37r{Zn4i!h5ipc-4 z3_!sFZc}%!ZmgQ3b0AdANnkPkq^(#;b3x!+48eG{q2Zd=XvAV|!FAflU7Ietadb0U z^wU_?LG-BelwwnhLMyxyo+7qf>5waTv!@ysjUr{-*lG)3Yv;djjxt`5`GmtN!Tli5 zLAFE@*`hVs@4lM-6|VMjv8`;ZdR2_uVn%kQh~l{#v1K`GS=CbT1yzX$DfAi+aRkhu z+$pEw`{z9RV>F(ck%n?enc-mj-zn?vN9EuR4o>059ow-TKz9J$f$II+XaVFJOeb4& zJLc9XgXs6f1ay-048%g|>QYtc&lW7aU3)8KO|Cydgt-WG}At&Ope2YU(KwI!%xR z&SwRYME3PWUQK?i-tDVQdemsKVtmGx)E#xUr^RRN=j+&ZE>Hy3*M;xj+p_t5Cj1_u zBDDpGd4FfQXt9MCKoVV_Z+{>r?FfwC?5%BJ!AQ}>lwg9FE2?G8(D{n1uh~3BS~%qT z9I-@#Rk7EYnW8JrV^fRG#s|upJhUjxwZa8q%$_e+8D7Pq1NE!f$n|{9v$On&f~W?z zlq_clRIp&w&$g@ZXCUjwFYn(?cQ18m$S1UHZI!R7@XdUvB}c@1|0qKzXn$Onh7nS! zqv6tF3gC^2JVAN;88glDbg2ECE5vO5hHni|z^)VBv9pn?Fl+nXBfd0ICR%f+YLK8~ zJ?Sz1T`ivTSo9sT%wA-FjV4d?w2C%YuMr>ZbfdD_#T6616@iY2j&^aIEf1#4DAST4 z9z(OW%?LL+!twiuof*X-g|3&~UF4><_%Wyhry=geAtDwE#DVoTocz^S$ zVMQ5dJHIElw;!bq9o#J9ZxfBWNJv8YLk>Pu2^ADoG7xX<_hRAmArmR=w$B~FWXHE9pApK9J98O1m>?d z_T|yrogri-ckJw9zRoOvuaRJhJ(C=8JPG&VM;OWXflk^4Pls9O!wG-IVFFCg0NXlj Y5+WTvH+AeL9`JYViqhpw8I$|}51>c3Pyhe` literal 0 HcmV?d00001 diff --git a/public/style.css b/public/style.css new file mode 100644 index 0000000..c805815 --- /dev/null +++ b/public/style.css @@ -0,0 +1,92 @@ +@import url('https://fonts.googleapis.com/css?family=Montserrat:300'); + +html, body { + height: 100%; + width: 100%; +} + +body { + font-family: 'Montserrat', sans-serif; + font-weight: 300; + background-image: url("/splash.png"); + background-color: #220052; +} + +* { + margin: 0; + padding: 0; +} + +section { + height: 100%; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + max-width: 536px; + margin: auto; + position: relative; +} + +section:before { + content: ""; + position: absolute; + background: url("/pyramid.png") no-repeat; + background-size: 100%; + width: 100%; + height: 402px; + z-index: -1; +} + +.logo { + background: url("/logo.svg") no-repeat; + width: 36px; + height: 33px; + background-size: 100%; + margin-bottom: 35px; + opacity: 0; + animation: slideUp 1s cubic-bezier(0.19, 1, 0.30, 1) 1.3s forwards; +} + +.title { + background: url("/title.svg") no-repeat; + width: 219px; + height: 36px; + background-size: 100%; + opacity: 0; + animation: slideUp 1s cubic-bezier(0.19, 1, 0.30, 1) 0.2s forwards; +} + +.subtitle { + margin-top: 25px; + color: #BDB3CB; + font-size: 17px; + text-align: center; + letter-spacing: 0.5; + opacity: 0; + animation: slideUp 1s cubic-bezier(0.19, 1, 0.30, 1) 0.5s forwards; +} + + +a { + color: inherit; + text-decoration: underline; +} + +p { + margin: 0.83rem 0; +} + +@keyframes slideUp { + 0% { + transform: translateY(40px); + opacity: 0; + } + 50% { + opacity: 0.2%; + } + 100% { + opacity: 1; + transform: none; + } +} diff --git a/public/title.svg b/public/title.svg new file mode 100644 index 0000000..38dea69 --- /dev/null +++ b/public/title.svg @@ -0,0 +1 @@ + diff --git a/resources/views/welcome.edge b/resources/views/welcome.edge new file mode 100644 index 0000000..4355627 --- /dev/null +++ b/resources/views/welcome.edge @@ -0,0 +1,20 @@ + + + + + Hello Adonis + {{ style('style') }} + + +

+ + diff --git a/server.js b/server.js new file mode 100644 index 0000000..c3a987b --- /dev/null +++ b/server.js @@ -0,0 +1,25 @@ +'use strict' + +/* +|-------------------------------------------------------------------------- +| Http server +|-------------------------------------------------------------------------- +| +| This file bootstrap Adonisjs to start the HTTP server. You are free to +| customize the process of booting the http server. +| +| """ Loading ace commands """ +| At times you may want to load ace commands when starting the HTTP server. +| Same can be done by chaining `loadCommands()` method after +| +| """ Preloading files """ +| Also you can preload files by calling `preLoad('path/to/file')` method. +| Make sure to pass relative path from the project root. +*/ + +const { Ignitor } = require('@adonisjs/ignitor') + +new Ignitor(require('@adonisjs/fold')) + .appRoot(__dirname) + .fireHttpServer() + .catch(console.error) diff --git a/start/app.js b/start/app.js new file mode 100644 index 0000000..e42f331 --- /dev/null +++ b/start/app.js @@ -0,0 +1,61 @@ +'use strict' + +/* +|-------------------------------------------------------------------------- +| Providers +|-------------------------------------------------------------------------- +| +| Providers are building blocks for your Adonis app. Anytime you install +| a new Adonis specific package, chances are you will register the +| provider here. +| +*/ +const providers = [ + '@adonisjs/framework/providers/AppProvider', + '@adonisjs/framework/providers/ViewProvider', + '@adonisjs/lucid/providers/LucidProvider', + '@adonisjs/bodyparser/providers/BodyParserProvider', + '@adonisjs/cors/providers/CorsProvider', + '@adonisjs/shield/providers/ShieldProvider', + '@adonisjs/session/providers/SessionProvider', + '@adonisjs/auth/providers/AuthProvider' +] + +/* +|-------------------------------------------------------------------------- +| Ace Providers +|-------------------------------------------------------------------------- +| +| Ace providers are required only when running ace commands. For example +| Providers for migrations, tests etc. +| +*/ +const aceProviders = [ + '@adonisjs/lucid/providers/MigrationsProvider' +] + +/* +|-------------------------------------------------------------------------- +| Aliases +|-------------------------------------------------------------------------- +| +| Aliases are short unique names for IoC container bindings. You are free +| to create your own aliases. +| +| For example: +| { Route: 'Adonis/Src/Route' } +| +*/ +const aliases = {} + +/* +|-------------------------------------------------------------------------- +| Commands +|-------------------------------------------------------------------------- +| +| Here you store ace commands for your package +| +*/ +const commands = [] + +module.exports = { providers, aceProviders, aliases, commands } diff --git a/start/kernel.js b/start/kernel.js new file mode 100644 index 0000000..b4f2720 --- /dev/null +++ b/start/kernel.js @@ -0,0 +1,63 @@ +'use strict' + +/** @type {import('@adonisjs/framework/src/Server')} */ +const Server = use('Server') + +/* +|-------------------------------------------------------------------------- +| Global Middleware +|-------------------------------------------------------------------------- +| +| Global middleware are executed on each http request only when the routes +| match. +| +*/ +const globalMiddleware = [ + 'Adonis/Middleware/BodyParser', + 'Adonis/Middleware/Session', + 'Adonis/Middleware/Shield', + 'Adonis/Middleware/AuthInit', + 'App/Middleware/ConvertEmptyStringsToNull', +] + +/* +|-------------------------------------------------------------------------- +| Named Middleware +|-------------------------------------------------------------------------- +| +| Named middleware is key/value object to conditionally add middleware on +| specific routes or group of routes. +| +| // define +| { +| auth: 'Adonis/Middleware/Auth' +| } +| +| // use +| Route.get().middleware('auth') +| +*/ +const namedMiddleware = { + auth: 'Adonis/Middleware/Auth', + guest: 'Adonis/Middleware/AllowGuestOnly' +} + +/* +|-------------------------------------------------------------------------- +| Server Middleware +|-------------------------------------------------------------------------- +| +| Server level middleware are executed even when route for a given URL is +| not registered. Features like `static assets` and `cors` needs better +| control over request lifecycle. +| +*/ +const serverMiddleware = [ + 'Adonis/Middleware/Static', + 'Adonis/Middleware/Cors' +] + +Server + .registerGlobal(globalMiddleware) + .registerNamed(namedMiddleware) + .use(serverMiddleware) diff --git a/start/routes.js b/start/routes.js new file mode 100644 index 0000000..2c057eb --- /dev/null +++ b/start/routes.js @@ -0,0 +1,19 @@ +'use strict' + +/* +|-------------------------------------------------------------------------- +| Routes +|-------------------------------------------------------------------------- +| +| Http routes are entry points to your web application. You can create +| routes for different URL's and bind Controller actions to them. +| +| A complete guide on routing is available here. +| http://adonisjs.com/docs/4.1/routing +| +*/ + +/** @type {typeof import('@adonisjs/framework/src/Route/Manager')} */ +const Route = use('Route') + +Route.on('/').render('welcome')
+ +
+
+