Commit ac99668e authored by Cool Fire's avatar Cool Fire

Merge branch 'development' into 'master'

Merge to master branch for preview-003

See merge request !2
parents d5cd0bb2 83fa8728
Pipeline #350 failed with stages
in 14 minutes and 8 seconds
---
error_message_username: Username appears to be invald.
error_message_email: Email address appears to be invalid.
error_message_phone: Phone number appears to be invald.
error_message_reason: It appears you have not specified a reason. This is technically allowed but makes it extremely unlikely your application will be accepted.
...@@ -2,5 +2,5 @@ ...@@ -2,5 +2,5 @@
for c in {1..4} for c in {1..4}
do do
ssh signup@insomnia247.nl "cd /home/signup/public_html && git pull && git log -n1 --pretty=%h > .current" && break || sleep 3 && echo "retry" ssh signup@insomnia247.nl "cd /home/signup/public_html && git pull && git log -n1 --pretty=%h > .current && touch tmp/restart.txt" && break || sleep 3 && echo "retry"
done done
...@@ -12,16 +12,23 @@ class SignupSite < Sinatra::Base ...@@ -12,16 +12,23 @@ class SignupSite < Sinatra::Base
end end
post '/check-code' do post '/check-code' do
if params[:input_invite] !~ /^\w{8}-\w{4}-\w{4}-\w{4}-\w{12}$/ session[:invite] = Rack::Utils.escape_html(params[:input_invite])
if check_code session[:invite]
cc = YAML.load_file('content/check-code.yaml') cc = YAML.load_file('content/check-code.yaml')
session[:error_message] = cc['error_message'] session[:error_message] = cc['error_message']
session[:error_location] = '/enter-code' session[:error_location] = '/enter-code'
session[:error_progress] = 25 session[:error_progress] = 25
session[:error_data] = Rack::Utils.escape_html(params[:input_invite])
redirect '/error', 302 redirect '/error', 302
else else
session[:invite] = Rack::Utils.escape_html(params[:input_invite])
redirect '/enter-details', 302 redirect '/enter-details', 302
end end
end end
def check_code(code)
return true if code.nil?
return false if code.match?(/^\w{8}-\w{4}-\w{4}-\w{4}-\w{12}$/)
# TODO: Check code against database
true
end
end end
...@@ -13,6 +13,46 @@ class SignupSite < Sinatra::Base ...@@ -13,6 +13,46 @@ class SignupSite < Sinatra::Base
end end
post '/check-details' do post '/check-details' do
'Not yet implemented.' cd = YAML.load_file('content/check-details.yaml')
session[:error_location] = '/enter-details'
session[:error_proceed] = '/not-yet-implemented'
session[:error_progress] = 50
session[:username] = Rack::Utils.escape_html(params[:input_username])
session[:email] = Rack::Utils.escape_html(params[:input_email])
session[:phone] = Rack::Utils.escape_html(params[:input_phone])
session[:reason] = Rack::Utils.escape_html(params[:input_reason])
if session[:username] !~ /^\w+$/
session[:error_message] = cd['error_message_username']
redirect '/error', 302
elsif session[:email] !~ /^\w+@\w+\.\w+$/
session[:error_message] = cd['error_message_email']
redirect '/error', 302
elsif check_phone session[:phone]
session[:error_message] = cd['error_message_phone']
redirect '/error', 302
elsif session[:reason].empty?
session[:error_message] = cd['error_message_reason']
redirect '/warning', 302
else
redirect '/not-yet-implemented', 302
end
end
def check_phone(number)
# Not providing a phone number is allowed
return false if number.empty?
# Normalize phone number formatting
number.delete!('-')
number.gsub!(/^(00|\+)/, '')
# Check for stray characters
return false if number.match?(/^\d+$/)
# Check with messagebird HLR if the phone number is valid
# TODO: Actually implement HLR lookup.
true
end end
end end
...@@ -10,4 +10,13 @@ class SignupSite < Sinatra::Base ...@@ -10,4 +10,13 @@ class SignupSite < Sinatra::Base
session[:error_reload_form] = true session[:error_reload_form] = true
erb :index erb :index
end end
get '/warning' do
@header = 'Look out!'
@body = session[:error_message]
@form = erb :warning
@progress = session[:error_progress]
session[:error_reload_form] = true
erb :index
end
end end
...@@ -5,7 +5,7 @@ require 'yaml' ...@@ -5,7 +5,7 @@ require 'yaml'
# Main class for signup site # Main class for signup site
class SignupSite < Sinatra::Base class SignupSite < Sinatra::Base
use Rack::Session::Pool, :expire_after => 60 * 60 * 4 use Rack::Session::Pool, expire_after: 60 * 60 * 4
set :title, 'Shell signup - Insomnia 24/7' set :title, 'Shell signup - Insomnia 24/7'
set :gitid, IO.read('.current') set :gitid, IO.read('.current')
......
...@@ -40,14 +40,14 @@ describe 'Enter code page' do ...@@ -40,14 +40,14 @@ describe 'Enter code page' do
get '/enter-code' get '/enter-code'
last_response.body.must_include 'Invite code' last_response.body.must_include 'Invite code'
end end
end
describe 'Enter code page' do
it 'should return invite code form' do it 'should return invite code form' do
get '/enter-code' get '/enter-code'
last_response.body.must_include 'Invite code' last_response.body.must_include 'Invite code'
end end
end
describe 'Check code page' do
it 'should reject empty invite codes' do it 'should reject empty invite codes' do
post '/check-code' post '/check-code'
follow_redirect! follow_redirect!
...@@ -55,18 +55,21 @@ describe 'Enter code page' do ...@@ -55,18 +55,21 @@ describe 'Enter code page' do
end end
it 'should reject improperly formatted invite codes' do it 'should reject improperly formatted invite codes' do
post '/check-code', input_invite: 'not an invite code' post '/check-code',
input_invite: 'not an invite code'
follow_redirect! follow_redirect!
last_request.url.must_include 'error' last_request.url.must_include 'error'
end end
it 'should accept properly formatted invite codes' do it 'should accept properly formatted invite codes' do
post '/check-code', input_invite: 'c65d8c31-482b-4329-b288-8b0959a43ea2' post '/check-code',
input_invite: 'c65d8c31-482b-4329-b288-8b0959a43ea2'
assert_equal last_response.status, 302 assert_equal last_response.status, 302
end end
it 'should redirect to details form for properly formatted invite codes' do it 'should redirect to details form for properly formatted invite codes' do
post '/check-code', input_invite: 'c65d8c31-482b-4329-b288-8b0959a43ea2' post '/check-code',
input_invite: 'c65d8c31-482b-4329-b288-8b0959a43ea2'
follow_redirect! follow_redirect!
last_request.url.must_include 'enter-details' last_request.url.must_include 'enter-details'
end end
...@@ -83,3 +86,63 @@ describe 'Enter details page' do ...@@ -83,3 +86,63 @@ describe 'Enter details page' do
last_response.body.must_include 'User name' last_response.body.must_include 'User name'
end end
end end
describe 'Check username' do
it 'should reject empty usernames' do
post '/check-details',
input_email: 'username@example.com'
follow_redirect!
last_request.url.must_include 'error'
end
it 'should reject usernames with invalid characters' do
post '/check-details',
input_username: 'user%name',
input_email: 'username@example.com'
follow_redirect!
last_request.url.must_include 'error'
end
it 'should accept valid usernames, email and reason' do
post '/check-details',
input_username: 'username',
input_email: 'username@example.com',
input_reason: 'My reasons are my own.'
follow_redirect!
last_request.url.must_include 'not-yet-implemented'
end
end
describe 'Check reason' do
it 'should warn for empty reasons' do
post '/check-details',
input_username: 'username',
input_email: 'username@example.com'
follow_redirect!
last_request.url.must_include 'warning'
end
end
describe 'Check phonenumber' do
it 'should reject invalid phone numbers' do
post '/check-details',
input_username: 'username',
input_email: 'username@example.com',
input_reason: 'My reasons are my own.',
input_phone: '+31g28282828'
follow_redirect!
last_request.url.must_include 'error'
end
it 'should accept valid phone numbers' do
post '/check-details',
input_username: 'username',
input_email: 'username@example.com',
input_reason: 'My reasons are my own.',
input_phone: '+31628282828'
follow_redirect!
last_request.url.must_include 'not-yet-implemented'
end
# TODO: checks for error and warning pages
end
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<label for="input_invite" class="col-lg-2 control-label">Invite code</label> <label for="input_invite" class="col-lg-2 control-label">Invite code</label>
<div class="col-lg-10"> <div class="col-lg-10">
<% if session[:error_reload_form] %> <% if session[:error_reload_form] %>
<input type="text" class="form-control" id="input_invite" name="input_invite" value="<%= session[:error_data] %>"> <input type="text" class="form-control" id="input_invite" name="input_invite" value="<%= session[:invite] %>">
<% session[:error_reload_form] = false %> <% session[:error_reload_form] = false %>
<% else %> <% else %>
<input type="text" class="form-control" id="input_invite" name="input_invite" placeholder="1234abcd-1234-5678-9abc-432abc987def"> <input type="text" class="form-control" id="input_invite" name="input_invite" placeholder="1234abcd-1234-5678-9abc-432abc987def">
......
...@@ -3,7 +3,11 @@ ...@@ -3,7 +3,11 @@
<div class="form-group"> <div class="form-group">
<label for="input_username" class="col-lg-2 control-label">User name</label> <label for="input_username" class="col-lg-2 control-label">User name</label>
<div class="col-lg-10"> <div class="col-lg-10">
<% if session[:error_reload_form] %>
<input type="text" class="form-control" id="input_username" name="input_username" value="<%= session[:username] %>">
<% else %>
<input type="text" class="form-control" id="input_username" name="input_username" placeholder="User name"> <input type="text" class="form-control" id="input_username" name="input_username" placeholder="User name">
<% end %>
<span class="help-block">We strongly recommend a user name with only lowercase letters and numbers for compatibility reasons.</span> <span class="help-block">We strongly recommend a user name with only lowercase letters and numbers for compatibility reasons.</span>
</div> </div>
</div> </div>
...@@ -11,14 +15,22 @@ ...@@ -11,14 +15,22 @@
<div class="form-group"> <div class="form-group">
<label for="input_email" class="col-lg-2 control-label">E-mail address</label> <label for="input_email" class="col-lg-2 control-label">E-mail address</label>
<div class="col-lg-10"> <div class="col-lg-10">
<% if session[:error_reload_form] %>
<input type="text" class="form-control" id="input_email" name="input_email" value="<%= session[:email] %>">
<% else %>
<input type="text" class="form-control" id="input_email" name="input_email" placeholder="E-mail address"> <input type="text" class="form-control" id="input_email" name="input_email" placeholder="E-mail address">
<% end %>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="input_phone" class="col-lg-2 control-label">Phone number (Optional)</label> <label for="input_phone" class="col-lg-2 control-label">Phone number (Optional)</label>
<div class="col-lg-10"> <div class="col-lg-10">
<% if session[:error_reload_form] %>
<input type="text" class="form-control" id="input_phone" name="input_phone" value="<%= session[:phone] %>">
<% else %>
<input type="text" class="form-control" id="input_phone" name="input_phone" placeholder="+15415553421"> <input type="text" class="form-control" id="input_phone" name="input_phone" placeholder="+15415553421">
<% end %>
<span class="help-block">If you provide your phone number here we will use it to send you an SMS message with your password. Please enter your full phone number including the country code.</span> <span class="help-block">If you provide your phone number here we will use it to send you an SMS message with your password. Please enter your full phone number including the country code.</span>
</div> </div>
</div> </div>
...@@ -26,7 +38,12 @@ ...@@ -26,7 +38,12 @@
<div class="form-group"> <div class="form-group">
<label for="input_reason" class="col-lg-2 control-label">Reasons</label> <label for="input_reason" class="col-lg-2 control-label">Reasons</label>
<div class="col-lg-10"> <div class="col-lg-10">
<% if session[:error_reload_form] %>
<textarea class="form-control" rows="10" id="input_reason" name="input_reason"><%= session[:reason] %></textarea>
<% session[:error_reload_form] = false %>
<% else %>
<textarea class="form-control" rows="10" id="input_reason" name="input_reason"><% if session.has_key? :invite %>I have an invite!<% end %></textarea> <textarea class="form-control" rows="10" id="input_reason" name="input_reason"><% if session.has_key? :invite %>I have an invite!<% end %></textarea>
<% end %>
<span class="help-block">Please read "Specifying your reasons" above.</span> <span class="help-block">Please read "Specifying your reasons" above.</span>
</div> </div>
</div> </div>
......
<form class="form-horizontal" method="GET" action="<%= session[:error_location] %>">
<fieldset>
<div class="form-group">
<div class="col-lg-10 col-lg-offset-2">
<button type="submit" class="btn btn-info">Go back</button>
<a href="<%= session[:error_proceed] %>" class="btn btn-info">Proceed anyway</a>
</div>
</div>
</fieldset>
</form>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment