Skip to content

Commit

Permalink
Adding GDPR UI Functionality
Browse files Browse the repository at this point in the history
  • Loading branch information
Mark Stunnenberg committed May 29, 2018
1 parent 37844f9 commit 3ea302a
Show file tree
Hide file tree
Showing 7 changed files with 100 additions and 25 deletions.
55 changes: 41 additions & 14 deletions app/Http/Controllers/GdprController.php
Expand Up @@ -7,6 +7,7 @@
use AbuseIO\Traits\Api;
use Illuminate\Http\Request;
use League\Fractal\Manager;
use Redirect;

class GdprController extends Controller
{
Expand All @@ -23,9 +24,24 @@ public function __construct(Manager $fractal, Request $request)
$this->apiInit($fractal, $request);
}

public function anonimize(Contact $contact)
/**
* Method to call the anonymization function from within the UI.
*
* @param Contact $contact
*
* @return \Illuminate\Http\RedirectResponse
*/
public function anonymize(Contact $contact)
{
//
try {
$this->anonymizeData($contact->email);
$message = 'Contact successfully anonymized.';
} catch(\Exception $e) {
$message = 'There was a problem anonymizing the contact. (Error: '.$e->getMessage().')';
}

return Redirect::route('admin.contacts.index')
->with('message', $message);
}

/**
Expand All @@ -37,19 +53,8 @@ public function anonimize(Contact $contact)
*/
public function apiAnonymize($email)
{
$randomness = sprintf('%d', time());

try {
$contacts = Contact::withTrashed()->where('email', '=', $email)->get();
$tickets = Ticket::withTrashed()->where('ip_contact_email', '=', $email)->get();
$tickets = $tickets->merge(Ticket::withTrashed()->where('domain_contact_email', '=', $email)->get());

foreach ($contacts as $contact) {
$contact->anonymize($randomness);
}
foreach ($tickets as $ticket) {
$ticket->anonymize($email, $randomness);
}
$this->anonymizeData($email);
} catch (\Exception $e) {
return $this->errorInternalError($e->getMessage());
}
Expand All @@ -59,4 +64,26 @@ public function apiAnonymize($email)
'message' => $this->getMessage('success', 200),
]);
}


/**
* Anonymize the contact data and all related tickets.
*
* @param $email
*/
protected function anonymizeData($email) {

$randomness = sprintf('%d', time());

$contacts = Contact::withTrashed()->where('email', '=', $email)->get();
$tickets = Ticket::withTrashed()->where('ip_contact_email', '=', $email)->get();
$tickets = $tickets->merge(Ticket::withTrashed()->where('domain_contact_email', '=', $email)->get());

foreach ($contacts as $contact) {
$contact->anonymize($randomness);
}
foreach ($tickets as $ticket) {
$ticket->anonymize($email, $randomness);
}
}
}
6 changes: 3 additions & 3 deletions app/Http/Routes/Gdpr.php
Expand Up @@ -10,11 +10,11 @@
function () {
// Access to edit object
route::post(
'{contact}',
'{contacts}',
[
'middleware' => 'permission:contacts_edit',
'as' => 'anonimize',
'uses' => 'GdprController@anonimize',
'as' => 'anonymize',
'uses' => 'GdprController@anonymize',
]
);
}
Expand Down
2 changes: 1 addition & 1 deletion resources/lang/en/misc.php
Expand Up @@ -45,7 +45,7 @@
'button.read' => 'Read',
'button.unread' => 'Unread',
'button.activate' => 'Activate',
'button.anonimize' => 'Anonimize',
'button.anonymize' => 'Anonymize',

// Miscellaneous
'all' => 'All',
Expand Down
2 changes: 1 addition & 1 deletion resources/lang/gr/misc.php
Expand Up @@ -45,7 +45,7 @@
'button.read' => 'Αναγνωσμένο',
'button.unread' => 'Μη αναγνωσμένο',
'button.activate' => 'Ενεργοποίηση',
'button.anonimize' => 'Anonimize',
'button.anonymize' => 'Anonymize',

