Browse Source

Ajoute les 2 controllers et l'authentification

master
Shikiryu 4 years ago
parent
commit
7ebb888bb2
  1. 32
      app/Http/Controllers/LinksController.php
  2. 33
      app/Http/Controllers/UsersController.php
  3. 9
      app/Providers/AuthServiceProvider.php
  4. 14
      app/User.php
  5. 10
      bootstrap/app.php
  6. 9
      routes/web.php

32
app/Http/Controllers/LinksController.php

@ -0,0 +1,32 @@
<?php
namespace App\Http\Controllers;
use App\User;
use Illuminate\Http\Request;
use Illuminate\Validation\ValidationException;
use Laravel\Lumen\Routing\Controller as BaseController;
class LinksController extends BaseController
{
public function add(Request $request)
{
/** @var User $user */
$user = $request->user()->first();
$email = $user->email;
$link = $request->input('link');
$link = filter_var($link, FILTER_VALIDATE_URL);
if ($link === false) {
return response()->json(['error' => 'Invalid link.'], 422);
}
$email_sent = mail($email, 'New link', $link);
if ($email_sent) {
return response()->json(['info' => 'Email sent.']);
}
return response()->json(['error' => 'An error occured while sending email'], 500);
}
}

33
app/Http/Controllers/UsersController.php

@ -0,0 +1,33 @@
<?php
namespace App\Http\Controllers;
use App\User;
use Illuminate\Http\Request;
use Illuminate\Validation\ValidationException;
use Laravel\Lumen\Routing\Controller as BaseController;
class UsersController extends BaseController
{
public function create(Request $request)
{
try {
$data = $this->validate($request, [
'email' => 'required|email|unique:users'
]);
$token = bin2hex(random_bytes(72));
$user = new User(['email' => $data['email']]);
$user->token = $token;
$user->save();
return response()->json(['token' => $token, 'email' => $data['email']]);
} catch (ValidationException $e) {
return response()->json(['error' => $e->errors()], 422);
} catch (\Exception $e) {
return response()->json(['error' => $e->getMessage()], 422);
}
}
}

9
app/Providers/AuthServiceProvider.php

@ -3,6 +3,7 @@
namespace App\Providers;
use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Gate;
use Illuminate\Support\ServiceProvider;
@ -30,9 +31,11 @@ class AuthServiceProvider extends ServiceProvider
// should return either a User instance or null. You're free to obtain
// the User instance via an API token or any other method necessary.
$this->app['auth']->viaRequest('api', function ($request) {
if ($request->input('api_token')) {
return User::where('api_token', $request->input('api_token'))->first();
$this->app['auth']->viaRequest('api', function ( Request $request) {
if ($request->input('token') && $request->input('email')) {
return User::where('token', $request->input('token'))
->where('email', $request->input('email'))
->first();
}
});
}

14
app/User.php

@ -1,8 +1,18 @@
<?php namespace App;
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model {
class User extends Model
{
/**
* The table associated with the model.
*
* @var string
*/
protected $table = 'users';
protected $fillable = ["email"];

10
bootstrap/app.php

@ -20,7 +20,7 @@ try {
*/
$app = new Laravel\Lumen\Application(
realpath(__DIR__.'/../')
dirname(__DIR__) . '/'
);
// $app->withFacades();
@ -63,9 +63,9 @@ $app->singleton(
// App\Http\Middleware\ExampleMiddleware::class
// ]);
// $app->routeMiddleware([
// 'auth' => App\Http\Middleware\Authenticate::class,
// ]);
$app->routeMiddleware([
'auth' => App\Http\Middleware\Authenticate::class,
]);
/*
|--------------------------------------------------------------------------
@ -79,7 +79,7 @@ $app->singleton(
*/
// $app->register(App\Providers\AppServiceProvider::class);
// $app->register(App\Providers\AuthServiceProvider::class);
$app->register(App\Providers\AuthServiceProvider::class);
// $app->register(App\Providers\EventServiceProvider::class);
/*

9
routes/web.php

@ -13,8 +13,9 @@
/** @var \Laravel\Lumen\Routing\Router $router */
$router->get('/', 'HomeController@home');
$router->post('/register', 'HomeController@iframe');
$router->post('/api/register', 'UsersController@create');
$router->post('/api/{token}', function($token) {
});
$router->post('/api/links', [
'middleware' => 'auth',
'uses' => 'LinksController@add'
]);
Loading…
Cancel
Save