Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package Forum::Controller::API::Register;
- use Moose;
- use namespace::autoclean;
- use Forum::Form::User::Register;
- BEGIN {extends 'Forum::Controller::API'; }
- has 'register_form' => (
- isa => 'Forum::Form::User::Register',
- is => 'rw',
- lazy => 1,
- default => sub { Forum::Form::User::Register->new },
- );
- =head1 NAME
- Forum::Controller::API - REST Controller
- =head1 DESCRIPTION
- User REST Controller.
- Handles Users
- =head1 METHODS
- =cut
- =head2 create_user
- do work
- =cut
- sub create_user : Path('/api/register') : Args(0) : ActionClass('REST::ForBrowsers') {
- my($self, $c) = @_;
- my $user = $c->model('ForumDB::User')->new_result({ });
- $self->register_form->action($c->uri_for( '/api/register' ));
- $c->stash->{'form'} = $self->register_form;
- }
- =head2 create_user_GET
- Handle GET requests.
- =cut
- sub create_user_GET : Private {
- my($self, $c) = @_;
- my $form = $c->stash->{'form'};
- $c->log->debug('GET request from non-browser');
- $self->status_ok($c, entity => {form => $form->render});
- }
- sub create_user_GET_html : Private {
- my($self, $c) = @_;
- $c->log->debug('GET request from browser');
- my $form = $c->stash->{'form'};
- return $form->render;
- }
- =head2 create_user_POST
- Handle POST requests.
- =cut
- sub create_user_POST : Private {
- my($self, $c) = @_;
- $c->log->debug('POST request from non-browser');
- my $data = $c->req->data || $c->req->parameters;
- my $username = $data->{'username'} || $c->req->parameter('username');
- my $password = $data->{'password'} || $c->parameter('password');
- my $form = $c->stash->{'form'};
- unless( $c->model('ForumDB::User')->find({ username => $username }) ) {
- # Here I want to just check to see if the form is valid after the
- # params are added. Because this form extends a form that uses
- # Formhandler::Model::DBIC, I have to send a schema/id or an item.
- # I want to handle the creation myself, which happens just below
- # the $form->process. However, passing $form->process a new item
- # causes it to create the row itself, even though the fields are
- # all marked noupdate. I can remedy this by not extending with
- # FormHandler::Model::DBIC, but then my forms don't get built with
- # with their DBIC relationships.
- $form->process(
- item => $c->model('ForumDB::User')->new_result({ }),
- params => $data,
- );
- if($form->is_valid) {
- use DateTime;
- my $user = $c->model('ForumDB::User')->create({ username => $username,
- password => $password,
- created => DateTime->now,
- });
- $c->log->debug("USER: $username CREATED");
- if($c->request->looks_like_browser) {
- $c->log->debug("NEW USER RESPONSE - Looks like a browser.");
- $c->res->redirect($c->req->referer);
- }
- else {
- $c->log->debug("NEW USER RESPONSE - doesn't look like a browser.");
- $self->status_created($c,
- entity => {mk_user_entity($user)},
- location => $c->uri_for("/api/user/" . $user->id));
- }
- }
- else {
- $c->log->debug("EDIT FORM NOT VALID IN create_user_POST");
- }
- }
- else {
- # Username already taken
- if($c->request->looks_like_browser) {
- $c->res->redirect( $c->req->referer ); }
- else {
- $self->status_bad_request($c, message => "Usernamem already taken", )
- }
- }
- }
- sub mk_user_entity {
- my $user = shift;
- return { user => { id => $user->id,
- username => $user->username,
- password => $user->password,
- }
- };
- }
- 1;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement