Add GDPR compliance (#1296)

This commit is contained in:
Régis Freyd
2018-05-20 16:00:03 -04:00
committed by GitHub
parent e70428895d
commit 9018b558b8
46 changed files with 1289 additions and 63 deletions
@@ -0,0 +1,91 @@
<?php
namespace App\Http\Controllers\Api\Account;
use App\User;
use Illuminate\Http\Request;
use App\Models\Settings\Term;
use Illuminate\Database\QueryException;
use Illuminate\Support\Facades\Validator;
use App\Http\Controllers\Api\ApiController;
use App\Http\Resources\Account\User\User as UserResource;
class ApiUserController extends ApiController
{
/**
* Get the detail of the authenticated user.
*
* @param Request $request
* @return \Illuminate\Http\Response
*/
public function show(Request $request)
{
return new UserResource(auth()->user());
}
/**
* Get the state of a specific term for the user.
*
* @param Request $request
* @param int $termId
* @return void
*/
public function get(Request $request, $termId)
{
$userCompliance = auth()->user()->getStatusForCompliance($termId);
if ($userCompliance == false) {
return $this->respondNotFound();
}
return $this->respond([
'data' => $userCompliance,
]);
}
/**
* Get all the policies ever signed by the authenticated user.
*
* @param Request $request
* @return void
*/
public function compliance(Request $request)
{
$terms = auth()->user()->getAllCompliances();
return $this->respond([
'data' => $terms,
]);
}
/**
* Sign the latest policy for the authenticated user.
*
* @param Request $request
* @return void
*/
public function set(Request $request)
{
$validator = Validator::make($request->all(), [
'ip_address' => 'required',
]);
if ($validator->fails()) {
return $this->setErrorCode(32)
->respondWithError($validator->errors()->all());
}
// Create the contact
try {
$term = auth()->user()->acceptPolicy($request->get('ip_address'));
} catch (QueryException $e) {
return $this->respondNotTheRightParameters();
}
$userCompliance = auth()->user()->getStatusForCompliance($term->id);
return $this->respond([
'data' => $userCompliance,
]);
}
}
@@ -0,0 +1,41 @@
<?php
namespace App\Http\Controllers\Api\Settings;
use Illuminate\Http\Request;
use App\Models\Settings\Term;
use App\Http\Controllers\Api\ApiController;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use App\Http\Resources\Settings\Compliance\Compliance as ComplianceResource;
class ApiComplianceController extends ApiController
{
/**
* Get the list of terms and privacy policies.
*
* @return \Illuminate\Http\Response
*/
public function index(Request $request)
{
$terms = Term::orderBy('term_version', 'desc')->paginate($this->getLimitPerPage());
return ComplianceResource::collection($terms);
}
/**
* Get the detail of a given term.
* @param Request $request
* @return \Illuminate\Http\Response
*/
public function show(Request $request, $termId)
{
try {
$term = Term::where('id', $termId)
->firstOrFail();
} catch (ModelNotFoundException $e) {
return $this->respondNotFound();
}
return new ComplianceResource($term);
}
}
@@ -0,0 +1,41 @@
<?php
namespace App\Http\Controllers\Api\Settings;
use Illuminate\Http\Request;
use App\Models\Settings\Currency;
use App\Http\Controllers\Api\ApiController;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use App\Http\Resources\Settings\Currency\Currency as CurrencyResource;
class ApiCurrencyController extends ApiController
{
/**
* Get the list of currencies.
*
* @return \Illuminate\Http\Response
*/
public function index(Request $request)
{
$currencies = Currency::paginate($this->getLimitPerPage());
return CurrencyResource::collection($currencies);
}
/**
* Get the detail of a given currency.
*
* @param Request $request
* @return \Illuminate\Http\Response
*/
public function show(Request $request, $currencyId)
{
try {
$currency = Currency::find($currencyId);
} catch (ModelNotFoundException $e) {
return $this->respondNotFound();
}
return new CurrencyResource($currency);
}
}
@@ -4,6 +4,7 @@ namespace App\Http\Controllers\Auth;
use App\User;
use App\Account;
use Illuminate\Http\Request;
use App\Jobs\SendNewUserAlert;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
@@ -70,19 +71,26 @@ class RegisterController extends Controller
'first_name' => 'required|max:255',
'email' => 'required|email|max:255|unique:users',
'password' => 'required|min:6|confirmed',
'policy' => 'required',
]);
}
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @param array
* @return User
*/
protected function create(array $data)
{
$first = ! Account::hasAny();
$account = Account::createDefault($data['first_name'], $data['last_name'], $data['email'], $data['password']);
$account = Account::createDefault(
$data['first_name'],
$data['last_name'],
$data['email'],
$data['password'],
\Request::ip()
);
$user = $account->users()->first();
if (! $first) {
@@ -0,0 +1,30 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class ComplianceController extends Controller
{
/**
* Display a listing of the resource.
*
* @param Request $request
* @return \Illuminate\Http\Response
*/
public function index(Request $request)
{
return view('compliance.index');
}
/**
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
auth()->user()->acceptPolicy(\Request::ip());
return redirect('/dashboard');
}
}