Skip to content

Commit

Permalink
Merge pull request #827 from biigle/patch-1
Browse files Browse the repository at this point in the history
Implement more advanced spam protection in the sign up form
  • Loading branch information
mzur authored May 15, 2024
2 parents 833d15d + 13cbf4f commit a80062e
Show file tree
Hide file tree
Showing 3 changed files with 106 additions and 65 deletions.
21 changes: 21 additions & 0 deletions resources/assets/js/core/registerForm.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<script>
export default {
data() {
return {
form: false,
token: '',
};
},
methods: {
showForm() {
this.form = true;
},
},
created() {
this.token = document.querySelector('meta[name="csrf-token"]').content;
},
mounted() {
this.$refs.ht.appendChild(this.$refs.hs.firstChild);
},
};
</script>
2 changes: 2 additions & 0 deletions resources/assets/js/mounts.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import AnnouncementsEditForm from './core/announcements/editForm';
import MessagesDisplay from './core/messages/display';
import NotificationsList from './core/notifications/list';
import NotificationsUnreadCount from './core/notifications/unreadCount';
import RegisterForm from './core/registerForm';
import TopMenu from './core/topMenu';
import {mount} from './utils';

Expand All @@ -16,4 +17,5 @@ mount('help-menu', TopMenu);
mount('messages-display', MessagesDisplay);
mount('notifications-list', NotificationsList);
mount('notifications-unread-count', NotificationsUnreadCount);
mount('register-form', RegisterForm);
mount('top-menu', TopMenu);
148 changes: 83 additions & 65 deletions resources/views/auth/register.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,103 +4,121 @@
@section('show-navbar', false)

@section('content')
<div class="container">
<div class="container" id="register-form">
<div class="row center-form">
<div class="col-md-4 col-sm-6">
<h1 class="logo logo--standalone"><a href="{{ route('home') }}" class="logo__biigle">BIIGLE</a></h1>
<h1 class="logo logo--standalone">
<a href="{{ route('home') }}" class="logo__biigle">BIIGLE</a>
</h1>
<form class="well clearfix" role="form" method="POST" action="{{ url('register') }}">

<p class="lead text-center">
{{ trans('biigle.new_acc') }}
</p>

@if (config('biigle.sso_registration_only'))
<div class="panel panel-warning">
<div class="panel-body text-warning">
{{config('biigle.sso_registration_only_message')}}
</div>
</div>
@mixin('registerButton')
@else
{!! Honeypot::generate('website', 'homepage') !!}
@unless (empty(app('modules')->getViewMixins('registerButton')))
<p class="text-center">
Use your institutional email address via single sign-on (recommended).
</p>
@mixin('registerButton')
<hr>
<p class="text-center">
Or use your <a href="#" title="Sign up with your personal email address" v-on:click.prevent="showForm">personal email address</a>.
</p>
@endunless

<div ref="ht"></div>

<p class="lead text-center">{{ trans('biigle.new_acc') }}</p>
<div class="form-group{{ $errors->has('email') ? ' has-error' : '' }}">
<div class="input-group">
<div class="input-group-addon">
<i class="fa fa-envelope"></i>
<div @unless ($errors->any() || empty(app('modules')->getViewMixins('registerButton'))) v-if="form" v-cloak @endunless>

<div class="form-group{{ $errors->has('email') ? ' has-error' : '' }}">
<div class="input-group">
<div class="input-group-addon">
<i class="fa fa-envelope"></i>
</div>
<input type="email" placeholder="{{ trans('form.email') }}" class="form-control" name="email" value="{{ old('email') }}" autofocus required>
</div>
<input type="email" placeholder="{{ trans('form.email') }}" class="form-control" name="email" value="{{ old('email') }}" autofocus required>
@if($errors->has('email'))
<span class="help-block">{{ $errors->first('email') }}</span>
@endif
</div>
@if($errors->has('email'))
<span class="help-block">{{ $errors->first('email') }}</span>
@endif
</div>

<div class="form-group{{ $errors->has('firstname') ? ' has-error' : '' }}">
<div class="input-group">
<div class="input-group-addon">
<i class="fa fa-user"></i>
<div class="form-group{{ $errors->has('firstname') ? ' has-error' : '' }}">
<div class="input-group">
<div class="input-group-addon">
<i class="fa fa-user"></i>
</div>
<input type="text" placeholder="{{ trans('form.firstname') }}" class="form-control" name="firstname" value="{{ old('firstname') }}" required>
</div>
<input type="text" placeholder="{{ trans('form.firstname') }}" class="form-control" name="firstname" value="{{ old('firstname') }}" required>
@if($errors->has('firstname'))
<span class="help-block">{{ $errors->first('firstname') }}</span>
@endif
</div>
@if($errors->has('firstname'))
<span class="help-block">{{ $errors->first('firstname') }}</span>
@endif
</div>

