aboutsummaryrefslogtreecommitdiffstats
path: root/contracts
diff options
context:
space:
mode:
authorLibravatar Ricardo <ricardo@cino.io>2023-10-13 14:12:03 +0200
committerLibravatar GitHub <noreply@github.com>2023-10-13 13:12:03 +0100
commite503468660a13760010a94ecda5f0625c6f47f87 (patch)
treefa532f54fc5f091de08d55405ec6339bd2440a02 /contracts
parent1.3.16 [skip ci] (diff)
downloadferdium-server-e503468660a13760010a94ecda5f0625c6f47f87.tar.gz
ferdium-server-e503468660a13760010a94ecda5f0625c6f47f87.tar.zst
ferdium-server-e503468660a13760010a94ecda5f0625c6f47f87.zip
Server re-build with latest AdonisJS framework & Typescript (#47)
* chore: setup first basis structure * chore: ensure styling is loaded correctly * chore: comply to new routing syntax by replace . with / in routes/resource locations * chore: add login controller * chore: correctly use views with slash instead of dot * chore: working login + tests * chore: clean up tests * chore: add password-forgot endpoint and matching test * chore: add delete page test * chore: add logout test * chore: add reset-password route and tests * chore: remove obsolete comment * chore: add account-page and tests * chore: add data page & first step of the test * chore: add transfer/import data feature and tests * chore: add export and basic test * chore: add all static api routes with tests * Regenerate 'pnpm-lock.json' and fix bad merge conflict WIP: - Tests have been commented out since they dont work - Server doesn't start * easier dev and test runs * - remove --require-pragma from reformat-files so formatting works properly - run pnpm reformat-files over codebase - remove .json files from .eslintignore - add invalid.json file to .eslintignore - configure prettier properly in eslint config - add type jsdoc to prettier config - run adonis generate:manifest command to regenerate ace-manifest.json - specify volta in package.json - introduce typecheck npm script - remove unused .mjs extension from npm scripts - install missing type definition dependencies - add pnpm.allowedDeprecatedVersions to package.json - fix invalid extends in tsconfig.json causing TS issues throughout codebase - remove @ts-ignore throughout codebase which is not relevant anymore - enable some of the tsconfig options - remove outdated eslint-disable from codebase - change deprecated faker.company.companyName() to faker.company.name() - fix TS issues inside transfer.spec.ts * - update to latest node and pnpm versions - upgrade all non-major dependencies to latest - install missing @types/luxon dependency - add cuid to pnpm.allowedDeprecatedVersions - add esModuleInterop config option to tsconfig - migrate more deprecated faker methods to new ones - add more temporary ts-ignore to code * - update eslint config - remove trailingComma: all since default in prettier v3 - add typecheck command to prepare-code npm script - upgrade various dependencies to latest major version - update tsconfig to include only useful config options - disable some lint issues and fix others * - add test command to prepare-code - disable strictPropertyInitialization flag in tsconfig which creates issues with adonis models - update precommit hook to excute pnpm prepare-code - remove ts-ignore statements from all models * fix node and pnpm dependency update * add cross env (so that we can develop on windows) * add signup endpoint (TODO: JWT auth) * Add login endpoint * Add me and updateMe endpoints * Add service endpoint * refactor: change endpoints to use jwt * add recipes endpoint * add workspaces endpoint * fix web controllors for login and post import * Update node deps * Change auth middleware (for web) and exempt api from CSRF * Add import endpoint (franz import) * Fix export/import logic * Fix service and workspace data in user/data * Fix partial lint * chore: workaround lint issues * fix: migration naming had two . * Sync back node with recipes repo * Temporarily ignore typescript * Fix adonisrc to handle public folder static assets * Fix issue with production database * add Legacy Password Provider * Fix lint errors * Fix issue on login errors frontend * add Legacy Password Provider * Fix issue with customIcons * Fix issue with auth tokens * Update 'node' to '18.18.0' * make docker work * improve docker entrypoint (test api performance) * Add migration database script * NODE_ENV on recipes * prefer @ts-expect-error over @ts-ignore * small fixes * Update 'pnpm' to '8.7.6' * fix error catch * Automatically generate JWT Public and Private keys * Use custom Adonis5-jwt * Update code to use secret (old way, no breaking changes) * Normalize appKey * Trick to make JWT tokens on client work with new version * Fix error with new JWT logic * Change migration and how we store JWT * Fix 500 response code (needs to be 401) * Improve logic and fix bugs * Fix build and entrypoint logic * Catch error if appKey changes * Add newToken logic * Fix lint (ignore any errors) * Add build for PRs * pnpm reformat-files result * Fix some tests * Fix reset password not working (test failing) * Restore csrfTokens (disabled by accident) * Fix pnpm start command with .env * Disable failing tests on the transfer endpoint (TODO) * Add tests to PR build * Fix build * Remove unnecessary assertStatus * Add typecheck * hash password on UserFactory (fix build) * Add JWT_USE_PEM true by default (increase security) * fix name of github action --------- Co-authored-by: Vijay A <vraravam@users.noreply.github.com> Co-authored-by: Balaji Vijayakumar <kuttibalaji.v6@gmail.com> Co-authored-by: MCMXC <16797721+mcmxcdev@users.noreply.github.com> Co-authored-by: André Oliveira <oliveira.andrerodrigues95@gmail.com>
Diffstat (limited to 'contracts')
-rw-r--r--contracts/auth.ts103
-rw-r--r--contracts/drive.ts13
-rw-r--r--contracts/env.ts23
-rw-r--r--contracts/events.ts33
-rw-r--r--contracts/hash.ts26
-rw-r--r--contracts/mail.ts13
-rw-r--r--contracts/tests.ts19
7 files changed, 230 insertions, 0 deletions
diff --git a/contracts/auth.ts b/contracts/auth.ts
new file mode 100644
index 0000000..1625116
--- /dev/null
+++ b/contracts/auth.ts
@@ -0,0 +1,103 @@
1/**
2 * Contract source: https://git.io/JOdz5
3 *
4 * Feel free to let us know via PR, if you find something broken in this
5 * file.
6 */
7
8import User from 'App/Models/User';
9import { JWTGuardConfig, JWTGuardContract } from '@ioc:Adonis/Addons/Jwt';
10
11declare module '@ioc:Adonis/Addons/Auth' {
12 /*
13 |--------------------------------------------------------------------------
14 | Providers
15 |--------------------------------------------------------------------------
16 |
17 | The providers are used to fetch users. The Auth module comes pre-bundled
18 | with two providers that are `Lucid` and `Database`. Both uses database
19 | to fetch user details.
20 |
21 | You can also create and register your own custom providers.
22 |
23 */
24 interface ProvidersList {
25 /*
26 |--------------------------------------------------------------------------
27 | User Provider
28 |--------------------------------------------------------------------------
29 |
30 | The following provider uses Lucid models as a driver for fetching user
31 | details from the database for authentication.
32 |
33 | You can create multiple providers using the same underlying driver with
34 | different Lucid models.
35 |
36 */
37 user: {
38 implementation: LucidProviderContract<typeof User>;
39 config: LucidProviderConfig<typeof User>;
40 };
41 }
42
43 /*
44 |--------------------------------------------------------------------------
45 | Guards
46 |--------------------------------------------------------------------------
47 |
48 | The guards are used for authenticating users using different drivers.
49 | The auth module comes with 3 different guards.
50 |
51 | - SessionGuardContract
52 | - BasicAuthGuardContract
53 | - OATGuardContract ( Opaque access token )
54 |
55 | Every guard needs a provider for looking up users from the database.
56 |
57 */
58 interface GuardsList {
59 /*
60 |--------------------------------------------------------------------------
61 | Web Guard
62 |--------------------------------------------------------------------------
63 |
64 | The web guard uses sessions for maintaining user login state. It uses
65 | the `user` provider for fetching user details.
66 |
67 */
68 web: {
69 implementation: SessionGuardContract<'user', 'web'>;
70 config: SessionGuardConfig<'user'>;
71 };
72 /*
73 |--------------------------------------------------------------------------
74 | OAT Guard
75 |--------------------------------------------------------------------------
76 |
77 | OAT, stands for (Opaque access tokens) guard uses database backed tokens
78 | to authenticate requests.
79 |
80 */
81 api: {
82 implementation: OATGuardContract<'user', 'api'>;
83 config: OATGuardConfig<'user'>;
84 };
85 /*
86 |--------------------------------------------------------------------------
87 | Basic Auth Guard
88 |--------------------------------------------------------------------------
89 |
90 | The basic guard uses basic auth for maintaining user login state. It uses
91 | the `user` provider for fetching user details.
92 |
93 */
94 basic: {
95 implementation: BasicAuthGuardContract<'user', 'basic'>;
96 config: BasicAuthGuardConfig<'user'>;
97 };
98 jwt: {
99 implementation: JWTGuardContract<'user', 'api'>;
100 config: JWTGuardConfig<'user'>;
101 };
102 }
103}
diff --git a/contracts/drive.ts b/contracts/drive.ts
new file mode 100644
index 0000000..47b70f3
--- /dev/null
+++ b/contracts/drive.ts
@@ -0,0 +1,13 @@
1/**
2 * Contract source: https://git.io/JBt3I
3 *
4 * Feel free to let us know via PR, if you find something broken in this contract
5 * file.
6 */
7
8import { InferDisksFromConfig } from '@adonisjs/core/build/config';
9import driveConfig from '../config/drive';
10
11declare module '@ioc:Adonis/Core/Drive' {
12 interface DisksList extends InferDisksFromConfig<typeof driveConfig> {}
13}
diff --git a/contracts/env.ts b/contracts/env.ts
new file mode 100644
index 0000000..e1fd92e
--- /dev/null
+++ b/contracts/env.ts
@@ -0,0 +1,23 @@
1/**
2 * Contract source: https://git.io/JTm6U
3 *
4 * Feel free to let us know via PR, if you find something broken in this contract
5 * file.
6 */
7
8declare module '@ioc:Adonis/Core/Env' {
9 /*
10 |--------------------------------------------------------------------------
11 | Getting types for validated environment variables
12 |--------------------------------------------------------------------------
13 |
14 | The `default` export from the "../env.ts" file exports types for the
15 | validated environment variables. Here we merge them with the `EnvTypes`
16 | interface so that you can enjoy intellisense when using the "Env"
17 | module.
18 |
19 */
20
21 type CustomTypes = typeof import('../env').default;
22 interface EnvTypes extends CustomTypes {}
23}
diff --git a/contracts/events.ts b/contracts/events.ts
new file mode 100644
index 0000000..541bdc2
--- /dev/null
+++ b/contracts/events.ts
@@ -0,0 +1,33 @@
1/**
2 * Contract source: https://git.io/JfefG
3 *
4 * Feel free to let us know via PR, if you find something broken in this contract
5 * file.
6 */
7
8import User from 'App/Models/User';
9
10declare module '@ioc:Adonis/Core/Event' {
11 /*
12 |--------------------------------------------------------------------------
13 | Define typed events
14 |--------------------------------------------------------------------------
15 |
16 | You can define types for events inside the following interface and
17 | AdonisJS will make sure that all listeners and emit calls adheres
18 | to the defined types.
19 |
20 | For example:
21 |
22 | interface EventsList {
23 | 'new:user': UserModel
24 | }
25 |
26 | Now calling `Event.emit('new:user')` will statically ensure that passed value is
27 | an instance of the the UserModel only.
28 |
29 */
30 interface EventsList {
31 'forgot:password': { user: User; token: string };
32 }
33}
diff --git a/contracts/hash.ts b/contracts/hash.ts
new file mode 100644
index 0000000..af336c7
--- /dev/null
+++ b/contracts/hash.ts
@@ -0,0 +1,26 @@
1/**
2 * Contract source: https://git.io/Jfefs
3 *
4 * Feel free to let us know via PR, if you find something broken in this contract
5 * file.
6 */
7
8import { InferListFromConfig } from '@adonisjs/core/build/config';
9import hashConfig from '../config/hash';
10
11declare module '@ioc:Adonis/Core/Hash' {
12 interface HashersList extends InferListFromConfig<typeof hashConfig> {
13 bcrypt: {
14 config: BcryptConfig;
15 implementation: BcryptContract;
16 };
17 argon: {
18 config: ArgonConfig;
19 implementation: ArgonContract;
20 };
21 legacy: {
22 config: BcryptConfig;
23 implementation: HashDriverContract;
24 };
25 }
26}
diff --git a/contracts/mail.ts b/contracts/mail.ts
new file mode 100644
index 0000000..0ea307f
--- /dev/null
+++ b/contracts/mail.ts
@@ -0,0 +1,13 @@
1/**
2 * Contract source: https://git.io/JvgAT
3 *
4 * Feel free to let us know via PR, if you find something broken in this contract
5 * file.
6 */
7
8import { InferMailersFromConfig } from '@adonisjs/mail/build/config';
9import mailConfig from '../config/mail';
10
11declare module '@ioc:Adonis/Addons/Mail' {
12 interface MailersList extends InferMailersFromConfig<typeof mailConfig> {}
13}
diff --git a/contracts/tests.ts b/contracts/tests.ts
new file mode 100644
index 0000000..fec995d
--- /dev/null
+++ b/contracts/tests.ts
@@ -0,0 +1,19 @@
1/**
2 * Contract source: https://bit.ly/3DP1ypf
3 *
4 * Feel free to let us know via PR, if you find something broken in this contract
5 * file.
6 */
7
8import '@japa/runner';
9
10declare module '@japa/runner' {
11 interface TestContext {
12 // Extend context
13 }
14
15 // eslint-disable-next-line @typescript-eslint/no-unused-vars
16 interface Test<TestData> {
17 // Extend test
18 }
19}