Bailador For Beginners

 

Lance Wicks

lancew@cpan.org

Welcome

Hi !

This is a workshop for beginners, no advanced content here.

 

We will go from zero to full site up, running and ready for users.

 

 

Overview:

  • Development Environment
  • Getting started
  • Static Content
  • Initial Routes
  • User Registration
  • Login
  • Sessions
  • Databases
  • Routes

Git Repo

All steps including a virtual box appliance with all pre-requisites:

 

3 x USB Sticks are available

Windows

You might want to try installing Perl6 with chocolatey


choco install rakudostar

zef install Bailador

Linux

apt get rakudo

 

packer -S rakudo

 

From your distro

Install Modules

  • zef install Bailador

  • zef install DBIish
  • zef install Crypt::Bcrypt

Hello world

Lets get something working!

hello_london.pl6

use v6;
use Bailador;

get '/' => sub {
    "hello london"
}

baile();

c63e1081b71706244fe8a594d060402f22ae49d6

hello_london.pl6

$ bailador watch hello_london.pl6

 

or

 

$ perl6 hello_london.pl6

 

LPW2017 App

$ bailador new lpw2017

 

08153d854eedbe8f881077fbad05070e739ea153

Directories

/bin/app.pl6

/views

/t

Template Variables

<%= $foo %>

 

LPW2017 App

Lets make it look a bit prettier and serve some static content:

 

/static

/static/favicon.ico

/static/css

/static/js

 

   
static-dir / (.+) / => 'static/';

 

 

 

03b74e0101f74986e7d3961929b0f6a3fe4c7993

LPW2017 App

Start using a layout

 

/layout

/layout/main.tt

 

Simpler template

81ea6f5976fb7b3618736c485609c99230540a09

LPW2017 App

Create a login route

 

+post '/login' => sub {
+    my %params = request.params;
+    if (
+        %params<email> eq 'lancew@cpan.org'
+        && %params<password> eq 'london'
+    ) {
+        return 'Logged in';
+    } else {
+        return 'not logged in';
+    }
+};

 

46f960bd6ed4a0cdda2d165281c361445ba460b2

LPW2017 App

Sessions

 

kludge to show login or logout depending on session.

 

Perl6 in templates:

 

+% use Bailador;
+% my $session = session;
+        % if ( $session<user_email>:exists ) {

 

dbf1a07368b5bb06b1e6f3a5093fb33026978c34

LPW2017 App

/register route


+    my $dbh = DBIish.connect("SQLite", :database<db/lpw2017.db>);
+
+    my $sth = $dbh.prepare(q:to/STATEMENT/);
+        INSERT INTO users
+            (username,password_hash)
+            VALUES (?,?)
+        STATEMENT
+
+    my $hash = bcrypt-hash(%params<password>);
+    $sth.execute(%params<email>,$hash);

 

401359f9c7da2ac5232834a8ebbdd41a11651fa4

LPW2017 App

Database a bcrypt based login

 

+           if ( bcrypt-match(%params<password>, $hash) ) {
+               $password_is_correct = True;
+           }

 

 

dfedd783db1e8ca4d347cf384a86ba1c9adc2f3b

LPW2017::Bailador

By Lance Wicks

LPW2017::Bailador

Slides for my 2017 workshop at the London Perl Workshop "Bailador for Beginners".

  • 1,816