From e503468660a13760010a94ecda5f0625c6f47f87 Mon Sep 17 00:00:00 2001 From: Ricardo Date: Fri, 13 Oct 2023 14:12:03 +0200 Subject: Server re-build with latest AdonisJS framework & Typescript (#47) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 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 Co-authored-by: Balaji Vijayakumar Co-authored-by: MCMXC <16797721+mcmxcdev@users.noreply.github.com> Co-authored-by: André Oliveira --- resources/views/dashboard/account.edge | 28 +-- resources/views/dashboard/data.edge | 340 ++++++++++++++------------ resources/views/dashboard/delete.edge | 10 +- resources/views/dashboard/forgotPassword.edge | 12 +- resources/views/dashboard/login.edge | 14 +- resources/views/dashboard/resetPassword.edge | 14 +- resources/views/dashboard/transfer.edge | 14 +- resources/views/emails/reset_password.edge | 8 + resources/views/layouts/main.edge | 6 +- resources/views/layouts/v2.edge | 4 +- resources/views/others/import.edge | 12 +- resources/views/others/index.edge | 5 +- resources/views/others/message.edge | 2 +- resources/views/others/new.edge | 4 +- 14 files changed, 251 insertions(+), 222 deletions(-) create mode 100644 resources/views/emails/reset_password.edge (limited to 'resources/views') diff --git a/resources/views/dashboard/account.edge b/resources/views/dashboard/account.edge index b805ac5..3a1f53c 100644 --- a/resources/views/dashboard/account.edge +++ b/resources/views/dashboard/account.edge @@ -1,4 +1,4 @@ -@layout('layouts.v2') +@layout('layouts/v2') @section('content')
@@ -6,19 +6,19 @@

Your Ferdium account

- @if(flashMessage('error')) + @if(flashMessages.has('error'))
- {{ flashMessage('error') }} + {{ flashMessages.get('error') }}
@endif - @if(old('message')) + @if(flashMessages.has('message'))
- {{ old('message') }} + {{ flashMessages.get('message') }}
@endif - @if(flashMessage('notification')) + @if(flashMessages.has('notification'))
- {{ flashMessage('notification.message') }} + {{ flashMessages.get('notification.message') }}
@endif @if(success === true) @@ -34,7 +34,7 @@
+ type="text" value="{{ flashMessages.get('username', username) }}" placeholder="Name" name="username" required>
@@ -42,7 +42,7 @@
+ type="text" value="{{ flashMessages.get('lastname', lastname) }}" placeholder="Last Name" name="lastname" required>
@@ -50,7 +50,7 @@
+ type="email" value="{{ flashMessages.get('email', email) }}" placeholder="E-Mail" name="email" required>
@@ -67,16 +67,16 @@
My account data + href="/user/data">My account data
Import/Export account data + href="/user/transfer">Import/Export account data
Delete my account + href="/user/delete">Delete my account
Logout + href="/user/logout">Logout
diff --git a/resources/views/dashboard/data.edge b/resources/views/dashboard/data.edge index cf48c1c..ac1ee40 100644 --- a/resources/views/dashboard/data.edge +++ b/resources/views/dashboard/data.edge @@ -1,179 +1,201 @@ -@layout('layouts.v2') +@layout('layouts/v2') @section('content')

Your Account Data

- - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + +
- Name - - Value -
- E-Mail - - {{ mail }} -
- Username - - {{ username }} -
- Last Name - - {{ lastname }} -
- Created account on - - {{ created }} -
- Last account update on - - {{ updated }} -
+ Name + + Value +
+ E-Mail + + {{ mail }} +
+ Username + + {{ username }} +
+ Last Name + + {{ lastname }} +
+ Created account on + + {{ created }} +
+ Last account update on + + {{ updated }} +
- +

Your Services

- - - - - - - - - - @each(service in services) - - - - - - - - - @endeach + + + + + + + + + + @each(service in services) + + + + + + + + + @endeach
- Service ID - - Name - - Recipe ID - - Settings - - Created - - Last updated -
- {{ service.serviceId }} - - {{ service.name }} - - {{ service.recipeId }} - - {{ stringify(service.settings) }} - - {{ service.created_at }} - - {{ service.updated_at }} -
+ Service ID + + Name + + Recipe ID + + Settings + + Created + + Last updated +
+ {{ service.serviceId }} + + {{ service.name }} + + {{ service.recipeId }} + + {{ stringify(service.settings) }} + + {{ service.createdAt.toFormat('yyyy-MM-dd HH:mm:ss') }} + + {{ service.updatedAt.toFormat('yyyy-MM-dd HH:mm:ss') }} +
- +

Your Workspaces

- - - - - - - - - - - @each(workspace in workspaces) - - - - - - - - - - @endeach + + + + + + + + + + + @each(workspace in workspaces) + + + + + + + + + + @endeach
- Service ID - - Name - - Order - - Services - - Data - - Created - - Last updated -
- {{ workspace.workspaceId }} - - {{ workspace.name }} - - {{ workspace.order }} - - {{ stringify(workspace.services) }} - - {{ stringify(workspace.data) }} - - {{ workspace.created_at }} - - {{ workspace.updated_at }} -
+ Workspace ID + + Name + + Order + + Services + + Data + + Created + + Last updated +
+ {{ workspace.workspaceId }} + + {{ workspace.name }} + + {{ workspace.order }} + + {{ stringify(workspace.services) }} + + {{ stringify(workspace.data) }} + + {{ workspace.createdAt.toFormat('yyyy-MM-dd HH:mm:ss') }} + + {{ workspace.updatedAt.toFormat('yyyy-MM-dd HH:mm:ss') }} +
- +
Back to My Account @@ -182,4 +204,4 @@
-@endsection \ No newline at end of file +@endsection diff --git a/resources/views/dashboard/delete.edge b/resources/views/dashboard/delete.edge index d058a73..ea4a431 100644 --- a/resources/views/dashboard/delete.edge +++ b/resources/views/dashboard/delete.edge @@ -1,17 +1,17 @@ -@layout('layouts.v2') +@layout('layouts/v2') @section('content')

Delete your account

- @if(flashMessage('error')) + @if(flashMessages.has('error'))
- {{ flashMessage('error') }} + {{ flashMessages.get('error') }}
@endif - @if(old('message')) + @if(flashMessages.has('message'))
- {{ old('message') }} + {{ flashMessages.get('message') }}
@endif diff --git a/resources/views/dashboard/forgotPassword.edge b/resources/views/dashboard/forgotPassword.edge index cd5d8c0..b41e1cc 100644 --- a/resources/views/dashboard/forgotPassword.edge +++ b/resources/views/dashboard/forgotPassword.edge @@ -1,4 +1,4 @@ -@layout('layouts.v2') +@layout('layouts/v2') @section('content')
@@ -8,14 +8,14 @@ Forgot Password? - @if(flashMessage('error')) + @if(flashMessages.has('error'))
- {{ flashMessage('error') }} + {{ flashMessages.get('error') }}
@endif - @if(old('message')) + @if(flashMessages.has('message'))
- {{ old('message') }} + {{ flashMessages.get('message') }}
@endif @@ -30,7 +30,7 @@ name="mail" type="text" placeholder="E-Mail" - value="{{ old('mail', '') }}" + value="{{ flashMessages.get('mail', '') }}" required>
diff --git a/resources/views/dashboard/login.edge b/resources/views/dashboard/login.edge index 23995ae..360ad98 100644 --- a/resources/views/dashboard/login.edge +++ b/resources/views/dashboard/login.edge @@ -1,4 +1,4 @@ -@layout('layouts.v2') +@layout('layouts/v2') @section('content')
@@ -8,14 +8,14 @@ Login - @if(flashMessage('error')) + @if(flashMessages.has('error'))
- {{ flashMessage('error') }} + {{ flashMessages.get('error') }}
@endif - @if(old('message')) + @if(flashMessages.has('message'))
- {{ old('message') }} + {{ flashMessages.get('message') }}
@endif @@ -30,7 +30,7 @@ name="mail" type="text" placeholder="E-Mail" - value="{{ old('mail', '') }}" + value="{{ flashMessages.get('mail', '') }}" required>
@@ -60,7 +60,7 @@
diff --git a/resources/views/dashboard/resetPassword.edge b/resources/views/dashboard/resetPassword.edge index 4b39169..33b08c3 100644 --- a/resources/views/dashboard/resetPassword.edge +++ b/resources/views/dashboard/resetPassword.edge @@ -1,4 +1,4 @@ -@layout('layouts.v2') +@layout('layouts/v2') @section('content')
@@ -8,14 +8,14 @@ Reset Your Password - @if(flashMessage('error')) + @if(flashMessages.has('error'))
- {{ flashMessage('error') }} + {{ flashMessages.get('error') }}
@endif - @if(old('message')) + @if(flashMessages.has('message'))
- {{ old('message') }} + {{ flashMessages.get('message') }}
@endif @@ -30,7 +30,7 @@ name="password" type="password" placeholder="New Password" - value="{{ old('password', '') }}" + value="{{ flashMessages.get('password', '') }}" required>
@@ -43,7 +43,7 @@ name="password_confirmation" type="password" placeholder="Confirm Password" - value="{{ old('password_confirmation', '') }}" + value="{{ flashMessages.get('password_confirmation', '') }}" required>
diff --git a/resources/views/dashboard/transfer.edge b/resources/views/dashboard/transfer.edge index bdae1f4..759edbf 100644 --- a/resources/views/dashboard/transfer.edge +++ b/resources/views/dashboard/transfer.edge @@ -1,22 +1,22 @@ -@layout('layouts.v2') +@layout('layouts/v2') @section('content')

Import/Export data from another Ferdium server

- @if(flashMessage('error')) + @if(flashMessages.has('error'))
- {{ flashMessage('error') }} + {{ flashMessages.get('error') }}
@endif - @if(old('message')) + @if(flashMessages.has('message'))
- {{ old('message') }} + {{ flashMessages.get('message') }}
@endif - @if(flashMessage('notification')) + @if(flashMessages.has('notification'))
- {{ flashMessage('notification.message') }} + {{ flashMessages.get('notification.message') }}
@endif @if(success === true) diff --git a/resources/views/emails/reset_password.edge b/resources/views/emails/reset_password.edge new file mode 100644 index 0000000..e2d2c1c --- /dev/null +++ b/resources/views/emails/reset_password.edge @@ -0,0 +1,8 @@ +Hello {{ username }}, +we received a request to reset your Ferdium account password. +Use the link below to reset your password. If you didn't requested that your password be reset, please ignore this +message. + +{{ appUrl }}/user/reset?token={{ encodeURIComponent(token) }} + +This message was sent automatically. Please do not reply. diff --git a/resources/views/layouts/main.edge b/resources/views/layouts/main.edge index c611bc5..a53b6c5 100644 --- a/resources/views/layouts/main.edge +++ b/resources/views/layouts/main.edge @@ -6,10 +6,10 @@ ferdium-server - + - {{ style('css/vanilla') }} - {{ style('css/main') }} + + diff --git a/resources/views/layouts/v2.edge b/resources/views/layouts/v2.edge index 38af29f..ac20cab 100644 --- a/resources/views/layouts/v2.edge +++ b/resources/views/layouts/v2.edge @@ -8,8 +8,8 @@ Server - {{ style('css/tailwind') }} - {{ style('css/main') }} + + diff --git a/resources/views/others/import.edge b/resources/views/others/import.edge index 7fb58de..ca7cc6d 100644 --- a/resources/views/others/import.edge +++ b/resources/views/others/import.edge @@ -1,4 +1,4 @@ -@layout('layouts.v2') +@layout('layouts/v2') @section('content')
@@ -11,14 +11,14 @@ Please login using your Franz/Ferdi account. We will create a new Ferdium account with the same credentials.

- @if(flashMessage('error')) + @if(flashMessages.has('error'))
- {{ flashMessage('error') }} + {{ flashMessages.get('error') }}
@endif - @if(old('message')) + @if(flashMessages.has('message'))
- {{ old('message') }} + {{ flashMessages.get('message') }}
@endif @@ -32,7 +32,7 @@ name="email" type="text" placeholder="E-Mail" - value="{{ old('email', '') }}" + value="{{ flashMessages.get('email', '') }}" required>
diff --git a/resources/views/others/index.edge b/resources/views/others/index.edge index 5cc5726..1f595b6 100644 --- a/resources/views/others/index.edge +++ b/resources/views/others/index.edge @@ -1,4 +1,4 @@ -@layout('layouts.v2') +@layout('layouts/v2') @section('content') @@ -39,7 +39,7 @@
- +
@@ -53,6 +53,5 @@ // Show on page document.getElementById('server').innerText = server; - @endsection diff --git a/resources/views/others/message.edge b/resources/views/others/message.edge index 59be2ed..08200da 100644 --- a/resources/views/others/message.edge +++ b/resources/views/others/message.edge @@ -1,4 +1,4 @@ -@layout('layouts.v2') +@layout('layouts/v2') @section('content')
diff --git a/resources/views/others/new.edge b/resources/views/others/new.edge index ed97a34..66587c2 100644 --- a/resources/views/others/new.edge +++ b/resources/views/others/new.edge @@ -1,4 +1,4 @@ -@layout('layouts.main') +@layout('layouts/main') @section('content')

Create a new recipe

@@ -33,5 +33,5 @@ - + @endsection -- cgit v1.2.3-54-g00ecf