<div class="form-group{{ $errors->has('lastname') ? ' has-error' : '' }}">
<div class="input-group">
<div class="input-group-addon">
<i class="fa fa-user"></i>
<div class="form-group{{ $errors->has('lastname') ? ' has-error' : '' }}">
<div class="input-group">
<div class="input-group-addon">
<i class="fa fa-user"></i>
</div>
<input type="text" placeholder="{{ trans('form.lastname') }}" class="form-control" name="lastname" value="{{ old('lastname') }}" required>
</div>
<input type="text" placeholder="{{ trans('form.lastname') }}" class="form-control" name="lastname" value="{{ old('lastname') }}" required>
@if($errors->has('lastname'))
<span class="help-block">{{ $errors->first('lastname') }}</span>
@endif
</div>
@if($errors->has('lastname'))
<span class="help-block">{{ $errors->first('lastname') }}</span>
@endif
</div>

<div class="form-group{{ $errors->has('affiliation') ? ' has-error' : '' }}">
<div class="input-group">
<div class="input-group-addon">
<i class="fa fa-building"></i>
<div class="form-group{{ $errors->has('affiliation') ? ' has-error' : '' }}">
<div class="input-group">
<div class="input-group-addon">
<i class="fa fa-building"></i>
</div>
<input type="text" placeholder="Affiliation (institute name, company, etc.)" class="form-control" name="affiliation" value="{{ old('affiliation') }}">
</div>
<input type="text" placeholder="Affiliation (institute name, company, etc.)" class="form-control" name="affiliation" value="{{ old('affiliation') }}">
@if($errors->has('affiliation'))
<span class="help-block">{{ $errors->first('affiliation') }}</span>
@endif
</div>
@if($errors->has('affiliation'))
<span class="help-block">{{ $errors->first('affiliation') }}</span>
@endif
</div>

<div class="form-group{{ $errors->has('password') ? ' has-error' : '' }}">
<div class="input-group">
<div class="input-group-addon">
<i class="fa fa-lock"></i>
<div class="form-group{{ $errors->has('password') ? ' has-error' : '' }}">
<div class="input-group">
<div class="input-group-addon">
<i class="fa fa-lock"></i>
</div>
<input type="password" minlength="8" placeholder="{{ trans('form.password') }}" class="form-control" name="password" required>
</div>
<input type="password" minlength="8" placeholder="{{ trans('form.password') }}" class="form-control" name="password" required>
@if($errors->has('password'))
<span class="help-block">{{ $errors->first('password') }}</span>
@endif
</div>
@if($errors->has('password'))
<span class="help-block">{{ $errors->first('password') }}</span>
@endif
</div>

@mixin('registrationForm')

@include('auth.partials.privacy-checkbox')
@include('auth.partials.terms-checkbox')
@mixin('registrationForm')

@if ($errors->has('homepage'))
<p class="text-danger">{{ $errors->first('homepage') }}</p>
@endif
@if ($errors->has('website'))
<p class="text-danger">{{ $errors->first('website') }}</p>
@endif
@include('auth.partials.privacy-checkbox')
@include('auth.partials.terms-checkbox')

<input type="hidden" name="_token" value="{{ csrf_token() }}">
<input type="submit" class="btn btn-success btn-block" value="Sign up" onclick="this.disabled=true;this.form.submit();">
@endif
@if ($errors->has('homepage'))
<p class="text-danger">{{ $errors->first('homepage') }}</p>
@endif
@if ($errors->has('website'))
<p class="text-danger">{{ $errors->first('website') }}</p>
@endif

@if (!empty(app('modules')->getViewMixins('registerButton')))
<hr>
@mixin('registerButton')
<input type="hidden" name="_token" :value="token">
<input type="submit" class="btn btn-success btn-block" value="Sign up" onclick="this.disabled=true;this.form.submit();">
</div>
@endif
</form>
<div ref="hs">
{!! Honeypot::generate('website', 'homepage') !!}
</div>
<p class="clearfix">
<a href="{{ route('home') }}" class="">{{ trans('biigle.back') }}</a>
<a href="{{ url('login') }}" class="pull-right" title="Log in">Log in</a>
Expand Down

0 comments on commit a80062e

Please sign in to comment.