client_manager 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +128 -0
  3. data/Rakefile +37 -0
  4. data/app/assets/config/client_manager_manifest.js +2 -0
  5. data/app/assets/javascripts/client_manager/application.js +16 -0
  6. data/app/assets/javascripts/client_manager/clipboard.min.js +7 -0
  7. data/app/assets/javascripts/client_manager/oneui.min.js +5 -0
  8. data/app/assets/javascripts/client_manager/passwords.js +2 -0
  9. data/app/assets/javascripts/client_manager/sessions.js +2 -0
  10. data/app/assets/javascripts/client_manager/users.js +2 -0
  11. data/app/assets/stylesheets/client_manager/application.css +17 -0
  12. data/app/assets/stylesheets/client_manager/bootstrap.min.css +5 -0
  13. data/app/assets/stylesheets/client_manager/custom.css +23 -0
  14. data/app/assets/stylesheets/client_manager/oneui.min.css +4 -0
  15. data/app/assets/stylesheets/client_manager/passwords.css +4 -0
  16. data/app/assets/stylesheets/client_manager/sessions.css +4 -0
  17. data/app/assets/stylesheets/client_manager/users.css +4 -0
  18. data/app/controllers/client_manager/application_controller.rb +31 -0
  19. data/app/controllers/client_manager/clients_controller.rb +46 -0
  20. data/app/controllers/client_manager/concerns/set_client_by_token.rb +40 -0
  21. data/app/controllers/client_manager/passwords_controller.rb +26 -0
  22. data/app/controllers/client_manager/sessions_controller.rb +38 -0
  23. data/app/controllers/client_manager/users_controller.rb +121 -0
  24. data/app/helpers/client_manager/application_helper.rb +5 -0
  25. data/app/helpers/client_manager/passwords_helper.rb +4 -0
  26. data/app/helpers/client_manager/sessions_helper.rb +4 -0
  27. data/app/helpers/client_manager/users_helper.rb +4 -0
  28. data/app/jobs/client_manager/application_job.rb +4 -0
  29. data/app/mailers/client_manager/application_mailer.rb +6 -0
  30. data/app/mailers/client_manager/registration_mailer.rb +12 -0
  31. data/app/models/client_manager/application_record.rb +5 -0
  32. data/app/models/client_manager/client.rb +33 -0
  33. data/app/models/client_manager/user.rb +42 -0
  34. data/app/views/client_manager/clients/index.html.erb +37 -0
  35. data/app/views/client_manager/clients/new.html.erb +27 -0
  36. data/app/views/client_manager/clients/show.html.erb +41 -0
  37. data/app/views/client_manager/passwords/change.html.erb +46 -0
  38. data/app/views/client_manager/registration_mailer/registration_email.html.erb +90 -0
  39. data/app/views/client_manager/sessions/login.html.erb +53 -0
  40. data/app/views/client_manager/users/edit.html.erb +55 -0
  41. data/app/views/client_manager/users/index.html.erb +53 -0
  42. data/app/views/client_manager/users/new.html.erb +39 -0
  43. data/app/views/layouts/client_manager/application.html.erb +20 -0
  44. data/app/views/layouts/client_manager/none.html.erb +1 -0
  45. data/app/views/layouts/client_manager/partials/_header.html.erb +40 -0
  46. data/app/views/layouts/client_manager/partials/_modal.html.erb +15 -0
  47. data/config/locales/devise.en.yml +62 -0
  48. data/config/routes.rb +10 -0
  49. data/db/migrate/20160816183756_create_client_manager_users.rb +11 -0
  50. data/db/migrate/20160822112804_create_client_manager_clients.rb +11 -0
  51. data/db/migrate/20160905184226_add_password_digest_to_user.rb +5 -0
  52. data/db/migrate/20160930152731_add_password_changed_flag_to_users.rb +5 -0
  53. data/db/migrate/20161007235114_add_super_admin_flag_to_users.rb +5 -0
  54. data/lib/client_manager.rb +5 -0
  55. data/lib/client_manager/engine.rb +32 -0
  56. data/lib/client_manager/version.rb +3 -0
  57. data/lib/generators/client_manager/install_generator.rb +107 -0
  58. data/lib/generators/client_manager/templates/client_manager.rb +3 -0
  59. data/lib/tasks/client_manager_tasks.rake +12 -0
  60. metadata +217 -0
