summaryrefslogtreecommitdiff
path: root/dancr.pl
diff options
context:
space:
mode:
authoryo mama <pepper@scannerjammer.com>2015-02-02 20:29:31 -0800
committeryo mama <pepper@scannerjammer.com>2015-02-02 20:29:31 -0800
commitd7ebb35b53c2f3e0ae8a609e9c9cc4bb9aa9ccd6 (patch)
treefe99a2302f90e071b524b1feb53b0af786d5c0b3 /dancr.pl
first
Diffstat (limited to 'dancr.pl')
-rw-r--r--dancr.pl120
1 files changed, 120 insertions, 0 deletions
diff --git a/dancr.pl b/dancr.pl
new file mode 100644
index 0000000..0d8d501
--- /dev/null
+++ b/dancr.pl
@@ -0,0 +1,120 @@
+use Dancer;
+use DBI;
+use File::Spec;
+use File::Slurp;
+use Template;
+
+print STDERR "firing up server...\n";
+set 'database' => './database/dancr.db';
+set 'session' => 'Simple';
+set 'template' => 'template_toolkit';
+set 'logger' => 'console';
+set 'log' => 'debug';
+set 'show_errors' => 1;
+set 'access_log' => 1;
+set 'warnings' => 1;
+set 'username' => 'username';
+set 'password' => 'password';
+set 'layout' => 'main';
+
+#CONSTANTS
+my $SITE_NAME = 'Demo';
+my $SCHEMAFILE = './database/schema.sql';
+my $FORM_CSS = 'css/simple-form.css';
+my $flash;
+
+sub set_flash {
+ my $message = shift;
+
+ $flash = $message;
+}
+
+sub get_flash {
+
+ my $msg = $flash;
+ $flash = "";
+
+ return $msg;
+}
+
+sub connect_db {
+ my $dbh = DBI->connect("dbi:SQLite:dbname=".setting('database')) or
+ die $DBI::errstr;
+
+ return $dbh;
+}
+
+sub init_db {
+ my $db = connect_db();
+ my $schema = read_file($SCHEMAFILE);
+ $db->do($schema) or die $db->errstr;
+}
+
+before_template sub {
+ my $tokens = shift;
+ $tokens->{'site_name'} = $SITE_NAME;
+ $tokens->{'css_url'} = request->base . $FORM_CSS;
+ $tokens->{'login_url'} = uri_for('/login');
+ $tokens->{'logout_url'} = uri_for('/logout');
+};
+
+get '/' => sub {
+ my $db = connect_db();
+ my $sql = 'select id, date, title, text from entries order by id desc';
+ my $sth = $db->prepare($sql) or die $db->errstr;
+ $sth->execute or die $sth->errstr;
+ template 'show_entries.tt', {
+ 'msg' => get_flash(),
+ 'add_entry_url' => uri_for('/add'),
+ 'entries' => $sth->fetchall_hashref('id'),
+ };
+};
+
+post '/add' => sub {
+ if ( not session('logged_in') ) {
+ send_error("Not logged in", 401);
+ }
+
+ my $db = connect_db();
+ my $sql = 'insert into entries (date, title, text) values (?, ?, ?)';
+ my $sth = $db->prepare($sql) or die $db->errstr;
+ $sth->execute(time(), params->{'title'}, params->{'text'}) or die $sth->errstr;
+
+ set_flash('New entry posted!');
+ redirect '/';
+};
+
+any ['get', 'post'] => '/login' => sub {
+ my $err;
+
+ if ( request->method() eq "POST" ) {
+ # process form input
+ if ( params->{'username'} ne setting('username') ) {
+ $err = "Invalid username";
+ }
+ elsif ( params->{'password'} ne setting('password') ) {
+ $err = "Invalid password";
+ }
+ else {
+ session 'logged_in' => true;
+ set_flash('You are logged in.');
+ redirect '/';
+ }
+ }
+
+ # display login form
+ template 'login.tt', {
+ 'err' => $err,
+ };
+
+};
+
+get '/logout' => sub {
+ session->destroy;
+ set_flash('You are logged out.');
+ redirect '/';
+};
+
+init_db();
+start;
+