Update to v5

This commit is contained in:
2021-05-05 19:12:31 +02:00
parent a1a7fce36f
commit a4d033195a
17 changed files with 1941 additions and 887 deletions

View File

@@ -25,9 +25,16 @@
"@adonisjs/session",
"@adonisjs/auth",
"@adonisjs/lucid",
"@adonisjs/mail"
"@adonisjs/mail",
"@adonisjs/view"
],
"aceProviders": [
"@adonisjs/repl"
],
"metaFiles": [
{
"pattern": "resources/views/**/*.edge",
"reloadServer": false
}
]
}

View File

@@ -21,8 +21,11 @@ REDIS_HOST=
REDIS_PASSWORD=
GITHUB_TOKEN=
GITHUB_SOURCE=
BASE_URL=
API_VERSION=
SMTP_HOST=
SMTP_PORT=
SMTP_USERNAME=
SMTP_PASSWORD=
CACHE_VIEWS=
MAILGUN_API_KEY=
MAILGUN_URL=

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +1,7 @@
import { HttpContextContract } from '@ioc:Adonis/Core/HttpContext'
import FormValidator from "App/Validators/FormValidator";
import Form from "App/Models/Form";
import FormConfirmation from "App/Mailers/FormConfirmation";
export default class FormsController {
@@ -8,6 +9,8 @@ export default class FormsController {
const data = await request.validate(FormValidator)
await Form.create(data)
await new FormConfirmation(data.name, data.email).sendLater()
//todo send confirmation email + email to me
return response.status(200).send({
status: 200

View File

@@ -5,7 +5,7 @@ import ProjectValidator from "App/Validators/project/ProjectValidator";
export default class ProjectsController {
public async get ({ response }: HttpContextContract) {
const projects = await Project.query().orderBy('progress', 'desc')
const projects = await Project.query().orderBy('id', 'asc')
return response.status(200).send({
projects
})

View File

@@ -0,0 +1,22 @@
import mjml from 'mjml'
import { BaseMailer, MessageContract } from '@ioc:Adonis/Addons/Mail'
import View from "@ioc:Adonis/Core/View";
export default class FormConfirmation extends BaseMailer {
constructor (private name: string, private email: string) {
super()
}
public html = mjml(View.render('emails/confirmation_form', {
name: this.name
})).html
public prepare(message: MessageContract) {
message
.from('contact@arthurdanjou.fr')
.to(this.email)
.subject('Confirmation Form')
.html(this.html)
}
}

View File

@@ -1,5 +1,5 @@
/**
* Config source: https://git.io/JvyKy
* Config source: https://git.io/JY0mp
*
* Feel free to let us know via PR, if you find something broken in this config
* file.
@@ -17,69 +17,8 @@ import { AuthConfig } from '@ioc:Adonis/Addons/Auth'
|
*/
const authConfig: AuthConfig = {
guard: 'web',
list: {
/*
|--------------------------------------------------------------------------
| Web Guard
|--------------------------------------------------------------------------
|
| Web guard uses classic old school sessions for authenticating users.
| If you are building a standard web application, it is recommended to
| use web guard with session driver
|
*/
web: {
driver: 'session',
provider: {
/*
|--------------------------------------------------------------------------
| Driver
|--------------------------------------------------------------------------
|
| Name of the driver
|
*/
driver: 'lucid',
/*
|--------------------------------------------------------------------------
| Identifier key
|--------------------------------------------------------------------------
|
| The identifier key is the unique key on the model. In most cases specifying
| the primary key is the right choice.
|
*/
identifierKey: 'id',
/*
|--------------------------------------------------------------------------
| Uids
|--------------------------------------------------------------------------
|
| Uids are used to search a user against one of the mentioned columns. During
| login, the auth module will search the user mentioned value against one
| of the mentioned columns to find their user record.
|
*/
uids: ['email'],
/*
|--------------------------------------------------------------------------
| Model
|--------------------------------------------------------------------------
|
| The model to use for fetching or finding users. The model is imported
| lazily since the config files are read way earlier in the lifecycle
| of booting the app and the models may not be in a usable state at
| that time.
|
*/
model: () => import('App/Models/User'),
},
},
guard: 'api',
guards: {
/*
|--------------------------------------------------------------------------
| OAT Guard
@@ -113,6 +52,7 @@ const authConfig: AuthConfig = {
|
*/
tokenProvider: {
type: 'api',
driver: 'redis',
redisConnection: 'local',
foreignKey: 'user_id',

View File

@@ -18,7 +18,7 @@ const mailConfig: MailConfig = {
| a mailer
|
*/
mailer: 'smtp',
mailer: 'mailgun',
/*
|--------------------------------------------------------------------------
@@ -36,21 +36,16 @@ const mailConfig: MailConfig = {
mailers: {
/*
|--------------------------------------------------------------------------
| Smtp
| Mailgun
|--------------------------------------------------------------------------
|
| Uses SMTP protocol for sending email
| Uses Mailgun service for sending emails.
|
*/
smtp: {
driver: 'smtp',
host: Env.get('SMTP_HOST'),
port: Env.get('SMTP_PORT'),
auth: {
user: Env.get('SMTP_USERNAME'),
pass: Env.get('SMTP_PASSWORD'),
type: 'login',
}
mailgun: {
driver: 'mailgun',
baseUrl: `https://api.mailgun.net/v3/${Env.get('MAILGUN_URL')}`,
key: Env.get('MAILGUN_API_KEY'),
},
},

View File

@@ -1,5 +1,5 @@
/**
* Contract source: https://git.io/JvyKD
* Contract source: https://git.io/JOdz5
*
* Feel free to let us know via PR, if you find something broken in this
* file.
@@ -45,30 +45,16 @@ declare module '@ioc:Adonis/Addons/Auth' {
|--------------------------------------------------------------------------
|
| The guards are used for authenticating users using different drivers.
| The auth module comes with 4 different guards.
| The auth module comes with 3 different guards.
|
| - SessionGuardContract
| - BasicAuthGuardContract
| - JwtGuardContract
| - OATGuardContract ( Opaque access token )
|
| Every guard needs a provider for looking up users from the database.
|
*/
interface GuardsList {
/*
|--------------------------------------------------------------------------
| Web Guard
|--------------------------------------------------------------------------
|
| The web guard uses sessions for maintaining user login state. It uses
| the `user` provider for fetching user details.
|
*/
web: {
implementation: SessionGuardContract<'user', 'web'>,
config: SessionGuardConfig<'user'>,
},
/*
|--------------------------------------------------------------------------
| OAT Guard

View File

@@ -9,6 +9,6 @@ declare module '@ioc:Adonis/Addons/Mail' {
import { MailDrivers } from '@ioc:Adonis/Addons/Mail'
interface MailersList {
smtp: MailDrivers['smtp'],
mailgun: MailDrivers['mailgun'],
}
}

18
env.ts
View File

@@ -15,8 +15,9 @@
import Env from '@ioc:Adonis/Core/Env'
export default Env.rules({
//App
HOST: Env.schema.string({ format: 'host' }),
HOST: Env.schema.string({ format: 'host' }),
PORT: Env.schema.number(),
APP_KEY: Env.schema.string(),
APP_NAME: Env.schema.string(),
@@ -38,5 +39,18 @@ export default Env.rules({
MYSQL_DB_NAME: Env.schema.string(),
//Session
SESSION_DRIVER: Env.schema.string()
SESSION_DRIVER: Env.schema.string(),
//Views
CACHE_VIEWS: Env.schema.boolean(),
//Utils
GITHUB_TOKEN: Env.schema.string(),
GITHUB_SOURCE: Env.schema.string({ format: 'url' }),
BASE_URL: Env.schema.string({ format: 'url' }),
API_VERSION: Env.schema.string(),
//Mails
MAILGUN_API_KEY: Env.schema.string(),
MAILGUN_URL: Env.schema.string()
})

View File

@@ -11,27 +11,29 @@
"lr": "node ace list:routes"
},
"devDependencies": {
"@adonisjs/assembler": "^3.0.0",
"@adonisjs/assembler": "^5.1.1",
"adonis-preset-ts": "^2.1.0",
"pino-pretty": "^4.7.1",
"typescript": "^4.2.3",
"youch": "^2.2.1",
"youch-terminal": "^1.1.0"
"typescript": "^4.2.4",
"youch": "^2.2.2",
"youch-terminal": "^1.1.1"
},
"dependencies": {
"@adonisjs/auth": "^5.1.1",
"@adonisjs/core": "~5.0.4-preview-rc-2.1",
"@adonisjs/lucid": "^10.0.0",
"@adonisjs/mail": "^5.2.3",
"@adonisjs/redis": "^5.0.9",
"@adonisjs/repl": "^1.0.0",
"@adonisjs/session": "^4.0.5",
"@adonisjs/auth": "^8.0.2",
"@adonisjs/core": "~5.1.6",
"@adonisjs/lucid": "^14.0.0",
"@adonisjs/mail": "^7.1.1",
"@adonisjs/redis": "^7.0.2",
"@adonisjs/repl": "^3.1.2",
"@adonisjs/session": "^6.0.3",
"@adonisjs/view": "^6.0.1",
"axios": "^0.21.1",
"luxon": "^1.26.0",
"mjml": "^4.9.3",
"mysql": "^2.18.1",
"phc-argon2": "^1.1.0",
"phc-argon2": "^1.1.1",
"proxy-addr": "^2.0.6",
"reflect-metadata": "^0.1.13",
"tslib": "^2.1.0"
"tslib": "^2.2.0"
}
}

View File

@@ -0,0 +1,10 @@
<mjml>
<mj-body>
<mj-section>
<mj-column>
<mj-divider border-color="#F45E43"></mj-divider>
<mj-text font-size="20px" color="#F45E43" font-family="helvetica">Hello World</mj-text>
</mj-column>
</mj-section>
</mj-body>
</mjml>

View File

@@ -21,8 +21,8 @@ import Server from "@ioc:Adonis/Core/Server";
*/
Server.middleware.register([
'Adonis/Core/BodyParserMiddleware',
'App/Middleware/SilentAuth',
() => import('@ioc:Adonis/Core/BodyParser'),
() => import('App/Middleware/SilentAuth'),
])
/*
@@ -42,5 +42,5 @@ Server.middleware.register([
|
*/
Server.middleware.registerNamed({
auth: 'App/Middleware/Auth',
auth: () => import('App/Middleware/Auth'),
})

View File

@@ -2,18 +2,19 @@ import Route from '@ioc:Adonis/Core/Route'
import Application from "@ioc:Adonis/Core/Application";
import {HttpContextContract} from "@ioc:Adonis/Core/HttpContext";
import HealthCheck from "@ioc:Adonis/Core/HealthCheck";
import Env from '@ioc:Adonis/Core/Env'
const BASE_URL = "https://api.arthurdanjou.fr"
const BASE_URL = Env.get('BASE_URL')
Route.get('/', async ({response}: HttpContextContract) => {
return response.status(200).send({
domain: BASE_URL,
version: "2.0",
version: Env.get('API_VERSION'),
source: `${BASE_URL}/source`,
healthCheck: `${BASE_URL}/health`,
routes: {
profile: `${BASE_URL}/profile`,
stats: `${BASE_URL}/stats`,
//stats: `${BASE_URL}/stats`,
states: `${BASE_URL}/states`,
locations: `${BASE_URL}/locations`,
projects: `${BASE_URL}/projects`
@@ -22,7 +23,7 @@ Route.get('/', async ({response}: HttpContextContract) => {
})
Route.get('/source', async ({response}: HttpContextContract) => {
return response.redirect('https://github.com/arthurdanjou/artapi')
return response.redirect(Env.get('GITHUB_SOURCE'))
})
Route.get('health', async ({response}: HttpContextContract) => {
@@ -35,7 +36,7 @@ Route.get('health', async ({response}: HttpContextContract) => {
// ArtAPI
Route.get('/profile', 'ProfileController.me')
Route.get('/locations', 'LocationsController.get')
Route.get('/stats', 'StatsController.get')
//Route.get('/stats', 'StatsController.get')
Route.get('/states', 'StatesController.get')
Route.get('/projects', 'ProjectsController.get')
@@ -57,9 +58,6 @@ Route.group(() => {
Route.group(() => {
// ArtAPI
Route.post('form', 'FormsController.send')
Route.post('/states/:state', 'StatesController.set')
Route.post('/stats/build', 'StatesController.incrementBuild')
Route.post('/stats/command', 'StatesController.incrementCommand')
// ArtSite
Route.group(() => {
Route.get('/:slug', 'PostsController.getLikes')

View File

@@ -27,12 +27,14 @@
},
"types": [
"@adonisjs/core",
"@adonisjs/env",
"@adonisjs/repl",
"@adonisjs/redis",
"@adonisjs/session",
"@adonisjs/auth",
"@adonisjs/lucid",
"@adonisjs/mail"
"@adonisjs/mail",
"@adonisjs/view",
]
}
}

2309
yarn.lock

File diff suppressed because it is too large Load Diff