diff --git a/app/Http/Controllers/AccountApiController.php b/app/Http/Controllers/AccountApiController.php index 0de24981393a..f36252bc8d16 100644 --- a/app/Http/Controllers/AccountApiController.php +++ b/app/Http/Controllers/AccountApiController.php @@ -19,6 +19,8 @@ use App\Ninja\Transformers\UserAccountTransformer; use App\Http\Controllers\BaseAPIController; use Swagger\Annotations as SWG; +use App\Events\UserSignedUp; +use App\Http\Requests\RegisterRequest; use App\Http\Requests\UpdateAccountRequest; class AccountApiController extends BaseAPIController @@ -32,13 +34,19 @@ class AccountApiController extends BaseAPIController $this->accountRepo = $accountRepo; } + public function register(RegisterRequest $request) + { + $account = $this->accountRepo->create($request->first_name, $request->last_name, $request->email, $request->password); + $user = $account->users()->first(); + + Auth::login($user, true); + event(new UserSignedUp()); + + return $this->processLogin($request); + } + public function login(Request $request) { - if ( ! env(API_SECRET) || $request->api_secret !== env(API_SECRET)) { - sleep(ERROR_DELAY); - return $this->errorResponse(['message'=>'Invalid secret'],401); - } - if (Auth::attempt(['email' => $request->email, 'password' => $request->password])) { return $this->processLogin($request); } else { diff --git a/app/Http/Controllers/AccountController.php b/app/Http/Controllers/AccountController.php index b64d8b9884d7..a0fb51b74654 100644 --- a/app/Http/Controllers/AccountController.php +++ b/app/Http/Controllers/AccountController.php @@ -26,7 +26,7 @@ use App\Ninja\Repositories\AccountRepository; use App\Ninja\Repositories\ReferralRepository; use App\Ninja\Mailers\UserMailer; use App\Ninja\Mailers\ContactMailer; -use App\Events\UserLoggedIn; +use App\Events\UserSignedUp; use App\Events\UserSettingsChanged; use App\Services\AuthService; @@ -100,7 +100,7 @@ class AccountController extends BaseController } Auth::login($user, true); - event(new UserLoggedIn()); + event(new UserSignedUp()); $redirectTo = Input::get('redirect_to') ?: 'invoices/create'; diff --git a/app/Http/Middleware/ApiCheck.php b/app/Http/Middleware/ApiCheck.php index 5632e7de4e90..63e370cf4192 100644 --- a/app/Http/Middleware/ApiCheck.php +++ b/app/Http/Middleware/ApiCheck.php @@ -21,11 +21,15 @@ class ApiCheck { */ public function handle($request, Closure $next) { - $loggingIn = $request->is('api/v1/login'); + $loggingIn = $request->is('api/v1/login') || $request->is('api/v1/register'); $headers = Utils::getApiHeaders(); if ($loggingIn) { - // do nothing + // check API secret + if ( ! $request->api_secret || ! env(API_SECRET) || ! hash_equals($request->api_secret, env(API_SECRET))) { + sleep(ERROR_DELAY); + return Response::json('Invalid secret', 403, $headers); + } } else { // check for a valid token $token = AccountToken::where('token', '=', Request::header('X-Ninja-Token'))->first(['id', 'user_id']); @@ -34,7 +38,7 @@ class ApiCheck { Auth::loginUsingId($token->user_id); Session::set('token_id', $token->id); } else { - sleep(3); + sleep(ERROR_DELAY); return Response::json('Invalid token', 403, $headers); } } diff --git a/app/Http/Requests/RegisterRequest.php b/app/Http/Requests/RegisterRequest.php new file mode 100644 index 000000000000..8709d42cc0a0 --- /dev/null +++ b/app/Http/Requests/RegisterRequest.php @@ -0,0 +1,35 @@ + 'required|unique:users', + 'first_name' => 'required', + 'last_name' => 'required', + 'password' => 'required', + ]; + + return $rules; + } +} diff --git a/app/Http/routes.php b/app/Http/routes.php index fec554177993..cc3f08187cb3 100644 --- a/app/Http/routes.php +++ b/app/Http/routes.php @@ -48,6 +48,7 @@ Route::group(['middleware' => 'auth:client'], function() { Route::get('client/payments', 'PublicClientController@paymentIndex'); Route::get('client/dashboard', 'PublicClientController@dashboard'); }); + Route::get('api/client.quotes', array('as'=>'api.client.quotes', 'uses'=>'PublicClientController@quoteDatatable')); Route::get('api/client.invoices', array('as'=>'api.client.invoices', 'uses'=>'PublicClientController@invoiceDatatable')); Route::get('api/client.payments', array('as'=>'api.client.payments', 'uses'=>'PublicClientController@paymentDatatable')); @@ -226,6 +227,7 @@ Route::group(['middleware' => 'api', 'prefix' => 'api/v1'], function() { Route::get('ping', 'ClientApiController@ping'); Route::post('login', 'AccountApiController@login'); + Route::get('register', 'AccountApiController@register'); Route::get('static', 'AccountApiController@getStaticData'); Route::get('accounts', 'AccountApiController@show'); Route::put('accounts', 'AccountApiController@update');