Compare commits

...

2 Commits

Author SHA1 Message Date
ngoomie 569aa1c95b Run perltidy 2024-08-24 00:02:27 -06:00
ngoomie 69919bcccb Stop thread compose box from being filled with spaces initially 2024-08-23 23:43:57 -06:00
7 changed files with 106 additions and 99 deletions

View File

@ -17,7 +17,7 @@ sub startup {
# load plugins that require no additional conf # load plugins that require no additional conf
$app->plugin('TagHelpers'); $app->plugin('TagHelpers');
$app->plugin('Model', {namespaces => ['CharmBoard::Model']}); $app->plugin('Model', { namespaces => ['CharmBoard::Model'] });
# load configuration from config file # load configuration from config file
my $config = my $config =
@ -69,81 +69,86 @@ sub startup {
# session helpers # session helpers
## create session ## create session
$app->helper(session_create => sub { $app->helper(
my $app = shift; session_create => sub {
my $app = shift;
my $_session_key = seasoning(16); my $_session_key = seasoning(16);
# create session entry in db # create session entry in db
$app->schema->resultset('Session')->create({ $app->schema->resultset('Session')->create({
session_key => $_session_key, session_key => $_session_key,
user_id => $_[0], user_id => $_[0],
session_expiry => time + 604800, session_expiry => time + 604800,
is_ip_bound => 0, is_ip_bound => 0,
bound_ip => undef bound_ip => undef
}); });
# now create session cookie # now create session cookie
$app->session(is_auth => 1 ); $app->session(is_auth => 1);
$app->session(user_id => $_[0] ); $app->session(user_id => $_[0]);
$app->session(session_key => $_session_key); $app->session(session_key => $_session_key);
$app->session(expiration => 604800 ); $app->session(expiration => 604800);
});
## destroy session
$app->helper(session_destroy => sub {
my $app = shift;
my $_session_key = $app->session('session_key');
# destroy entry for this session in the database
$app->schema->resultset('Session')
->search({ session_key => $_session_key })
->delete;
# now nuke the actual session cookie
$app->session(expires => 1);
});
## verify session
$app->helper(session_verify => sub {
my $app = shift;
my $_validity = 1;
my $_catch_error;
# get info from user's session cookie and store it in vars
my $_user_id = $app->session('user_id');
my $_session_key = $app->session('session_key');
my $_is_auth = $app->session('is_auth');
if ($_is_auth) {
try {
# check to see if session with this id is present in db
($app->schema->resultset('Session')->search
({ 'session_key' => $_session_key })
->get_column('session_key')->first)
or die;
# check to see if the current session key's user id matches
# that of the user id in the database
$_user_id == ($app->schema->resultset('Session')->
session_uid($_session_key))
or die;
# check if session is still within valid time as recorded in
# the db
time < ($app->schema->resultset('Session')->
session_expiry($_session_key))
or die;
} catch ($_catch_error) {
$_validity = undef;
$app->session_destroy;
}
} else {
$_validity = 0;
} }
);
## destroy session
$app->helper(
session_destroy => sub {
my $app = shift;
return $_validity; my $_session_key = $app->session('session_key');
});
# destroy entry for this session in the database
$app->schema->resultset('Session')
->search({ session_key => $_session_key })->delete;
# now nuke the actual session cookie
$app->session(expires => 1);
}
);
## verify session
$app->helper(
session_verify => sub {
my $app = shift;
my $_validity = 1;
my $_catch_error;
# get info from user's session cookie and store it in vars
my $_user_id = $app->session('user_id');
my $_session_key = $app->session('session_key');
my $_is_auth = $app->session('is_auth');
if ($_is_auth) {
try {
# check to see if session with this id is present in db
($app->schema->resultset('Session')
->search({ 'session_key' => $_session_key })
->get_column('session_key')->first)
or die;
# check to see if the current session key's user id matches
# that of the user id in the database
$_user_id == ($app->schema->resultset('Session')
->session_uid($_session_key))
or die;
# check if session is still within valid time as recorded in
# the db
time < ($app->schema->resultset('Session')
->session_expiry($_session_key))
or die;
} catch ($_catch_error) {
$_validity = undef;
$app->session_destroy;
}
} else {
$_validity = 0;
}
return $_validity;
}
);
# router # router
my $r = $app->routes; my $r = $app->routes;

View File

@ -22,7 +22,7 @@ sub login {
} }
sub login_do { sub login_do {
my $c = shift; my $c = shift;
my $username = $c->param('username'); my $username = $c->param('username');
my $password = $c->pepper . ':' . $c->param('password'); my $password = $c->pepper . ':' . $c->param('password');
@ -62,7 +62,8 @@ sub login_do {
} catch ($catch_error) { # redirect to login page on fail } catch ($catch_error) { # redirect to login page on fail
print $catch_error; print $catch_error;
$c->flash( $c->flash(
error => 'Your username and password were correct, but a server error =>
'Your username and password were correct, but a server
error prevented you from logging in. This has been logged error prevented you from logging in. This has been logged
so the administrator can fix it.' so the administrator can fix it.'
); );

View File

@ -16,17 +16,16 @@ sub thread_compose {
my $subf_cat = my $subf_cat =
$c->schema->resultset('Subforums')->cat_from_id($subf_id); $c->schema->resultset('Subforums')->cat_from_id($subf_id);
my $cat_title = my $cat_title =
$c->schema->resultset('Categories') $c->schema->resultset('Categories')->title_from_id($subf_cat);
->title_from_id($subf_cat);
$c->render( $c->render(
template => 'thread_compose', template => 'thread_compose',
subf_id => $subf_id, subf_id => $subf_id,
cat_title => $cat_title, cat_title => $cat_title,
subf_title => $c->schema->resultset('Subforums') subf_title =>
->title_from_id($subf_id), $c->schema->resultset('Subforums')->title_from_id($subf_id),
error => $c->flash('error'), error => $c->flash('error'),
message => $c->flash('message') message => $c->flash('message')
) )
} }
@ -36,7 +35,7 @@ sub thread_submit {
my $thread_title = $c->param('thread-title'); my $thread_title = $c->param('thread-title');
my $post_content = $c->param('post-content'); my $post_content = $c->param('post-content');
my $post_time = time; my $post_time = time;
my $subf_id = $c->param('id'); my $subf_id = $c->param('id');
my $catch_error; my $catch_error;
@ -50,7 +49,7 @@ sub thread_submit {
} }
# now send it # now send it
} }
1; 1;

View File

@ -53,8 +53,9 @@ sub register_do {
## search for input username and email in database ## search for input username and email in database
$user_check = $c->schema->resultset('Users') $user_check = $c->schema->resultset('Users')
->search({ username => $username })->single; ->search({ username => $username })->single;
$email_check = $c->schema->resultset('Users') $email_check =
->search({ email => $email })->single; $c->schema->resultset('Users')->search({ email => $email })
->single;
# TODO: compress this into something less redundant # TODO: compress this into something less redundant
($user_check && $email_check) eq undef ($user_check && $email_check) eq undef
@ -90,7 +91,7 @@ sub register_do {
print $catch_error; print $catch_error;
$c->flash( $c->flash(
error => error =>
'Your registration info was correct, but a server error 'Your registration info was correct, but a server error
prevented you from registering. This has been logged so the prevented you from registering. This has been logged so the
administrator can fix it.' administrator can fix it.'
); );

View File

@ -16,21 +16,20 @@ sub subf_view {
my $subf_cat = my $subf_cat =
$c->schema->resultset('Subforums')->cat_from_id($subf_id); $c->schema->resultset('Subforums')->cat_from_id($subf_id);
my $cat_title = my $cat_title =
$c->schema->resultset('Categories') $c->schema->resultset('Categories')->title_from_id($subf_cat);
->title_from_id($subf_cat);
my @thread_list = my @thread_list =
$c->schema->resultset('Threads')->fetch_by_subf($subf_id); $c->schema->resultset('Threads')->fetch_by_subf($subf_id);
$c->render( $c->render(
template => 'subf', template => 'subf',
subf_id => $subf_id, subf_id => $subf_id,
cat_title => $cat_title, cat_title => $cat_title,
subf_title => $c->schema->resultset('Subforums') subf_title =>
->title_from_id($subf_id), $c->schema->resultset('Subforums')->title_from_id($subf_id),
thread_list => \@thread_list thread_list => \@thread_list
) )
} }
1; 1;
__END__ __END__

View File

@ -12,8 +12,10 @@ use Tree::Simple;
sub list_full { sub list_full {
my $c = shift; my $c = shift;
# fetch a list of all categories # fetch a list of all categories
my @_all_cat = $c->{app}->schema->resultset('Categories')->fetch_all; my @_all_cat =
$c->{app}->schema->resultset('Categories')->fetch_all;
# create a Tree::Simple object that will contain the list # create a Tree::Simple object that will contain the list
# of categories and the subforums that belong to them # of categories and the subforums that belong to them
@ -41,4 +43,4 @@ sub list_full {
} }
1; 1;
__END__ __END__

View File

@ -14,7 +14,7 @@
id="post-content" id="post-content"
name="post-content" name="post-content"
cols="50" rows="5" cols="50" rows="5"
placeholder="post content"> placeholder="post content"></textarea>
</textarea><br /><br /> <br /><br />
<input type="submit" value="post!" /> <input type="submit" value="post!" />
</form> </form>