From 4aa5b353cbd9a69cad108e85b62ac809cb1fb75f Mon Sep 17 00:00:00 2001 From: Manager Bot Date: Wed, 30 Nov 2022 13:45:21 +0000 Subject: [PATCH] Now with stripe register. --- Web/lib/MJB/Web.pm | 18 ++--- Web/lib/MJB/Web/Controller/Auth.pm | 79 ++++++++++++++++++++++ Web/templates/auth/register_stripe.html.ep | 35 ++++++++++ 3 files changed, 124 insertions(+), 8 deletions(-) create mode 100644 Web/templates/auth/register_stripe.html.ep diff --git a/Web/lib/MJB/Web.pm b/Web/lib/MJB/Web.pm index 66fcb9d..2daa1ab 100644 --- a/Web/lib/MJB/Web.pm +++ b/Web/lib/MJB/Web.pm @@ -171,14 +171,16 @@ sub startup ($self) { $r->get ( '/contact' )->to( 'Root#contact' )->name('show_contact' ); # User registration, login, and logout. - $r->get ( '/register' )->to( 'Auth#register' )->name('show_register' ); - $r->get ( '/register/open' )->to( 'Auth#register_open' )->name('show_register_open' ); - $r->post ( '/register/open' )->to( 'Auth#do_register_open' )->name('do_register_open' ); - $r->get ( '/register/invite' )->to( 'Auth#register_invite' )->name('show_register_invite' ); - $r->post ( '/register/invite' )->to( 'Auth#do_register_invite' )->name('do_register_invite' ); - $r->get ( '/login' )->to( 'Auth#login' )->name('show_login' ); - $r->post ( '/login' )->to( 'Auth#do_login' )->name('do_login' ); - $auth->get( '/logout' )->to( 'Auth#do_logout' )->name('do_logout' ); + $r->get ( '/register' )->to( 'Auth#register' )->name('show_register' ); + $r->get ( '/register/open' )->to( 'Auth#register_open' )->name('show_register_open' ); + $r->post ( '/register/open' )->to( 'Auth#do_register_open' )->name('do_register_open' ); + $r->get ( '/register/invite' )->to( 'Auth#register_invite' )->name('show_register_invite' ); + $r->post ( '/register/invite' )->to( 'Auth#do_register_invite' )->name('do_register_invite' ); + $r->get ( '/register/stripe' )->to( 'Auth#register_stripe' )->name('show_register_stripe' ); + $r->post ( '/register/stripe' )->to( 'Auth#do_register_stripe' )->name('do_register_stripe' ); + $r->get ( '/login' )->to( 'Auth#login' )->name('show_login' ); + $r->post ( '/login' )->to( 'Auth#do_login' )->name('do_login' ); + $auth->get( '/logout' )->to( 'Auth#do_logout' )->name('do_logout' ); # User Forgot Password Workflow. $r->get ( '/forgot' )->to('Auth#forgot' )->name('show_forgot' ); diff --git a/Web/lib/MJB/Web/Controller/Auth.pm b/Web/lib/MJB/Web/Controller/Auth.pm index 5c4d88a..ec0b1d8 100644 --- a/Web/lib/MJB/Web/Controller/Auth.pm +++ b/Web/lib/MJB/Web/Controller/Auth.pm @@ -198,6 +198,85 @@ sub do_register_invite ( $c ) { $c->redirect_to( $c->url_for( 'show_dashboard' ) ); } +#== +# GET /register/stripe | show_register_stripe | templates/auth/register_stripe.html.ep +#== +sub register_stripe ( $c ) { + # Don't allow this user registration method unless register.enable_open is true. + return $c->redirect_to( $c->url_for( 'show_register' ) ) + unless $c->config->{register}{enable_stripe}; +} + +#== +# POST /register/stripe | do_register_stripe +# name | The name of the person who is registering an account +# email | The email address of the person registering the account +# password | The password they would like to use +# password_confirm | The same password again, in case they don't know it for sure +# +# Create an account for the user and login to that account once it has been created. +#== +sub do_register_stripe ( $c ) { + my $name = $c->stash->{form}->{name} = $c->param('name'); + my $email = $c->stash->{form}->{email} = $c->param('email'); + my $password = $c->stash->{form}->{password} = $c->param('password'); + my $p_confirm = $c->stash->{form}->{password_confirm} = $c->param('password_confirm'); + + # Don't allow this user registration method unless register.enable_open is true. + return $c->redirect_to( $c->url_for( 'show_register' ) ) + unless $c->config->{register}{enable_stripe}; + + push @{$c->stash->{errors}}, "Name is required" unless $name; + push @{$c->stash->{errors}}, "Email is required" unless $email; + push @{$c->stash->{errors}}, "Password is required" unless $password; + push @{$c->stash->{errors}}, "Confirm Password is required" unless $p_confirm; + + return $c->redirect_error( 'show_register' ) + if $c->stash->{errors}; + + push @{$c->stash->{errors}}, "Password and confirm password must match" + unless $p_confirm eq $password; + + push @{$c->stash->{errors}}, "Password must be at least 8 characters" + unless length($password) >= 8; + + push @{$c->stash->{errors}}, "That email address is already registered." + if $c->db->people( { email => $email } )->count; + + return $c->redirect_error( 'show_register_open' ) + if $c->stash->{errors}; + + my $person = try { + $c->db->storage->schema->txn_do( sub { + my $person = $c->db->resultset('Person')->create({ + email => $c->param('email'), + name => $c->param('name'), + is_enabled => 0, + }); + $person->new_related('auth_password', {})->set_password($c->param('password')); + + # Notify the system about the new account. + $c->db->system_notes->create({ + source => 'User Registration (Open)', + content => 'An account was created for ' . $person->email, + }); + + return $person; + }); + } catch { + push @{$c->stash->{errors}}, "Account could not be created: $_"; + }; + + return $c->redirect_error( 'show_register_open' ) + if $c->stash->{errors}; + + # Log the user in and send them to the dashboard. + $c->session->{uid} = $person->id; + $c->redirect_to( + $c->ua->get( $c->config->{stripe}->{backend} . '/stripe/get-checkout-link?lookup_key=' . $c->config->{stripe}->{lookup_key} )->result->json->{url} + ); +} + #== # GET /login | show_login | templates/auth/login.html.ep # diff --git a/Web/templates/auth/register_stripe.html.ep b/Web/templates/auth/register_stripe.html.ep new file mode 100644 index 0000000..21b62bc --- /dev/null +++ b/Web/templates/auth/register_stripe.html.ep @@ -0,0 +1,35 @@ +% layout 'standard', title => 'Register', sb_active => 'register'; + +

Create an account

+ +%= include '_base/status_window'; + +
+ + <%= include '_base/form/input', type => 'text', name => 'name', + title => 'Your name', + help => '', + value => $c->stash->{form}->{name} + %> + + <%= include '_base/form/input', type => 'email', name => 'email', + title => 'Email Address', + help => '', + value => $c->stash->{form}->{email} + %> + + <%= include '_base/form/input', type => 'password', name => 'password', + title => 'Password', + help => '', + value => $c->stash->{form}->{password} + %> + + <%= include '_base/form/input', type => 'password', name => 'password_confirm', + title => 'Confirm Password', + help => '', + value => $c->stash->{form}->{password_confirm} + %> + + +
+