@@ -0,0 +1,90 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml">
4
+ <head>
5
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
6
+ <title>ClientManager</title>
7
+ <meta name="viewport" content="width=device-width"/>
8
+ <style type="text/css">
9
+ @media only screen and (max-width: 550px), screen and (max-device-width: 550px) {
10
+ body[yahoo] .buttonwrapper {
11
+ background-color: transparent !important;
12
+ }
13
+
14
+ body[yahoo] .button {
15
+ padding: 0 !important;
16
+ }
17
+
18
+ body[yahoo] .button a {
19
+ background-color: #777777;
20
+ padding: 15px 25px !important;
21
+ }
22
+ }
23
+
24
+ @media only screen and (min-device-width: 601px) {
25
+ .content {
26
+ width: 600px !important;
27
+ }
28
+
29
+ .col387 {
30
+ width: 387px !important;
31
+ }
32
+ }
33
+ </style>
34
+ </head>
35
+ <body bgcolor="#4b4b4b" style="margin: 0; padding: 0;" yahoo="fix">
36
+ <!--[if (gte mso 9)|(IE)]>
37
+ <table width="600" align="center" cellpadding="0" cellspacing="0" border="0">
38
+ <tr>
39
+ <td>
40
+ <![endif]-->
41
+ <table align="center" border="0" cellpadding="0" cellspacing="0"
42
+ style="border-collapse: collapse; width: 100%; max-width: 600px;" class="content">
43
+ <tr>
44
+ <td align="center"
45
+ style="padding: 20px 20px 20px 20px; color: #ffffff; font-family: Arial, sans-serif; font-size: 36px; font-weight: bold;">
46
+ </td>
47
+ </tr>
48
+ <tr>
49
+ <td align="center" bgcolor="#ffffff"
50
+ style="padding: 40px 20px 0 20px; color: #555555; font-family: Arial, sans-serif; font-size: 20px; line-height: 30px;">
51
+ <b>Hey <%= @user.name %>, <br>
52
+ You can now use <%= @application_name %>'s API</b>
53
+ </td>
54
+ </tr>
55
+ <tr>
56
+ <td align="center" bgcolor="#ffffff"
57
+ style="padding: 0 20px 40px 20px; color: #777777; font-family: Arial, sans-serif; font-size: 18px; line-height: 30px; border-bottom: 1px solid #f6f6f6;">
58
+ Password: <%= @user.password %>
59
+ </td>
60
+ </tr>
61
+ <tr>
62
+ <td align="center" bgcolor="#ffffff"
63
+ style="padding: 20px 20px 20px 20px; color: #555555; font-family: Arial, sans-serif; font-size: 15px; line-height: 24px;">
64
+ You'll have to change your password upon signing in the first time.
65
+ </td>
66
+ </tr>
67
+ <tr>
68
+ <td align="center" bgcolor="#f9f9f9" style="padding: 30px 20px 30px 20px; font-family: Arial, sans-serif;">
69
+ <table bgcolor="#777777" border="0" cellspacing="0" cellpadding="0" class="buttonwrapper">
70
+ <tr>
71
+ <td align="center" height="55"
72
+ style=" padding: 0 35px 0 35px; font-family: Arial, sans-serif; font-size: 22px;"
73
+ class="button">
74
+ <!--TODO change URL-->
75
+ <a href="<%= @url %>" style="color: #ffffff; text-align: center; text-decoration: none;">Go To
76
+ ClientManager</a>
77
+ </td>
78
+ </tr>
79
+
80
+ </table>
81
+ </td>
82
+ </tr>
83
+ </table>
84
+ <!--[if (gte mso 9)|(IE)]>
85
+ </td>
86
+ </tr>
87
+ </table>
88
+ <![endif]-->
89
+ </body>
90
+ </html>
@@ -0,0 +1,53 @@
1
+ <!-- Login Content -->
2
+ <div class="bg-white pulldown">
3
+ <div class="content content-boxed overflow-hidden">
4
+ <div class="row">
5
+ <div class="col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4">
6
+ <div class="push-30-t push-50 animated fadeIn">
7
+ <!-- Login Title -->
8
+ <div class="text-center">
9
+ <i class="fa fa-2x fa-circle-o-notch text-primary" aria-hidden="true "></i>
10
+ <h1 class="text-muted push-15-t">Login</h1>
11
+ </div>
12
+ <!-- END Login Title -->
13
+
14
+ <!-- Login Form -->
15
+ <!-- jQuery Validation (.js-validation-login class is initialized in js/pages/base_pages_login.js) -->
16
+ <!-- For more examples you can check out https://github.com/jzaefferer/jquery-validation -->
17
+ <%= form_tag({action: :login_attempt}, class: "js-validation-login form-horizontal push-30-t") do %>
18
+ <div class="form-group">
19
+ <div class="col-xs-12">
20
+ <div class="form-material form-material-primary floating">
21
+ <%= text_field_tag(:email, "", class: "form-control", id: "login-email") %>
22
+ <label for="login-email">Email</label>
23
+ </div>
24
+ </div>
25
+ </div>
26
+ <div class="form-group">
27
+ <div class="col-xs-12">
28
+ <div class="form-material form-material-primary floating">
29
+ <%= password_field_tag(:password, "", class: "form-control", id: "login-password") %>
30
+ <label for="login-password">Password</label>
31
+ </div>
32
+ </div>
33
+ </div>
34
+ <!--<div class="form-group">-->
35
+ <!--<div class="col-xs-12">-->
36
+ <!--<div class="font-s13 text-right push-5-t">-->
37
+ <!--<a href="#">Forgot Password?</a>-->
38
+ <!--</div>-->
39
+ <!--</div>-->
40
+ <!--</div>-->
41
+ <div class="form-group push-30-t">
42
+ <div class="col-xs-12 col-sm-6 col-sm-offset-3 col-md-4 col-md-offset-4">
43
+ <button class="btn btn-sm btn-block btn-primary" type="submit">Log in</button>
44
+ </div>
45
+ </div>
46
+ <% end %>
47
+ <!-- END Login Form -->
48
+ </div>
49
+ </div>
50
+ </div>
51
+ </div>
52
+ </div>
53
+ <!-- END Login Content -->
@@ -0,0 +1,55 @@
1
+ <%= form_for @user, html: {class: "form-horizontal push-5-t"} do |user_form| %>
2
+ <div class="block block-themed block-transparent remove-margin-b">
3
+ <div class="block-header bg-primary-dark">
4
+ <ul class="block-options">
5
+ <li>
6
+ <button data-dismiss="modal" type="button">
7
+ <span class="sr-only">Close Modal</span>
8
+ <i class="fa fa-close" aria-hidden="true"></i>
9
+ </button>
10
+ </li>
11
+ </ul>
12
+ <h3 class="block-title">Edit <%= @modal_title %></h3>
13
+ </div>
14
+ <div class="block-content">
15
+ <div class="form-group">
16
+ <%= user_form.label :name, class: "col-xs-12", required: true %>
17
+ <div class="col-xs-12">
18
+ <%= user_form.text_field :name, class: "form-control", required: true %>
19
+ </div>
20
+ </div>
21
+ <div class="form-group">
22
+ <%= user_form.label :email, class: "col-xs-12", required: true %>
23
+ <div class="col-xs-12">
24
+ <%= user_form.text_field :email, class: "form-control", type: "email", required: true, disabled: true %>
25
+ </div>
26
+ </div>
27
+ <% if client_manager_current_user.superadmin %>
28
+ <div class="form-group">
29
+ <%= user_form.label :maximum_number_of_clients, class: "col-xs-12", required: true %>
30
+ <div class="col-xs-12">
31
+ <%= user_form.text_field :maximum_number_of_clients, class: "form-control", type: @input_type, value: @max_clients, required: true, disabled: @client_manager_current_user_is_superadmin %>
32
+ </div>
33
+ </div>
34
+ <% end %>
35
+ <% if client_manager_current_user == @user %>
36
+ <div class="form-group">
37
+ <%= user_form.label "New Password", class: "col-xs-12", required: true %>
38
+ <div class="col-xs-12">
39
+ <%= user_form.password_field :new_password, class: "form-control" %>
40
+ </div>
41
+ </div>
42
+ <div class="form-group">
43
+ <%= user_form.label "Confirm New Password", class: "col-xs-12", required: true %>
44
+ <div class="col-xs-12">
45
+ <%= user_form.password_field :new_password_confirmation, class: "form-control" %>
46
+ </div>
47
+ </div>
48
+ <% end %>
49
+ <div class="modal-footer">
50
+ <button class="btn btn-sm btn-success" type="submit"><i class="fa fa-check" aria-hidden="true"></i> <%= @button_text %></button>
51
+ <button class="btn btn-sm btn-danger" type="button" data-dismiss="modal">Close</button>
52
+ </div>
53
+ </div>
54
+ </div>
55
+ <% end %>
@@ -0,0 +1,53 @@
1
+ <%= render 'layouts/client_manager/partials/header', path: new_user_path, path_title: 'Add New User' %>
2
+ <main id="main-container">
3
+ <div class="content bg-gray-lighter">
4
+ <div class="row items-push">
5
+ <div class="col-sm-7">
6
+ <h1 class="page-heading">
7
+ Users
8
+ </h1>
9
+ </div>
10
+ </div>
11
+ </div>
12
+ <div class="content">
13
+ <div class="block">
14
+
15
+ <div class="block-content">
16
+ <!-- DataTables init on table by adding .js-dataTable-full class, functionality initialized in js/pages/base_tables_datatables.js -->
17
+ <table class="table table-bordered table-striped js-dataTable-full">
18
+ <thead>
19
+ <tr>
20
+ <th>Name</th>
21
+ <th class="hidden-xs">Email</th>
22
+ <th class="hidden-xs">Max Clients</th>
23
+ <th class="hidden-xs">Clients</th>
24
+ <th class="text-center" style="width: 10%;">Actions</th>
25
+ </tr>
26
+ </thead>
27
+ <tbody>
28
+ <% @users.each do |user| %>
29
+ <tr>
30
+ <td class="font-w600"><%= user.name %></td>
31
+ <td class="hidden-xs"><%= user.email %></td>
32
+ <td class="hidden-xs"><%= user.maximum_number_of_clients %> </td>
33
+ <td class="hidden-xs"><%= user.client_count %> </td>
34
+ <td class="text-center">
35
+ <div class="btn-group">
36
+ <a href="<%= edit_user_path(user) %>" data-toggle="modal" data-target="#modal">
37
+ <span class="sr-only">Edit User <%= user.name %></span>
38
+ <i class="fa fa-pencil" aria-hidden="true"></i>
39
+ </a>
40
+ <a href="<%= user_path(user)%>" data-confirm="Are you sure you want to delete this user?" data-method="delete">
41
+ <span class="sr-only">Delete User <%= user.name %></span>
42
+ <i class="fa fa-times text-danger" aria-hidden="true"></i>
43
+ </a>
44
+ </div>
45
+ </td>
46
+ </tr>
47
+ <% end %>
48
+ </tbody>
49
+ </table>
50
+ </div>
51
+ </div>
52
+ </div>
53
+ </main>
@@ -0,0 +1,39 @@
1
+ <%= form_for @user, html: {class: "form-horizontal push-5-t"} do |user_form| %>
2
+ <div class="block block-themed block-transparent remove-margin-b">
3
+ <div class="block-header bg-primary-dark">
4
+ <ul class="block-options">
5
+ <li>
6
+ <button data-dismiss="modal" type="button">
7
+ <span class="sr-only">Close Modal</span>
8
+ <i class="fa fa-close" aria-hidden="true"></i>
9
+ </button>
10
+ </li>
11
+ </ul>
12
+ <h3 class="block-title">New User</h3>
13
+ </div>
14
+ <div class="block-content">
15
+ <div class="form-group">
16
+ <%= user_form.label :name, class: "col-xs-12", required: true %>
17
+ <div class="col-xs-12">
18
+ <%= user_form.text_field :name, class: "form-control", required: true %>
19
+ </div>
20
+ </div>
21
+ <div class="form-group">
22
+ <%= user_form.label :email, class: "col-xs-12", required: true %>
23
+ <div class="col-xs-12">
24
+ <%= user_form.text_field :email, class: "form-control", type: "email", required: true%>
25
+ </div>
26
+ </div>
27
+ <div class="form-group">
28
+ <%= user_form.label :maximum_number_of_clients, class: "col-xs-12", required: true %>
29
+ <div class="col-xs-12">
30
+ <%= user_form.text_field :maximum_number_of_clients, class: "form-control", type: "number", required: true %>
31
+ </div>
32
+ </div>
33
+ <div class="modal-footer">
34
+ <button class="btn btn-sm btn-success" type="submit"><i class="fa fa-check" aria-hidden="true"></i> Save user</button>
35
+ <button class="btn btn-sm btn-danger" type="button" data-dismiss="modal">Close</button>
36
+ </div>
37
+ </div>
38
+ </div>
39
+ <% end %>
@@ -0,0 +1,20 @@
1
+ <!DOCTYPE html>
2
+ <html class="no-focus" lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title>ClientManager</title>
6
+ <meta name="viewport" content="width=device-width,initial-scale=1">
7
+ <%= csrf_meta_tags %>
8
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400italic,600,700%7COpen+Sans:300,400,400italic,600,700">
9
+ <%= growlyflash_static_notices %>
10
+ <%= stylesheet_link_tag "client_manager/application", media: "all" %>
11
+ <%= javascript_include_tag "client_manager/application" %>
12
+ </head>
13
+ <body>
14
+ <%= yield %>
15
+ </body>
16
+ </html>
17
+
18
+ <%= render 'layouts/client_manager/partials/modal' %>
19
+
20
+
@@ -0,0 +1 @@
1
+ <%= yield %>
@@ -0,0 +1,40 @@
1
+ <header id="header-navbar" class="content-mini content-mini-full">
2
+ <nav>
3
+ <ul class="nav-header pull-right">
4
+ <li>
5
+ <a href="<%= path %>" class="btn btn-success" data-toggle="modal" data-target="#modal">
6
+ <span class="sr-only"><%= path_title %></span>
7
+ <i class="fa fa-plus" aria-hidden="true"></i>
8
+ </a>
9
+ </li>
10
+ <% if controller_name != "clients" %>
11
+ <li>
12
+ <a href="<%= clients_path %>" class="btn btn-default">
13
+ <span class="sr-only">Clients</span>
14
+ <i class="fa fa-server" aria-hidden="true"></i>
15
+ </a>
16
+ </li>
17
+ <% end %>
18
+ <% if client_manager_current_user.superadmin && controller_name != "users" %>
19
+ <li>
20
+ <a href="<%= users_path %>" class="btn btn-warning">
21
+ <span class="sr-only">Users</span>
22
+ <i class="fa fa-users" aria-hidden="true"></i>
23
+ </a>
24
+ </li>
25
+ <% end %>
26
+ <li>
27
+ <a href="<%= edit_user_path(client_manager_current_user) %>" class="btn btn-primary" data-toggle="modal" data-target="#modal">
28
+ <span class="sr-only">Your Profile</span>
29
+ <i class="fa fa-user" aria-hidden="true"></i>
30
+ </a>
31
+ </li>
32
+ <li>
33
+ <a href="<%= logout_path %>" class="btn btn-danger" type="button" data-confirm="Are you sure you want to sign out?">
34
+ <span class="sr-only">Sign Out</span>
35
+ <i class="fa fa-sign-out" aria-hidden="true"></i>
36
+ </a>
37
+ </li>
38
+ </ul>
39
+ </nav>
40
+ </header>
@@ -0,0 +1,15 @@
1
+ <div class="modal fade" id="modal" tabindex="-1" role="dialog" aria-hidden="true">
2
+ <div class="modal-dialog modal-dialog-popout">
3
+ <div class="modal-content">
4
+
5
+ </div>
6
+ </div>
7
+ </div>
8
+
9
+ <script>
10
+ $(function () {
11
+ $('.modal').on('hidden.bs.modal', function () {
12
+ $(this).removeData('bs.modal');
13
+ });
14
+ });
15
+ </script>
@@ -0,0 +1,62 @@
1
+ # Additional translations at https://github.com/plataformatec/devise/wiki/I18n
2
+
3
+ en:
4
+ devise:
5
+ confirmations:
6
+ confirmed: "Your email address has been successfully confirmed."
7
+ send_instructions: "You will receive an email with instructions for how to confirm your email address in a few minutes."
8
+ send_paranoid_instructions: "If your email address exists in our database, you will receive an email with instructions for how to confirm your email address in a few minutes."
9
+ failure:
10
+ already_authenticated: "You are already signed in."
11
+ inactive: "Your account is not activated yet."
12
+ invalid: "Invalid %{authentication_keys} or password."
13
+ locked: "Your account is locked."
14
+ last_attempt: "You have one more attempt before your account is locked."
15
+ not_found_in_database: "Invalid %{authentication_keys} or password."
16
+ timeout: "Your session expired. Please sign in again to continue."
17
+ unauthenticated: "You need to sign in or sign up before continuing."
18
+ unconfirmed: "You have to confirm your email address before continuing."
19
+ mailer:
20
+ confirmation_instructions:
21
+ subject: "Confirmation instructions"
22
+ reset_password_instructions:
23
+ subject: "Reset password instructions"
24
+ unlock_instructions:
25
+ subject: "Unlock instructions"
26
+ password_change:
27
+ subject: "Password Changed"
28
+ omniauth_callbacks:
29
+ failure: "Could not authenticate you from %{kind} because \"%{reason}\"."
30
+ success: "Successfully authenticated from %{kind} account."
31
+ passwords:
32
+ no_token: "You can't access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided."
33
+ send_instructions: "You will receive an email with instructions on how to reset your password in a few minutes."
34
+ send_paranoid_instructions: "If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes."
35
+ updated: "Your password has been changed successfully. You are now signed in."
36
+ updated_not_active: "Your password has been changed successfully."
37
+ registrations:
38
+ destroyed: "Bye! Your account has been successfully cancelled. We hope to see you again soon."
39
+ signed_up: "Welcome! You have signed up successfully."
40
+ signed_up_but_inactive: "You have signed up successfully. However, we could not sign you in because your account is not yet activated."
41
+ signed_up_but_locked: "You have signed up successfully. However, we could not sign you in because your account is locked."
42
+ signed_up_but_unconfirmed: "A message with a confirmation link has been sent to your email address. Please follow the link to activate your account."
43
+ update_needs_confirmation: "You updated your account successfully, but we need to verify your new email address. Please check your email and follow the confirm link to confirm your new email address."
44
+ updated: "Your account has been updated successfully."
45
+ sessions:
46
+ signed_in: "Signed in successfully."
47
+ signed_out: "Signed out successfully."
48
+ already_signed_out: "Signed out successfully."
49
+ unlocks:
50
+ send_instructions: "You will receive an email with instructions for how to unlock your account in a few minutes."
51
+ send_paranoid_instructions: "If your account exists, you will receive an email with instructions for how to unlock it in a few minutes."
52
+ unlocked: "Your account has been unlocked successfully. Please sign in to continue."
53
+ errors:
54
+ messages:
55
+ already_confirmed: "was already confirmed, please try signing in"
56
+ confirmation_period_expired: "needs to be confirmed within %{period}, please request a new one"
57
+ expired: "has expired, please request a new one"
58
+ not_found: "not found"
59
+ not_locked: "was not locked"
60
+ not_saved:
61
+ one: "1 error prohibited this %{resource} from being saved:"
62
+ other: "%{count} errors prohibited this %{resource} from being saved:"
@@ -0,0 +1,10 @@
1
+ ClientManager::Engine.routes.draw do
2
+ root to: 'sessions#login'
3
+ get 'login', to: 'sessions#login'
4
+ get 'logout', to: 'sessions#logout'
5
+ post 'login_attempt', to: 'sessions#login_attempt'
6
+ get 'change_password', to: 'passwords#change'
7
+ post 'change_password_attempt', to: 'passwords#change_password_attempt'
8
+ resources :clients
9
+ resources :users
10
+ end