// Miscellaneous
'all' => 'Όλα',
Expand Down
2 changes: 1 addition & 1 deletion resources/lang/nl/misc.php
Expand Up @@ -45,7 +45,7 @@
'button.read' => 'Gelezen',
'button.unread' => 'Ongelezen',
'button.activate' => 'Activeer',
'button.anonimize' => 'Anonimiseer',
'button.anonymize' => 'Anonimiseer',

// Miscellaneous
'all' => 'Alle',
Expand Down
1 change: 0 additions & 1 deletion resources/views/app.blade.php
Expand Up @@ -89,7 +89,6 @@
<script type="text/javascript" src="{{ asset('/js/bootstrap.min.js') }}"></script>
<script type="text/javascript" src="{{ asset('/js/jquery.dataTables.min.js') }}"></script>
<script type="text/javascript" src="{{ asset('/js/dataTables.bootstrap.min.js') }}"></script>
<script src="https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js"></script>
@yield('extrajs')
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
Expand Down
57 changes: 53 additions & 4 deletions resources/views/contacts/show.blade.php
Expand Up @@ -3,11 +3,11 @@
@section('content')
<h1 class="page-header">{{ $contact->name }}</h1>
<div class="row">
<div class="col-md-3 col-md-offset-9 text-right">
{!! Form::open(['class' => 'form-inline', 'method' => 'DELETE', 'route' => ['admin.contacts.destroy', $contact->id]]) !!}
<div class="col-sm-offset-9 col-sm-3 text-right">
{!! Form::open(['name' => 'delContact', 'class' => 'form-inline', 'method' => 'DELETE', 'route' => ['admin.contacts.destroy', $contact->id]]) !!}
{!! link_to_route('admin.contacts.edit', trans('misc.button.edit'), $contact->id, ['class' => 'btn btn-info']) !!}
{!! link_to_route('admin.gdpr.anonimize', trans('misc.button.anonimize'), $contact->id, ['class' => 'btn btn-warning']) !!}
{!! Form::submit(trans('misc.button.delete'), ['class' => 'btn btn-danger']) !!}
{!! Form::button(trans('misc.button.anonymize'), ['name' => 'anonBtn', 'class' => 'btn btn-warning']) !!}
{!! Form::button(trans('misc.button.delete'), ['name' => 'delBtn', 'class' => 'btn btn-danger']) !!}
{!! Form::close() !!}
</div>
</div>
Expand Down Expand Up @@ -84,4 +84,53 @@
</table>
</div>
@endif

{!! Form::open(['name' => 'anonContact', 'class' => 'form-inline', 'method' => 'POST', 'route' => ['admin.gdpr.anonymize', $contact->id]]) !!}
{!! Form::hidden('anonymize', 1);!!}
{!! Form::close() !!}

<!-- Confirm Modal -->
<div class="modal fade" id="confirm" tabindex="-1" role="dialog" aria-labelledby="confirmLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
<h4 class="modal-title" id="confirmLabel">Please confirm</h4>
</div>
<div class="modal-body">
Are you sure you want to continue with this action?
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">No</button>
<button type="button" class="btn btn-danger" id="confirmed">Yes</button>
</div>
</div>
</div>
</div>
@endsection

@section('extrajs')
<script type="application/javascript">
$('button[name="delBtn"]').on('click', function(e) {
var $form = $(this).closest('form');
e.preventDefault();
$('#confirm').modal({
backdrop: 'static',
keyboard: false
}).one('click', '#confirmed', function(e) {
$form.trigger('submit');
});
});
$('button[name="anonBtn"]').on('click', function(e) {
var $form = $('form[name="anonContact"]');
e.preventDefault();
$('#confirm').modal({
backdrop: 'static',
keyboard: false
}).one('click', '#confirmed', function(e) {
$form.trigger('submit');
});
});
</script>
@endsection

0 comments on commit 3ea302a

Please sign in to comment.