Advertisement
Guest User

Untitled

a guest
Aug 14th, 2017
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.51 KB | None | 0 0
  1. package Forum::Controller::API::Register;
  2. use Moose;
  3. use namespace::autoclean;
  4.  
  5. use Forum::Form::User::Register;
  6.  
  7. BEGIN {extends 'Forum::Controller::API'; }
  8.  
  9. has 'register_form' => (
  10. isa => 'Forum::Form::User::Register',
  11. is => 'rw',
  12. lazy => 1,
  13. default => sub { Forum::Form::User::Register->new },
  14. );
  15.  
  16.  
  17. =head1 NAME
  18.  
  19. Forum::Controller::API - REST Controller
  20.  
  21. =head1 DESCRIPTION
  22.  
  23. User REST Controller.
  24.  
  25. Handles Users
  26.  
  27. =head1 METHODS
  28.  
  29. =cut
  30.  
  31. =head2 create_user
  32.  
  33. do work
  34.  
  35. =cut
  36.  
  37. sub create_user : Path('/api/register') : Args(0) : ActionClass('REST::ForBrowsers') {
  38. my($self, $c) = @_;
  39. my $user = $c->model('ForumDB::User')->new_result({ });
  40.  
  41. $self->register_form->action($c->uri_for( '/api/register' ));
  42. $c->stash->{'form'} = $self->register_form;
  43. }
  44.  
  45.  
  46. =head2 create_user_GET
  47.  
  48. Handle GET requests.
  49.  
  50. =cut
  51.  
  52. sub create_user_GET : Private {
  53. my($self, $c) = @_;
  54. my $form = $c->stash->{'form'};
  55. $c->log->debug('GET request from non-browser');
  56. $self->status_ok($c, entity => {form => $form->render});
  57. }
  58.  
  59. sub create_user_GET_html : Private {
  60. my($self, $c) = @_;
  61. $c->log->debug('GET request from browser');
  62. my $form = $c->stash->{'form'};
  63. return $form->render;
  64. }
  65.  
  66. =head2 create_user_POST
  67.  
  68. Handle POST requests.
  69.  
  70. =cut
  71.  
  72.  
  73. sub create_user_POST : Private {
  74. my($self, $c) = @_;
  75. $c->log->debug('POST request from non-browser');
  76. my $data = $c->req->data || $c->req->parameters;
  77. my $username = $data->{'username'} || $c->req->parameter('username');
  78. my $password = $data->{'password'} || $c->parameter('password');
  79. my $form = $c->stash->{'form'};
  80.  
  81. unless( $c->model('ForumDB::User')->find({ username => $username }) ) {
  82.  
  83. # Here I want to just check to see if the form is valid after the
  84. # params are added. Because this form extends a form that uses
  85. # Formhandler::Model::DBIC, I have to send a schema/id or an item.
  86. # I want to handle the creation myself, which happens just below
  87. # the $form->process. However, passing $form->process a new item
  88. # causes it to create the row itself, even though the fields are
  89. # all marked noupdate. I can remedy this by not extending with
  90. # FormHandler::Model::DBIC, but then my forms don't get built with
  91. # with their DBIC relationships.
  92.  
  93. $form->process(
  94. item => $c->model('ForumDB::User')->new_result({ }),
  95. params => $data,
  96. );
  97.  
  98. if($form->is_valid) {
  99. use DateTime;
  100. my $user = $c->model('ForumDB::User')->create({ username => $username,
  101. password => $password,
  102. created => DateTime->now,
  103.  
  104. });
  105.  
  106. $c->log->debug("USER: $username CREATED");
  107.  
  108. if($c->request->looks_like_browser) {
  109. $c->log->debug("NEW USER RESPONSE - Looks like a browser.");
  110. $c->res->redirect($c->req->referer);
  111. }
  112. else {
  113. $c->log->debug("NEW USER RESPONSE - doesn't look like a browser.");
  114. $self->status_created($c,
  115. entity => {mk_user_entity($user)},
  116. location => $c->uri_for("/api/user/" . $user->id));
  117. }
  118. }
  119. else {
  120. $c->log->debug("EDIT FORM NOT VALID IN create_user_POST");
  121. }
  122. }
  123. else {
  124. # Username already taken
  125. if($c->request->looks_like_browser) {
  126. $c->res->redirect( $c->req->referer ); }
  127. else {
  128. $self->status_bad_request($c, message => "Usernamem already taken", )
  129. }
  130. }
  131. }
  132.  
  133. sub mk_user_entity {
  134. my $user = shift;
  135. return { user => { id => $user->id,
  136. username => $user->username,
  137. password => $user->password,
  138. }
  139. };
  140. }
  141.  
  142. 1;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement