From 48cb456c60daf8d005da35ea90f0d6261fc4bf56 Mon Sep 17 00:00:00 2001 From: Arthur DANJOU Date: Fri, 9 Jul 2021 21:06:37 +0200 Subject: [PATCH] Working Signed-off-by: Arthur DANJOU --- .env.example | 7 -- app/Controllers/Http/AuthController.ts | 101 -------------------- app/Controllers/Http/GuestBookController.ts | 24 ++++- app/Validators/guestbook/GuestValidator.ts | 3 + config/ally.ts | 56 ----------- contracts/ally.ts | 23 ----- env.ts | 8 -- start/routes/artsite.ts | 3 +- start/routes/auth.ts | 15 --- 9 files changed, 24 insertions(+), 216 deletions(-) delete mode 100755 config/ally.ts delete mode 100755 contracts/ally.ts diff --git a/.env.example b/.env.example index b7379ff..14e695b 100755 --- a/.env.example +++ b/.env.example @@ -32,10 +32,3 @@ SMTP_HOST= SMTP_PORT= SMTP_USERNAME= SMTP_PASSWORD= - -GITHUB_CLIENT_ID= -GITHUB_CLIENT_SECRET= -GOOGLE_CLIENT_ID= -GOOGLE_CLIENT_SECRET= -TWITTER_CLIENT_ID= -TWITTER_CLIENT_SECRET= diff --git a/app/Controllers/Http/AuthController.ts b/app/Controllers/Http/AuthController.ts index c3d2c2d..0211a9c 100755 --- a/app/Controllers/Http/AuthController.ts +++ b/app/Controllers/Http/AuthController.ts @@ -1,6 +1,5 @@ import {HttpContextContract} from '@ioc:Adonis/Core/HttpContext' import User from "App/Models/User"; -import {AllyUserContract} from "@ioc:Adonis/Addons/Ally"; export default class AuthController { @@ -43,104 +42,4 @@ export default class AuthController { }) } - public async twitter ({ ally, auth, response }: HttpContextContract) { - const twitter = ally.use('twitter') - - if (twitter.accessDenied()) { - return response.status(403).send({ - message: 'Access Denied!' - }) - } - - if (twitter.stateMisMatch()) { - return response.status(405).send({ - message: 'Request expired. Retry again!' - }) - } - - if (twitter.hasError()) { - return response.status(500).send({ - message: twitter.getError() - }) - } - - const twitterUser = await twitter.user() - const user = await this.createUser(twitterUser) - await auth.use('web').login(user, true) - return response.status(200).send({ - user: user - }) - } - - public async github ({ ally, auth, response }: HttpContextContract) { - const github = ally.use('github') - - if (github.accessDenied()) { - return response.status(403).send({ - message: 'Access Denied!' - }) - } - - if (github.stateMisMatch()) { - return response.status(405).send({ - message: 'Request expired. Retry again!' - }) - } - - if (github.hasError()) { - return response.status(500).send({ - message: github.getError() - }) - } - - const githubUser = await github.user() - const user = await this.createUser(githubUser) - await auth.use('web').login(user, true) - return response - .status(200) - .header('Access-Control-Allow-Origin', '*') - .send({ - user: user - }) - } - - public async google ({ ally, auth, response, }: HttpContextContract) { - const google = ally.use('google') - - if (google.accessDenied()) { - return response.status(403).send({ - message: 'Access Denied!' - }) - } - - if (google.stateMisMatch()) { - return response.status(405).send({ - message: 'Request expired. Retry again!' - }) - } - - if (google.hasError()) { - return response.status(500).send({ - message: google.getError() - }) - } - - const googleUser = await google.user() - const user = await this.createUser(googleUser) - await auth.use('web').login(user, true) - return response.status(200).send({ - user: user - }) - } - - public async createUser (allyUser: AllyUserContract): Promise { - return await User.firstOrCreate({ - email: allyUser.email!, - }, { - email: allyUser.email!, - username: allyUser.name, - isConfirmed: allyUser.emailVerificationState === 'verified' - }) - } - } diff --git a/app/Controllers/Http/GuestBookController.ts b/app/Controllers/Http/GuestBookController.ts index 1b04817..d4ab39b 100755 --- a/app/Controllers/Http/GuestBookController.ts +++ b/app/Controllers/Http/GuestBookController.ts @@ -1,10 +1,11 @@ import {HttpContextContract} from "@ioc:Adonis/Core/HttpContext"; import GuestValidator from "App/Validators/guestbook/GuestValidator"; import GuestbookMessage from "App/Models/GuestbookMessage"; +import User from "App/Models/User"; export default class GuestBookController { - public async get({response}: HttpContextContract) { + public async index ({response}: HttpContextContract) { const guestbook_messages = await GuestbookMessage .query() .preload('user') @@ -14,18 +15,31 @@ export default class GuestBookController { }) } - public async store({request, auth, response}: HttpContextContract) { + public async store ({request, response}: HttpContextContract) { const data = await request.validate(GuestValidator) - const user = await auth.user! + let user = await User.findBy('email', data.email) + if (!user) { + user = await User.create({ + email: data.email, + }) + } const guestbook_message = user.related('guestbook_message').firstOrCreate({ userId: user.id }, { - ...data, - userId: user.id + userId: user.id, + message: data.message }) return response.status(200).send({ guestbook_message }) } + public async get ({params, response}: HttpContextContract) { + const email = await params.email + const guestbook_message = await GuestbookMessage.findBy('email', email) + return response.status(200).send({ + signed: guestbook_message !== null + }) + } + } diff --git a/app/Validators/guestbook/GuestValidator.ts b/app/Validators/guestbook/GuestValidator.ts index 6c075fc..48579c3 100755 --- a/app/Validators/guestbook/GuestValidator.ts +++ b/app/Validators/guestbook/GuestValidator.ts @@ -8,6 +8,9 @@ export default class GuestValidator { public schema = schema.create({ message: schema.string({}, [ rules.required() + ]), + email: schema.string({}, [ + rules.email() ]) }) diff --git a/config/ally.ts b/config/ally.ts deleted file mode 100755 index 91c14d3..0000000 --- a/config/ally.ts +++ /dev/null @@ -1,56 +0,0 @@ -/** - * Config source: https://git.io/JOdi5 - * - * Feel free to let us know via PR, if you find something broken in this config - * file. - */ - -import Env from '@ioc:Adonis/Core/Env' -import { AllyConfig } from '@ioc:Adonis/Addons/Ally' - -/* -|-------------------------------------------------------------------------- -| Ally Config -|-------------------------------------------------------------------------- -| -| The `AllyConfig` relies on the `SocialProviders` interface which is -| defined inside `contracts/ally.ts` file. -| -*/ -const allyConfig: AllyConfig = { - /* - |-------------------------------------------------------------------------- - | Github driver - |-------------------------------------------------------------------------- - */ - github: { - driver: 'github', - clientId: Env.get('GITHUB_CLIENT_ID'), - clientSecret: Env.get('GITHUB_CLIENT_SECRET'), - callbackUrl: `${Env.get('BASE_URL')}/auth/github/callback` - }, - /* - |-------------------------------------------------------------------------- - | Google driver - |-------------------------------------------------------------------------- - */ - google: { - driver: 'google', - clientId: Env.get('GOOGLE_CLIENT_ID'), - clientSecret: Env.get('GOOGLE_CLIENT_SECRET'), - callbackUrl: `${Env.get('BASE_URL')}/auth/google/callback` - }, - /* - |-------------------------------------------------------------------------- - | Twitter driver - |-------------------------------------------------------------------------- - */ - twitter: { - driver: 'twitter', - clientId: Env.get('TWITTER_CLIENT_ID'), - clientSecret: Env.get('TWITTER_CLIENT_SECRET'), - callbackUrl: `${Env.get('BASE_URL')}/auth/twitter/callback` - }, -} - -export default allyConfig diff --git a/contracts/ally.ts b/contracts/ally.ts deleted file mode 100755 index ee66084..0000000 --- a/contracts/ally.ts +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Contract source: https://git.io/JOdiQ - * - * Feel free to let us know via PR, if you find something broken in this contract - * file. - */ - -declare module '@ioc:Adonis/Addons/Ally' { - interface SocialProviders { - github: { - config: GithubDriverConfig - implementation: GithubDriverContract - } - google: { - config: GoogleDriverConfig - implementation: GoogleDriverContract - } - twitter: { - config: TwitterDriverConfig - implementation: TwitterDriverContract - } - } -} diff --git a/env.ts b/env.ts index a16ebe6..f95779c 100755 --- a/env.ts +++ b/env.ts @@ -56,12 +56,4 @@ export default Env.rules({ SMTP_PORT: Env.schema.number(), SMTP_USERNAME: Env.schema.string(), SMTP_PASSWORD: Env.schema.string(), - - //Socials Authentication - GOOGLE_CLIENT_ID: Env.schema.string(), - GOOGLE_CLIENT_SECRET: Env.schema.string(), - TWITTER_CLIENT_ID: Env.schema.string(), - TWITTER_CLIENT_SECRET: Env.schema.string(), - GITHUB_CLIENT_ID: Env.schema.string(), - GITHUB_CLIENT_SECRET: Env.schema.string(), }) diff --git a/start/routes/artsite.ts b/start/routes/artsite.ts index 620277f..6619fd6 100644 --- a/start/routes/artsite.ts +++ b/start/routes/artsite.ts @@ -10,6 +10,7 @@ Route.group(() => { Route.get('/subscribers', 'SubscribersController.get') Route.post('/subscribers', 'SubscribersController.store') Route.delete('/subscribers', 'SubscribersController.delete') - Route.get('/guestbook', 'GuestBookController.get') + Route.get('/guestbook', 'GuestBookController.index') Route.post('/guestbook', 'GuestBookController.store') + Route.post('/guestbook/:email', 'GuestBookController.store') }).middleware('auth') diff --git a/start/routes/auth.ts b/start/routes/auth.ts index add1705..078fddd 100644 --- a/start/routes/auth.ts +++ b/start/routes/auth.ts @@ -3,21 +3,6 @@ import Route from "@ioc:Adonis/Core/Route"; Route.group(() => { Route.get('/me', 'AuthController.user').middleware('auth') Route.post('/token', 'AuthController.createInfiniteToken') - Route.post('/login', 'AuthController.login') Route.post('/logout', 'AuthController.logout') - - Route.get('/twitter/callback', 'AuthController.twitter') - Route.get('/github/callback', 'AuthController.github') - Route.get('/google/callback', 'AuthController.google') - - Route.get('/twitter', async ({ally}) => { - return ally.use('twitter').redirect() - }) - Route.get('/github', async ({ally}) => { - return ally.use('github').redirect() - }) - Route.get('/google', async ({ally}) => { - return ally.use('google').redirect() - }) }).prefix('/auth')