Grimlock

 view release on metacpan or  search on metacpan

lib/Grimlock/Web/Controller/User.pm  view on Meta::CPAN


sub load_user : Chained('base') PathPart('user') CaptureArgs(1) {
  my ( $self, $c, $uid) = @_;
  my $user = $c->model('Database::User')->find(
    {
      name => $uid
    }, 
    {
      userid => $uid
    },
    { prefetch => 'entries' }
  );
  $c->log->debug("FOUND IN LOAD" . $user->name);
  $c->stash( user => $user );
}

sub list : Chained('base') PathPart('users') Args(0) ActionClass('REST'){
  my ( $self, $c ) = @_;
}

sub list_GET {
  my ( $self, $c ) = @_;
  $self->status_ok($c,
    entity => {
      users => [ $c->model('Database::User')->all ]
    },
  );
}

sub login  : Chained('base') PathPart('user/login') Args(0) ActionClass('REST') {
  my ( $self, $c, ) = @_;
  
  $c->stash( template => 'user/login.tt' );
}

sub login_GET  {
  my ( $self, $c ) = @_;
  return $self->status_ok($c, {
    entity => {
      user => $c->user->obj->userid
    }
  }) if $c->user_exists;
  
}

sub login_POST {
  my ( $self, $c ) = @_;
  my $params ||= $c->req->data || $c->req->params;
  if ( $c->authenticate({ 
        name => $params->{'name'},
        password => $params->{'password'}
      })
  ) {
        $c->res->redirect(
          $c->uri_for_action(
            '/user/browse', [ $c->user->obj->userid ]
          )
        );
  }

  $c->flash( message => "Incorrect credentials" );
  $c->res->redirect(
    $c->uri_for_action('/user/login')
  );
}

sub logout  : Chained('base') PathPart('user/logout') Args(0) ActionClass('REST') {
}

sub logout_GET {
  my ( $self, $c ) = @_;
  $c->logout;
  $self->status_ok($c,
    entity => { 
      message => "logged out successfully"
    }
  );
}

sub create : Chained('base') PathPart('user') Args(0) ActionClass('REST') {}

sub create_POST {
  my ( $self, $c ) = @_;
  my $params ||= $c->req->data || $c->req->params;
  my $user;
  try {

    $user = $c->model('Database::User')->create({
      name     => $params->{'name'},
      password => $params->{'password'},
      email    => $params->{'email'} || "",
    }) || die "Can't create user: $!";
    $c->set_authenticated($c->find_user({ name => $user->name}));
    
    return $self->status_created($c,
      location => $c->uri_for_action('/user/browse', [ $user->name ]),
      entity => {
        user => $user,
        message => "User created successfully!"
      }
    );
 
  } catch {

    return $self->status_bad_request($c,
      message => $_
    );
 
  };
 
}

sub browse : Chained('load_user') PathPart('') Args(0) ActionClass('REST') {
  my ( $self, $c ) = @_;
  my $user = $c->stash->{'user'} ;
  $c->stash( user => $user );
}

sub browse_GET {
  my ( $self, $c ) = @_;
  my $user = $c->stash->{'user'};  



( run in 2.356 seconds using v1.01-cache-2.11-cpan-f56aa216473 )