diff --git a/app/Http/Controllers/AuthController.php b/app/Http/Controllers/AuthController.php index 38d50e1..20aacb2 100644 --- a/app/Http/Controllers/AuthController.php +++ b/app/Http/Controllers/AuthController.php @@ -2,76 +2,99 @@ namespace App\Http\Controllers; -use Illuminate\Support\Facades\Auth; -use App\Http\Controllers\Controller; +//use Illuminate\Support\Facades\Auth; -class AuthController extends Controller { - /** - * Create a new AuthController instance. - * - * @return void - */ - public function __construct() { - $this->middleware('auth:api', ['except' => ['login']]); - } +use App\Transformers\UsersTransformer; +use App\Http\Requests; +use App\User; +use Illuminate\Http\Request; +use Tymon\JWTAuth\Exceptions\JWTException; +use Tymon\JWTAuth\Facades\JWTAuth; +//use App\Http\Controllers\Controller; - /** - * Get a JWT via given credentials. - * - * @return \Illuminate\Http\JsonResponse - */ - public function login() { - $credentials = request(['username', 'password']); +class AuthController extends BaseController { + public function login(Request $request) { + $credentials = $request->only('username', 'password'); - if (!$token = auth()->attempt($credentials)) { + /* if (!$token = auth()->attempt($credentials)) { return response()->json(['error' => 'Unauthorised'], 401); } - return $this->respondWithToken($token); + return $this->respondWithToken($token); */ + try { + // verify the credentials and create a token for the user + if (! $token = JWTAuth::attempt($credentials)) { + return response()->json(['error' => 'invalid_credentials', 'message' => 'Wrong credentials. Try again'], 401); + } + } catch (JWTException $e) { + // something went wrong + return response()->json(['error' => 'could_not_create_token', 'message' => 'Could not create token. Try again'], 500); + } + // if no errors are encountered we can return a JWT + return response()->json(compact('token')); } - /** - * Get the authenticated User. - * - * @return \Illuminate\Http\JsonResponse - */ + public function register(Request $request) { + $newUser = [ + 'username' => $request->get('username'), + 'email' => $request->get('email'), + 'password' => bcrypt($request->get('password')), + ]; + + try { + $user = User::create($newUser); + } catch (Exception $e) { + return response()->json(['error' => 'User already exists.'], 401); + } + + $token = JWTAuth::fromUser($user); + + return response()->json(compact('token')); + } + + public function me() { - return response()->json(auth()->user()); + //return response()->json(auth()->user()); + try { + if (!$user = JWTAuth::parseToken()->authenticate()) { + return response()->json(['user_not_found'], 404); + } + } catch (\Tymon\JWTAuth\Exceptions\TokenExpiredException $e) { + return response()->json(['token_expired'], $e->getStatusCode()); + } catch (\Tymon\JWTAuth\Exceptions\TokenInvalidException $e) { + return response()->json(['token_invalid'], $e->getStatusCode()); + } catch (\Tymon\JWTAuth\Exceptions\JWTException $e) { + return response()->json(['token_absent'], $e->getStatusCode()); + } + // the token is valid and we have found the user via the sub claim + return $this->item($user, new UsersTransformer); } - /** - * Log the user out (Invalidate the token). - * - * @return \Illuminate\Http\JsonResponse - */ - public function logout() { + /*public function logout() { auth()->logout(); return response()->json(['message' => 'Successfully logged out']); - } + }*/ - /** - * Refresh a token. - * - * @return \Illuminate\Http\JsonResponse - */ public function refresh() { - return $this->respondWithToken(auth()->refresh()); + //return $this->respondWithToken(auth()->refresh()); + $token = JWTAuth::getToken(); + + if (!$token) { + return $this->error('Token NOT provided!', 401); + } + + $token = JWTAuth::refresh($token); + + return response()->json(compact('token')); } - /** - * Get the token array structure. - * - * @param string $token - * - * @return \Illuminate\Http\JsonResponse - */ - protected function respondWithToken($token) { + /*protected function respondWithToken($token) { return response()->json([ 'access_token' => $token, 'token_type' => 'bearer', 'expires_in' => 131500 ]); - } + }*/ } ?> \ No newline at end of file diff --git a/app/Http/Controllers/BaseController.php b/app/Http/Controllers/BaseController.php new file mode 100644 index 0000000..468d164 --- /dev/null +++ b/app/Http/Controllers/BaseController.php @@ -0,0 +1,10 @@ + [ 'throttle:60,1', 'bindings', + //\Barryvdh\Cors\HandleCors::class, ], ]; @@ -57,6 +59,8 @@ class Kernel extends HttpKernel 'can' => \Illuminate\Auth\Middleware\Authorize::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'jwt' => \App\Http\Middleware\RefreshToken::class, + 'jwt.auth' => \Tymon\JWTAuth\Middleware\GetUserFromToken::class, + 'jwt.refresh' => \Tymon\JWTAuth\Middleware\RefreshToken::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, ]; } diff --git a/app/Transformers/UserTransformer.php b/app/Transformers/UserTransformer.php new file mode 100644 index 0000000..f6b83c2 --- /dev/null +++ b/app/Transformers/UserTransformer.php @@ -0,0 +1,15 @@ + $user->id, + 'username' => $user->username + ]; + } +} \ No newline at end of file diff --git a/composer.json b/composer.json index d730c7a..8a74366 100644 --- a/composer.json +++ b/composer.json @@ -6,10 +6,12 @@ "type": "project", "require": { "php": ">=7.0.0", + "barryvdh/laravel-cors": "^0.11.0", "fideloper/proxy": "~3.3", "laravel/framework": "5.5.*", "laravel/tinker": "~1.0", - "tymon/jwt-auth": "1.0.0-rc.1" + "tymon/jwt-auth": "1.0.0-rc.1", + "dingo/api": "2.0.0-alpha1" }, "require-dev": { "filp/whoops": "~2.0", diff --git a/composer.lock b/composer.lock index 51fd964..10a40dd 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,258 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "2ccdbbf2bff90c3d38d19329c7f31c2f", + "content-hash": "b8aeb06db7880e10749e3fb496ff99eb", "packages": [ + { + "name": "asm89/stack-cors", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/asm89/stack-cors.git", + "reference": "c163e2b614550aedcf71165db2473d936abbced6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/asm89/stack-cors/zipball/c163e2b614550aedcf71165db2473d936abbced6", + "reference": "c163e2b614550aedcf71165db2473d936abbced6", + "shasum": "" + }, + "require": { + "php": ">=5.5.9", + "symfony/http-foundation": "~2.7|~3.0|~4.0", + "symfony/http-kernel": "~2.7|~3.0|~4.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.0 || ^4.8.10", + "squizlabs/php_codesniffer": "^2.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "Asm89\\Stack\\": "src/Asm89/Stack/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alexander", + "email": "iam.asm89@gmail.com" + } + ], + "description": "Cross-origin resource sharing library and stack middleware", + "homepage": "https://github.com/asm89/stack-cors", + "keywords": [ + "cors", + "stack" + ], + "time": "2017-12-20T14:37:45+00:00" + }, + { + "name": "barryvdh/laravel-cors", + "version": "v0.11.0", + "source": { + "type": "git", + "url": "https://github.com/barryvdh/laravel-cors.git", + "reference": "6ba64a654b4258a3ecc11aba6614c932b3442e30" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/barryvdh/laravel-cors/zipball/6ba64a654b4258a3ecc11aba6614c932b3442e30", + "reference": "6ba64a654b4258a3ecc11aba6614c932b3442e30", + "shasum": "" + }, + "require": { + "asm89/stack-cors": "^1.2", + "illuminate/support": "5.3.x|5.4.x|5.5.x|5.6.x", + "php": ">=5.5.9", + "symfony/http-foundation": "^3.1|^4", + "symfony/http-kernel": "^3.1|^4" + }, + "require-dev": { + "orchestra/testbench": "3.x", + "phpunit/phpunit": "^4.8|^5.2", + "squizlabs/php_codesniffer": "^2.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.11-dev" + }, + "laravel": { + "providers": [ + "Barryvdh\\Cors\\ServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Barryvdh\\Cors\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Barry vd. Heuvel", + "email": "barryvdh@gmail.com" + } + ], + "description": "Adds CORS (Cross-Origin Resource Sharing) headers support in your Laravel application", + "keywords": [ + "api", + "cors", + "crossdomain", + "laravel" + ], + "time": "2018-01-04T06:59:27+00:00" + }, + { + "name": "dingo/api", + "version": "v2.0.0-alpha1", + "source": { + "type": "git", + "url": "https://github.com/dingo/api.git", + "reference": "8beb74dd307770c909f0474e26a1004099ac78bd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dingo/api/zipball/8beb74dd307770c909f0474e26a1004099ac78bd", + "reference": "8beb74dd307770c909f0474e26a1004099ac78bd", + "shasum": "" + }, + "require": { + "dingo/blueprint": "^0.2", + "illuminate/routing": "^5.1", + "illuminate/support": "^5.1", + "league/fractal": "^0.17", + "php": "^7.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "~2", + "illuminate/auth": "^5.1", + "illuminate/cache": "^5.1", + "illuminate/console": "^5.1", + "illuminate/database": "^5.1", + "illuminate/events": "^5.1", + "illuminate/filesystem": "^5.1", + "illuminate/log": "^5.1", + "illuminate/pagination": "^5.1", + "laravel/lumen-framework": "^5.1", + "mockery/mockery": "~0.9", + "phpunit/phpunit": "^4.8 || ^5.0", + "squizlabs/php_codesniffer": "~2.0", + "tymon/jwt-auth": "1.0.*" + }, + "suggest": { + "tymon/jwt-auth": "Protect your API with JSON Web Tokens." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + }, + "laravel": { + "providers": [ + "Dingo\\Api\\Provider\\LaravelServiceProvider" + ], + "aliases": { + "API": "Dingo\\Api\\Facade\\API" + } + } + }, + "autoload": { + "psr-4": { + "Dingo\\Api\\": "src/" + }, + "files": [ + "src/helpers.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jason Lewis", + "email": "jason.lewis1991@gmail.com" + } + ], + "description": "A RESTful API package for the Laravel and Lumen frameworks.", + "keywords": [ + "api", + "dingo", + "laravel", + "restful" + ], + "time": "2017-09-20T15:57:14+00:00" + }, + { + "name": "dingo/blueprint", + "version": "v0.2.4", + "source": { + "type": "git", + "url": "https://github.com/dingo/blueprint.git", + "reference": "1dc93b8ea443fbbdaaca0582572ee6ca53afccfd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dingo/blueprint/zipball/1dc93b8ea443fbbdaaca0582572ee6ca53afccfd", + "reference": "1dc93b8ea443fbbdaaca0582572ee6ca53afccfd", + "shasum": "" + }, + "require": { + "doctrine/annotations": "~1.2", + "illuminate/filesystem": "^5.1", + "illuminate/support": "^5.1", + "php": ">=5.5.9", + "phpdocumentor/reflection-docblock": "^3.1" + }, + "require-dev": { + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.2-dev" + } + }, + "autoload": { + "psr-4": { + "Dingo\\Blueprint\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jason Lewis", + "email": "jason.lewis1991@gmail.com" + } + ], + "description": "API Blueprint documentation generator.", + "keywords": [ + "api", + "blueprint", + "dingo", + "docs", + "laravel" + ], + "time": "2017-12-05T12:02:08+00:00" + }, { "name": "dnoegel/php-xdg-base-dir", "version": "0.1", @@ -39,6 +289,74 @@ "description": "implementation of xdg base directory specification for php", "time": "2014-10-24T07:27:01+00:00" }, + { + "name": "doctrine/annotations", + "version": "v1.6.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5", + "reference": "c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5", + "shasum": "" + }, + "require": { + "doctrine/lexer": "1.*", + "php": "^7.1" + }, + "require-dev": { + "doctrine/cache": "1.*", + "phpunit/phpunit": "^6.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Docblock Annotations Parser", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "annotations", + "docblock", + "parser" + ], + "time": "2017-12-06T07:11:42+00:00" + }, { "name": "doctrine/inflector", "version": "v1.3.0", @@ -687,6 +1005,70 @@ ], "time": "2018-01-27T16:03:56+00:00" }, + { + "name": "league/fractal", + "version": "0.17.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/fractal.git", + "reference": "a0b350824f22fc2fdde2500ce9d6851a3f275b0e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/fractal/zipball/a0b350824f22fc2fdde2500ce9d6851a3f275b0e", + "reference": "a0b350824f22fc2fdde2500ce9d6851a3f275b0e", + "shasum": "" + }, + "require": { + "php": ">=5.4" + }, + "require-dev": { + "doctrine/orm": "^2.5", + "illuminate/contracts": "~5.0", + "mockery/mockery": "~0.9", + "pagerfanta/pagerfanta": "~1.0.0", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~1.5", + "zendframework/zend-paginator": "~2.3" + }, + "suggest": { + "illuminate/pagination": "The Illuminate Pagination component.", + "pagerfanta/pagerfanta": "Pagerfanta Paginator", + "zendframework/zend-paginator": "Zend Framework Paginator" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.13-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Fractal\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Phil Sturgeon", + "email": "me@philsturgeon.uk", + "homepage": "http://philsturgeon.uk/", + "role": "Developer" + } + ], + "description": "Handle the output of complex data structures ready for API output.", + "homepage": "http://fractal.thephpleague.com/", + "keywords": [ + "api", + "json", + "league", + "rest" + ], + "time": "2017-06-12T11:04:56+00:00" + }, { "name": "monolog/monolog", "version": "1.23.0", @@ -1024,6 +1406,152 @@ ], "time": "2017-09-27T21:40:39+00:00" }, + { + "name": "phpdocumentor/reflection-common", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "^4.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "time": "2017-09-11T18:02:19+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "3.3.2", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bf329f6c1aadea3299f08ee804682b7c45b326a2", + "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0", + "phpdocumentor/reflection-common": "^1.0.0", + "phpdocumentor/type-resolver": "^0.4.0", + "webmozart/assert": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^4.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "time": "2017-11-10T14:09:06+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "0.4.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0", + "phpdocumentor/reflection-common": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^5.2||^4.8.24" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "time": "2017-07-14T14:27:02+00:00" + }, { "name": "psr/container", "version": "1.0.0", @@ -2467,40 +2995,37 @@ "environment" ], "time": "2016-09-01T10:05:43+00:00" - } - ], - "packages-dev": [ + }, { - "name": "doctrine/annotations", - "version": "v1.6.0", + "name": "webmozart/assert", + "version": "1.3.0", "source": { "type": "git", - "url": "https://github.com/doctrine/annotations.git", - "reference": "c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5" + "url": "https://github.com/webmozart/assert.git", + "reference": "0df1908962e7a3071564e857d86874dad1ef204a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5", - "reference": "c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5", + "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a", + "reference": "0df1908962e7a3071564e857d86874dad1ef204a", "shasum": "" }, "require": { - "doctrine/lexer": "1.*", - "php": "^7.1" + "php": "^5.3.3 || ^7.0" }, "require-dev": { - "doctrine/cache": "1.*", - "phpunit/phpunit": "^6.4" + "phpunit/phpunit": "^4.6", + "sebastian/version": "^1.0.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.6.x-dev" + "dev-master": "1.3-dev" } }, "autoload": { "psr-4": { - "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + "Webmozart\\Assert\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -2509,35 +3034,20 @@ ], "authors": [ { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" } ], - "description": "Docblock Annotations Parser", - "homepage": "http://www.doctrine-project.org", + "description": "Assertions to validate method input/output with nice error messages.", "keywords": [ - "annotations", - "docblock", - "parser" + "assert", + "check", + "validate" ], - "time": "2017-12-06T07:11:42+00:00" - }, + "time": "2018-01-29T19:49:41+00:00" + } + ], + "packages-dev": [ { "name": "doctrine/cache", "version": "v1.7.1", @@ -3250,158 +3760,6 @@ "description": "Library for handling version information and constraints", "time": "2017-03-05T17:38:23+00:00" }, - { - "name": "phpdocumentor/reflection-common", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", - "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", - "shasum": "" - }, - "require": { - "php": ">=5.5" - }, - "require-dev": { - "phpunit/phpunit": "^4.6" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "time": "2017-09-11T18:02:19+00:00" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "4.3.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "94fd0001232e47129dd3504189fa1c7225010d08" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08", - "reference": "94fd0001232e47129dd3504189fa1c7225010d08", - "shasum": "" - }, - "require": { - "php": "^7.0", - "phpdocumentor/reflection-common": "^1.0.0", - "phpdocumentor/type-resolver": "^0.4.0", - "webmozart/assert": "^1.0" - }, - "require-dev": { - "doctrine/instantiator": "~1.0.5", - "mockery/mockery": "^1.0", - "phpunit/phpunit": "^6.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2017-11-30T07:14:17+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "0.4.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", - "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", - "shasum": "" - }, - "require": { - "php": "^5.5 || ^7.0", - "phpdocumentor/reflection-common": "^1.0" - }, - "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^5.2||^4.8.24" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "time": "2017-07-14T14:27:02+00:00" - }, { "name": "phpspec/prophecy", "version": "1.7.3", @@ -4550,62 +4908,13 @@ ], "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "time": "2017-04-07T12:08:54+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.3.0", - "source": { - "type": "git", - "url": "https://github.com/webmozart/assert.git", - "reference": "0df1908962e7a3071564e857d86874dad1ef204a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a", - "reference": "0df1908962e7a3071564e857d86874dad1ef204a", - "shasum": "" - }, - "require": { - "php": "^5.3.3 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.6", - "sebastian/version": "^1.0.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "time": "2018-01-29T19:49:41+00:00" } ], "aliases": [], "minimum-stability": "stable", "stability-flags": { - "tymon/jwt-auth": 5 + "tymon/jwt-auth": 5, + "dingo/api": 15 }, "prefer-stable": false, "prefer-lowest": false, diff --git a/config/api.php b/config/api.php new file mode 100644 index 0000000..e0b6b4d --- /dev/null +++ b/config/api.php @@ -0,0 +1,233 @@ + env('API_STANDARDS_TREE', 'x'), + + /* + |-------------------------------------------------------------------------- + | API Subtype + |-------------------------------------------------------------------------- + | + | Your subtype will follow the standards tree you use when used in the + | "Accept" header to negotiate the content type and version. + | + | For example: Accept: application/x.SUBTYPE.v1+json + | + */ + + 'subtype' => env('API_SUBTYPE', ''), + + /* + |-------------------------------------------------------------------------- + | Default API Version + |-------------------------------------------------------------------------- + | + | This is the default version when strict mode is disabled and your API + | is accessed via a web browser. It's also used as the default version + | when generating your APIs documentation. + | + */ + + 'version' => env('API_VERSION', 'v1'), + + /* + |-------------------------------------------------------------------------- + | Default API Prefix + |-------------------------------------------------------------------------- + | + | A default prefix to use for your API routes so you don't have to + | specify it for each group. + | + */ + + 'prefix' => env('API_PREFIX', 'api'), + + /* + |-------------------------------------------------------------------------- + | Default API Domain + |-------------------------------------------------------------------------- + | + | A default domain to use for your API routes so you don't have to + | specify it for each group. + | + */ + + 'domain' => env('API_DOMAIN', null), + + /* + |-------------------------------------------------------------------------- + | Name + |-------------------------------------------------------------------------- + | + | When documenting your API using the API Blueprint syntax you can + | configure a default name to avoid having to manually specify + | one when using the command. + | + */ + + 'name' => env('API_NAME', null), + + /* + |-------------------------------------------------------------------------- + | Conditional Requests + |-------------------------------------------------------------------------- + | + | Globally enable conditional requests so that an ETag header is added to + | any successful response. Subsequent requests will perform a check and + | will return a 304 Not Modified. This can also be enabled or disabled + | on certain groups or routes. + | + */ + + 'conditionalRequest' => env('API_CONDITIONAL_REQUEST', true), + + /* + |-------------------------------------------------------------------------- + | Strict Mode + |-------------------------------------------------------------------------- + | + | Enabling strict mode will require clients to send a valid Accept header + | with every request. This also voids the default API version, meaning + | your API will not be browsable via a web browser. + | + */ + + 'strict' => env('API_STRICT', false), + + /* + |-------------------------------------------------------------------------- + | Debug Mode + |-------------------------------------------------------------------------- + | + | Enabling debug mode will result in error responses caused by thrown + | exceptions to have a "debug" key that will be populated with + | more detailed information on the exception. + | + */ + + 'debug' => env('API_DEBUG', false), + + /* + |-------------------------------------------------------------------------- + | Generic Error Format + |-------------------------------------------------------------------------- + | + | When some HTTP exceptions are not caught and dealt with the API will + | generate a generic error response in the format provided. Any + | keys that aren't replaced with corresponding values will be + | removed from the final response. + | + */ + + 'errorFormat' => [ + 'message' => ':message', + 'errors' => ':errors', + 'code' => ':code', + 'status_code' => ':status_code', + 'debug' => ':debug', + ], + + /* + |-------------------------------------------------------------------------- + | API Middleware + |-------------------------------------------------------------------------- + | + | Middleware that will be applied globally to all API requests. + | + */ + + 'middleware' => [ + + ], + + /* + |-------------------------------------------------------------------------- + | Authentication Providers + |-------------------------------------------------------------------------- + | + | The authentication providers that should be used when attempting to + | authenticate an incoming API request. + | + */ + + 'auth' => [ + + ], + + /* + |-------------------------------------------------------------------------- + | Throttling / Rate Limiting + |-------------------------------------------------------------------------- + | + | Consumers of your API can be limited to the amount of requests they can + | make. You can create your own throttles or simply change the default + | throttles. + | + */ + + 'throttling' => [ + + ], + + /* + |-------------------------------------------------------------------------- + | Response Transformer + |-------------------------------------------------------------------------- + | + | Responses can be transformed so that they are easier to format. By + | default a Fractal transformer will be used to transform any + | responses prior to formatting. You can easily replace + | this with your own transformer. + | + */ + + 'transformer' => env('API_TRANSFORMER', Dingo\Api\Transformer\Adapter\Fractal::class), + + /* + |-------------------------------------------------------------------------- + | Response Formats + |-------------------------------------------------------------------------- + | + | Responses can be returned in multiple formats by registering different + | response formatters. You can also customize an existing response + | formatter with a number of options to configure its output. + | + */ + + 'defaultFormat' => env('API_DEFAULT_FORMAT', 'json'), + + 'formats' => [ + + 'json' => Dingo\Api\Http\Response\Format\Json::class, + + ], + + 'formatsOptions' => [ + + 'json' => [ + 'pretty_print' => env('API_JSON_FORMAT_PRETTY_PRINT_ENABLED', false), + 'indent_style' => env('API_JSON_FORMAT_INDENT_STYLE', 'space'), + 'indent_size' => env('API_JSON_FORMAT_INDENT_SIZE', 2), + ], + + ], + +]; diff --git a/config/app.php b/config/app.php index e9861c5..0c33ca0 100644 --- a/config/app.php +++ b/config/app.php @@ -53,6 +53,7 @@ return [ */ 'url' => env('APP_URL', 'http://localhost'), + 'api_url' => env('APP_API_URL', 'http://localhost/api'), /* |-------------------------------------------------------------------------- @@ -168,6 +169,7 @@ return [ * Package Service Providers... */ Tymon\JWTAuth\Providers\LaravelServiceProvider::class, + Dingo\Api\Provider\LaravelServiceProvider::class, /* * Application Service Providers... diff --git a/config/cors.php b/config/cors.php new file mode 100644 index 0000000..4cc4244 --- /dev/null +++ b/config/cors.php @@ -0,0 +1,23 @@ + false, + 'allowedOrigins' => ['*'], + 'allowedOriginsPatterns' => [], + 'allowedHeaders' => ['*'], + 'allowedMethods' => ['*'], + 'exposedHeaders' => [], + 'maxAge' => 0, */ + +]; diff --git a/routes/api.php b/routes/api.php index d0cc38d..8b61270 100644 --- a/routes/api.php +++ b/routes/api.php @@ -13,12 +13,18 @@ use Illuminate\Http\Request; | */ -Route::group([ - 'middleware' => 'api', - 'prefix' => 'auth' -], function ($router) { - Route::post('login', 'AuthController@login'); - Route::post('logout', 'AuthController@logout'); - Route::post('refresh', 'AuthController@refresh'); - Route::post('me', 'AuthController@me'); -}); \ No newline at end of file +$api = app('Dingo\Api\Routing\Router'); + +// JWT API + +$api->version('v1', function ($api) { + $api->group(['namespace' => 'App\Http\Controllers'], function ($api) { + $api->post('/auth/login', 'AuthController@login'); + $api->post('/auth/register', 'AuthController@register'); + $api->post('/auth/refresh', 'AuthController@refresh'); + + $api->group( [ 'middleware' => ['jwt.auth'] ], function ($api) { + $api->get('/auth/me', 'AuthController@me'); + }); + }); +}); diff --git a/routes/class/user.php b/routes/class/user.php index 825c06b..70602e6 100644 --- a/routes/class/user.php +++ b/routes/class/user.php @@ -9,18 +9,6 @@ | */ -// Auth -/*Route::group([ - 'middleware' => 'api' -], function ($router) { - Route::post('/api/rpc/user/auth/login', 'AuthController@login'); - Route::post('/api/rpc/user/auth/logout', 'AuthController@logout'); - Route::post('/api/rpc/user/auth/refresh', 'AuthController@refresh'); - Route::post('/api/rpc/user/auth/me', 'AuthController@me'); -});*/ - -//Route::post('/api/rpc/user/auth/register', 'UserController@register'); - // Owner Route::get('/api/rpc/user/owner/countownersofentry/{id}', 'UserController@countOwnersOfEntry'); Route::get('/api/rpc/user/owner/getownersofentry/{id}', 'UserController@getOwnersOfEntry'); diff --git a/routes/web.php b/routes/web.php index 9793cf2..6a9d017 100644 --- a/routes/web.php +++ b/routes/web.php @@ -11,8 +11,8 @@ | */ -header('Access-Control-Allow-Origin: *'); -header('Access-Control-Allow-Headers: "Origin, X-Requested-With, Content-Type, Accept"'); +//header('Access-Control-Allow-Origin: *'); +//header('Access-Control-Allow-Headers: "Origin, X-Requested-With, Content-Type, Accept"'); Auth::routes();