authorizme 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (32) hide show
  1. data/.rvmrc +1 -81
  2. data/CHANGELOG.md +9 -0
  3. data/README.md +7 -1
  4. data/app/controllers/authorizme/authorizme_controller.rb +2 -6
  5. data/app/controllers/authorizme/password_resets_controller.rb +33 -0
  6. data/app/controllers/authorizme/sessions_controller.rb +2 -11
  7. data/app/controllers/authorizme/users_controller.rb +1 -0
  8. data/app/views/authorizme/authorizme/index.html.erb +6 -2
  9. data/app/views/authorizme/authorizme/popup.html.erb +3 -1
  10. data/app/views/authorizme/layouts/popup.html.erb +11 -9
  11. data/app/views/authorizme/password_resets/edit.html.erb +50 -0
  12. data/app/views/authorizme/password_resets/new.html.erb +19 -0
  13. data/authorizme.gemspec +1 -1
  14. data/{lib → config}/.DS_Store +0 -0
  15. data/config/locales/authorizme.en.yml +7 -0
  16. data/config/locales/authorizme.et.yml +7 -0
  17. data/config/locales/authorizme.lv.yml +7 -0
  18. data/config/routes.rb +1 -0
  19. data/lib/assets/stylesheets/authorizme.css +12 -0
  20. data/lib/assets/stylesheets/authorizme/button.css.scss +129 -0
  21. data/lib/assets/stylesheets/authorizme/form.css.scss +82 -0
  22. data/lib/assets/stylesheets/authorizme/main.css.scss +11 -0
  23. data/lib/assets/stylesheets/authorizme/popup.css.scss +65 -0
  24. data/lib/authorizme.rb +0 -3
  25. data/lib/authorizme/acts_as_authorizme.rb +30 -3
  26. data/lib/authorizme/for_controllers.rb +3 -7
  27. data/lib/authorizme/version.rb +1 -1
  28. data/lib/generators/authorizme/templates/authorizme.rb.erb +0 -8
  29. data/lib/generators/authorizme/templates/migrations/1_create_users.rb +4 -0
  30. data/spec/authorizme_spec.rb +1 -1
  31. metadata +126 -36
  32. data/.DS_Store +0 -0
data/.rvmrc CHANGED
@@ -1,81 +1 @@
1
- #!/usr/bin/env bash
2
-
3
- # This is an RVM Project .rvmrc file, used to automatically load the ruby
4
- # development environment upon cd'ing into the directory
5
-
6
- # First we specify our desired <ruby>[@<gemset>], the @gemset name is optional.
7
- environment_id="ruby-1.9.3-p125@rails32"
8
-
9
- #
10
- # Uncomment the following lines if you want to verify rvm version per project
11
- #
12
- # rvmrc_rvm_version="1.10.2" # 1.10.1 seams as a safe start
13
- # eval "$(echo ${rvm_version}.${rvmrc_rvm_version} | awk -F. '{print "[[ "$1*65536+$2*256+$3" -ge "$4*65536+$5*256+$6" ]]"}' )" || {
14
- # echo "This .rvmrc file requires at least RVM ${rvmrc_rvm_version}, aborting loading."
15
- # return 1
16
- # }
17
- #
18
-
19
- #
20
- # Uncomment following line if you want options to be set only for given project.
21
- #
22
- # PROJECT_JRUBY_OPTS=( --1.9 )
23
- #
24
- # The variable PROJECT_JRUBY_OPTS requires the following to be run in shell:
25
- #
26
- # chmod +x ${rvm_path}/hooks/after_use_jruby_opts
27
- #
28
-
29
- #
30
- # First we attempt to load the desired environment directly from the environment
31
- # file. This is very fast and efficient compared to running through the entire
32
- # CLI and selector. If you want feedback on which environment was used then
33
- # insert the word 'use' after --create as this triggers verbose mode.
34
- #
35
- if [[ -d "${rvm_path:-$HOME/.rvm}/environments" \
36
- && -s "${rvm_path:-$HOME/.rvm}/environments/$environment_id" ]]
37
- then
38
- \. "${rvm_path:-$HOME/.rvm}/environments/$environment_id"
39
-
40
- if [[ -s "${rvm_path:-$HOME/.rvm}/hooks/after_use" ]]
41
- then
42
- . "${rvm_path:-$HOME/.rvm}/hooks/after_use"
43
- fi
44
- else
45
- # If the environment file has not yet been created, use the RVM CLI to select.
46
- if ! rvm --create use "$environment_id"
47
- then
48
- echo "Failed to create RVM environment '${environment_id}'."
49
- return 1
50
- fi
51
- fi
52
-
53
- #
54
- # If you use an RVM gemset file to install a list of gems (*.gems), you can have
55
- # it be automatically loaded. Uncomment the following and adjust the filename if
56
- # necessary.
57
- #
58
- # filename=".gems"
59
- # if [[ -s "$filename" ]]
60
- # then
61
- # rvm gemset import "$filename" | grep -v already | grep -v listed | grep -v complete | sed '/^$/d'
62
- # fi
63
-
64
- # If you use bundler, this might be useful to you:
65
- # if [[ -s Gemfile ]] && ! command -v bundle >/dev/null
66
- # then
67
- # printf "%b" "The rubygem 'bundler' is not installed. Installing it now.\n"
68
- # gem install bundler
69
- # fi
70
- # if [[ -s Gemfile ]] && command -v bundle
71
- # then
72
- # bundle install
73
- # fi
74
-
75
- if [[ $- == *i* ]] # check for interactive shells
76
- then
77
- echo "Using: $(tput setaf 2)$GEM_HOME$(tput sgr0)" # show the user the ruby and gemset they are using in green
78
- else
79
- echo "Using: $GEM_HOME" # don't use colors in interactive shells
80
- fi
81
-
1
+ rvm 1.9.3@authorizme --verbose --create
data/CHANGELOG.md CHANGED
@@ -1,3 +1,12 @@
1
+ ## 1.1.0
2
+
3
+ ### Features & Enhancements
4
+
5
+ * Password reset feature with send email callback to app
6
+ * Remove remote attribute. Use respond_with and location param.
7
+ * Bug fixed
8
+ * Refacturing
9
+
1
10
  ## 1.0.0
2
11
 
3
12
  ### Features & Enhancements
data/README.md CHANGED
@@ -58,7 +58,9 @@ By default providers use callback view which require JQuery and require `eventBu
58
58
  <script type="text/javascript">
59
59
  $(document).ready(function() {
60
60
  window.close();
61
- window.opener.eventBus.trigger("loginDone");
61
+ if (window.opener.eventBus) {
62
+ window.opener.eventBus.trigger("loginDone");
63
+ }
62
64
  window.opener.focus();
63
65
  });
64
66
  </script>
@@ -73,6 +75,10 @@ You can implement your own provider:
73
75
  2. You must implement `auth` and `callback` methods, where `auth` is method which redirect user to provider and `callback` get data from provider callback data.
74
76
  3. Then you must add your provider namespace in authorizme config file in array `providers`.
75
77
 
78
+ #### Password reset
79
+
80
+ Use `/authorizme/password_resets` (if you have another namespace, use `/{your_namespace}/password_resets`) controller to create a password reset token and send it to user. You can overide `send_password_reset_notification` method in user model to send an email with `password_reset_token` . The password reset token will expire after 2 hours.
81
+
76
82
  ## Development
77
83
 
78
84
  Questions or problems? Please post them on the [issue tracker](https://github.com/CreativeMobile/authorizme/issues). You can contribute changes by forking the project and submitting a pull request. You can ensure the tests passing by running `bundle` and `rake`.
@@ -17,12 +17,8 @@ module Authorizme
17
17
  end
18
18
 
19
19
  def logout
20
- session[:user_id] = nil
21
- if Authorizme::remote
22
- respond_with_status "logged_out"
23
- else
24
- redirect_to Authorizme::after_logout_path
25
- end
20
+ session[:user_id] = nil if session[:user_id] && session[:user_id] != nil
21
+ respond_with({status: "logged_out"}, :location => Authorizme::after_logout_path)
26
22
  end
27
23
 
28
24
  def render_popup_view
@@ -0,0 +1,33 @@
1
+ module Authorizme
2
+ class PasswordResetsController < AuthorizmeController
3
+ def new
4
+ end
5
+
6
+ def create
7
+ user = User.find_by_email(params[:email])
8
+ user.send_password_reset if user
9
+ if user
10
+ respond_with user, :location => root_url
11
+ else
12
+ respond_with nil, :location => root_url
13
+ end
14
+ end
15
+
16
+ def edit
17
+ @user = User.find_by_password_reset_token!(params[:id])
18
+ end
19
+
20
+ def update
21
+ @user = User.find_by_password_reset_token!(params[:id])
22
+ @user.password_will_be_update_in_this_request if @user
23
+ if @user.password_reset_sent_at < 2.hours.ago
24
+ respond_with @user, :location => root_url, :alert => "Password reset has expired."
25
+ elsif @user.update_attributes(params[:user])
26
+ login @user
27
+ respond_with @user, :location => root_url, :notice => "Password has been reset!"
28
+ else
29
+ render :edit
30
+ end
31
+ end
32
+ end
33
+ end
@@ -5,18 +5,9 @@ module Authorizme
5
5
  user = User.find_by_email(params[:email])
6
6
  if user && user.authenticate(params[:password])
7
7
  login user
8
- if Authorizme::remote
9
- respond_with_status "logged_in", {user: user}
10
- else
11
- redirect_to Authorizme::after_login_path
12
- end
8
+ respond_with({status: "logged_in", user: user}, :location => Authorizme::after_login_path)
13
9
  else
14
- if Authorizme::remote
15
- status = {status: "authorization_faild"}
16
- respond_with(status, {:location => nil, :status => :not_found})
17
- else
18
- render "new"
19
- end
10
+ respond_with({status: "authorization_faild", user: user}, {:location => Authorizme::not_logged_in_path, :status => :not_found})
20
11
  end
21
12
  end
22
13
 
@@ -7,6 +7,7 @@ module Authorizme
7
7
 
8
8
  def create
9
9
  @user = User.new(params[:user])
10
+ @user.password_will_be_update_in_this_request if @user
10
11
  if @user.save
11
12
  redirect_to root_url, :notice => "Signed up!"
12
13
  else
@@ -11,9 +11,11 @@
11
11
  <% end %>
12
12
  <% end %>
13
13
 
14
- <div><a href="<%= "/#{Authorizme::namespace}/logout" %>">Logout</a></div>
14
+ <div>
15
+ <%= link_to "logout", "/#{Authorizme::namespace}/logout", :method => :delete %>
16
+ </div>
15
17
 
16
- <% end %>
18
+ <% end %>
17
19
 
18
20
 
19
21
 
@@ -30,6 +32,8 @@
30
32
  <p class="button"><%= submit_tag "Log in" %></p>
31
33
  <% end %>
32
34
 
35
+ <%= link_to "Forget your password?", "/#{Authorizme::namespace}/password_resets/new" %>
36
+
33
37
  <h3>or use one of those providers:</h3>
34
38
  <%= link_to "Draugiem.lv", "/#{Authorizme::namespace}/login/draugiem" %>
35
39
  <%= link_to "Twitter.com", "/#{Authorizme::namespace}/login/twitter" %>
@@ -1,7 +1,9 @@
1
1
  <script type="text/javascript">
2
2
  $(document).ready(function() {
3
3
  window.close();
4
- window.opener.eventBus.trigger("loginDone");
4
+ if (window.opener.eventBus) {
5
+ window.opener.eventBus.trigger("loginDone");
6
+ }
5
7
  window.opener.focus();
6
8
  });
7
9
  </script>
@@ -1,11 +1,13 @@
1
1
  <!DOCTYPE html>
2
2
  <html>
3
- <head>
4
- <title>Authorization completed</title>
5
- <%= javascript_include_tag "jquery" %>
6
- <%= csrf_meta_tags %>
7
- </head>
8
- <body>
9
- <%= yield %>
10
- </body>
11
- </html>
3
+ <head>
4
+ <title>Authorizme</title>
5
+ <%= stylesheet_link_tag "authorizme", :media => "all" %>
6
+ <%= javascript_include_tag "jquery" %>
7
+ <%= csrf_meta_tags %>
8
+ </head>
9
+
10
+ <body>
11
+ <%= yield %>
12
+ </body>
13
+ </html>
@@ -0,0 +1,50 @@
1
+ <div id="popups">
2
+ <div class="popup_wrap">
3
+ <div class="shade_wrap"></div>
4
+ <div class="container_wrap">
5
+
6
+ <h2><%= t("authorizme.password_reset.new_password_form.title") %></h2>
7
+ <p><%= t("authorizme.password_reset.new_password_form.description") %></p>
8
+
9
+ <%= form_for @user, :url => "/#{Authorizme::namespace}/password_resets/#{params[:id]}" do |f| %>
10
+
11
+ <% if @user.errors.any? && @user.errors.get(:password) %>
12
+ <div class="error_messages">
13
+ <ul>
14
+ <% @user.errors.get(:password).each do |error| %>
15
+ <li><%= error %></li>
16
+ <% end %>
17
+ </ul>
18
+ </div>
19
+ <% end %>
20
+
21
+ <div class="field">
22
+ <%= f.label :password %>
23
+ <%= f.password_field :password %>
24
+ </div>
25
+
26
+ <% if @user.errors.any? && @user.errors.get(:password_confirmation) %>
27
+ <div class="error_messages">
28
+ <ul>
29
+ <% @user.errors.get(:password_confirmation).each do |error| %>
30
+ <li><%= error %></li>
31
+ <% end %>
32
+ </ul>
33
+ </div>
34
+ <% end %>
35
+
36
+ <div class="field">
37
+ <%= f.label :password_confirmation %>
38
+ <%= f.password_field :password_confirmation %>
39
+ </div>
40
+
41
+ <div class="actions">
42
+ <div class="button_wrap center green">
43
+ <%= f.submit t("authorizme.password_reset.new_password_form.submit") %>
44
+ </div>
45
+ </div>
46
+ <% end %>
47
+
48
+ </div>
49
+ </div>
50
+ </div>
@@ -0,0 +1,19 @@
1
+ <div id="popups">
2
+ <div class="popup_wrap">
3
+ <div class="shade_wrap"></div>
4
+ <div class="container_wrap">
5
+
6
+ <h2>Password reset</h2>
7
+ <p>Please, enter your e-mail</p>
8
+
9
+ <%= form_tag authorizme_password_resets_path, :method => :post do %>
10
+ <div class="field">
11
+ <%= label_tag :email %>
12
+ <%= text_field_tag :email, params[:email] %>
13
+ </div>
14
+ <div class="actions"><%= submit_tag "Reset Password" %></div>
15
+ <% end %>
16
+
17
+ </div>
18
+ </div>
19
+ </div>
data/authorizme.gemspec CHANGED
@@ -25,8 +25,8 @@ Gem::Specification.new do |s|
25
25
  s.add_development_dependency 'capybara'
26
26
  s.add_development_dependency 'factory_girl_rails'
27
27
 
28
- s.add_dependency "activesupport"
29
28
  s.add_dependency "rails"
29
+ s.add_dependency "activesupport"
30
30
  s.add_dependency "bcrypt-ruby"
31
31
  s.add_dependency "json"
32
32
  s.add_dependency "twitter_oauth"
Binary file
@@ -0,0 +1,7 @@
1
+ en:
2
+ authorizme:
3
+ password_reset:
4
+ new_password_form:
5
+ title: Password reset
6
+ description: Please, enter your new password
7
+ submit: Update Password
@@ -0,0 +1,7 @@
1
+ et:
2
+ authorizme:
3
+ password_reset:
4
+ new_password_form:
5
+ title: "Parooli uuendamine"
6
+ description: "Palun, sisesta uus parool"
7
+ submit: "Uuenda Salasõna"
@@ -0,0 +1,7 @@
1
+ lv:
2
+ authorizme:
3
+ password_reset:
4
+ new_password_form:
5
+ title: "Ievadi jaunu paroli!"
6
+ description: "Izvēles sev jaunu paroli - un centies to kārtīgi iegaumēt ;)"
7
+ submit: "Nomainīt paroli!"
data/config/routes.rb CHANGED
@@ -3,6 +3,7 @@ Rails.application.routes.draw do
3
3
  namespace Authorizme::namespace do
4
4
  resources :sessions
5
5
  resources :users
6
+ resources :password_resets
6
7
 
7
8
  get '/' => 'authorizme#index', :as => 'main'
8
9
  get '/signup' => 'users#new', :as => 'signup'
@@ -0,0 +1,12 @@
1
+ /*
2
+ *= require_self
3
+ *= require authorizme/main
4
+ *= require authorizme/form
5
+ *= require authorizme/button
6
+ *= require authorizme/popup
7
+ */
8
+
9
+ body
10
+ {
11
+ font-family: Arial, sans-serif;
12
+ }
@@ -0,0 +1,129 @@
1
+ @charset "UTF-8";
2
+
3
+ .button_wrap
4
+ {
5
+ input
6
+ {
7
+ display: block;
8
+ padding: 10px 18px;
9
+ position: relative;
10
+ top: -1px;
11
+ left: -1px;
12
+ border-radius: 3px;
13
+ -moz-border-radius: 3px;
14
+ -webkit-border-radius: 3px;
15
+ cursor: pointer;
16
+ line-height: 16px;
17
+ border: none;
18
+ color: #363636;
19
+ box-shadow: inset 0 -8px 10px rgba(0,0,0,0.15), 0 1px 0 rgba(255,255,255, 0.3), inset 0 1px 0 rgba(255,255,255, 0.3);
20
+ -webkit-transition: background 0.2s ease;
21
+ -moz-transition: background 0.2s ease;
22
+ -o-transition: background 0.2s ease;
23
+ -ms-transition: background 0.2s ease;
24
+ transition: background 0.2s ease;
25
+ -webkit-font-smoothing: antialiased;
26
+ -webkit-text-shadow: 1px 1px 0 #fff;
27
+ -moz-text-shadow: 1px 1px 0 #fff;
28
+ text-shadow: 1px 1px 0 #fff;
29
+ font:
30
+ {
31
+ weight: bold;
32
+ size: 12px;
33
+ }
34
+
35
+ &:active
36
+ {
37
+ -webkit-box-shadow: 1px 1px 2px #aaa inset;
38
+ -moz-box-shadow: 1px 1px 2px #aaa inset;
39
+ -o-box-shadow: 1px 1px 2px #aaa inset;
40
+ box-shadow: 1px 1px 2px #aaa inset;
41
+ top: 0;
42
+ left: 0;
43
+ }
44
+ }
45
+
46
+ &.center
47
+ {
48
+ input
49
+ {
50
+ margin: 0 auto;
51
+ }
52
+ }
53
+
54
+ &.large
55
+ {
56
+ input
57
+ {
58
+ height: 32px;
59
+ }
60
+ }
61
+
62
+ &.grey {
63
+ &:hover {
64
+
65
+ }
66
+
67
+ input
68
+ {
69
+ background: #b5b5b5;
70
+ border: none;
71
+ color: #fff;
72
+ -webkit-text-shadow: 1px 1px 0 #808080;
73
+ -moz-text-shadow: 1px 1px 0 #808080;
74
+ text-shadow: 1px 1px 0 #808080;
75
+
76
+
77
+ &:hover
78
+ {
79
+ -webkit-text-shadow: 1px 1px 0 #808080;
80
+ -moz-text-shadow: 1px 1px 0 #808080;
81
+ text-shadow: 1px 1px 0 #808080;
82
+ background: #d0d0d0;
83
+ }
84
+
85
+ &:active
86
+ {
87
+ -webkit-box-shadow: 1px 1px 2px #808080 inset;
88
+ -moz-box-shadow: 1px 1px 2px #808080 inset;
89
+ -o-box-shadow: 1px 1px 2px #808080 inset;
90
+ box-shadow: 1px 1px 2px #808080 inset;
91
+ }
92
+ }
93
+ }
94
+
95
+ &.green
96
+ {
97
+ &:hover
98
+ {
99
+
100
+ }
101
+
102
+ input
103
+ {
104
+ background: #91c508;
105
+ border: none;
106
+ color: #fff;
107
+ -webkit-text-shadow: 1px 1px 0 #628c03;
108
+ -moz-text-shadow: 1px 1px 0 #628c03;
109
+ text-shadow: 1px 1px 0 #628c03;
110
+
111
+ &:hover
112
+ {
113
+ -webkit-text-shadow: 1px 1px 0 #628c03;
114
+ -moz-text-shadow: 1px 1px 0 #628c03;
115
+ text-shadow: 1px 1px 0 #628c03;
116
+ background: #7cb009;
117
+ }
118
+
119
+ &:active
120
+ {
121
+ -webkit-box-shadow: 1px 1px 2px #688f00 inset;
122
+ -moz-box-shadow: 1px 1px 2px #688f00 inset;
123
+ -o-box-shadow: 1px 1px 2px #688f00 inset;
124
+ box-shadow: 1px 1px 2px #688f00 inset;
125
+ background: #7cb009;
126
+ }
127
+ }
128
+ }
129
+ }
@@ -0,0 +1,82 @@
1
+ @charset "UTF-8";
2
+
3
+ form
4
+ {
5
+ .field
6
+ {
7
+ display: block;
8
+
9
+ label
10
+ {
11
+ display: none;
12
+ }
13
+
14
+ input
15
+ {
16
+ display: block;
17
+ width: 100%;
18
+ padding: 8px;
19
+ margin: 8px 0;
20
+ -webkit-box-sizing: border-box;
21
+ -moz-box-sizing: border-box;
22
+ box-sizing: border-box;
23
+ border: 1px solid #C2C2C2;
24
+ color: #666666;
25
+ -webkit-border-radius: 4px;
26
+ -moz-border-radius: 4px;
27
+ border-radius: 4px;
28
+ background: #FDFDFC;
29
+ font-size: 14px;
30
+ -webkit-transition: all 0.3s ease;
31
+ -moz-transition: all 0.3s ease;
32
+ -ms-transition: all 0.3s ease;
33
+ -o-transition: all 0.3s ease;
34
+ transition: all 0.3s ease;
35
+
36
+ &:focus
37
+ {
38
+ -webkit-box-shadow: 0 0 5px #d3d3d3;
39
+ -moz-box-shadow: 0 0 5px #d3d3d3;
40
+ box-shadow: 0 0 5px #d3d3d3;
41
+ }
42
+ }
43
+
44
+ .field_with_errors
45
+ {
46
+ input
47
+ {
48
+ border: 1px solid #D60000;
49
+ margin: 4px 0 8px;
50
+
51
+ &:focus
52
+ {
53
+ -webkit-box-shadow: 0 0 5px #d39999;
54
+ -moz-box-shadow: 0 0 5px #d39999;
55
+ box-shadow: 0 0 5px #d39999;
56
+ }
57
+ }
58
+ }
59
+ }
60
+
61
+ .error_messages
62
+ {
63
+ ul
64
+ {
65
+ list-style: none;
66
+
67
+ li
68
+ {
69
+ display: block;
70
+ color: #D60000;
71
+ font-size: 11px;
72
+ }
73
+ }
74
+ }
75
+
76
+ .actions
77
+ {
78
+ display: block;
79
+ padding: 5px 0 0;
80
+ text-align: center;
81
+ }
82
+ }
@@ -0,0 +1,11 @@
1
+ @charset "UTF-8";
2
+
3
+ h2
4
+ {
5
+ margin: 0 0 2px 0;
6
+ font-weight: bold;
7
+ font-size: 16px;
8
+ line-height: 20px;
9
+ color: #464646;
10
+ text-align: center;
11
+ }
@@ -0,0 +1,65 @@
1
+ @charset "UTF-8";
2
+
3
+ #popups
4
+ {
5
+ display: block;
6
+ width: 100%;
7
+ height: 100%;
8
+ }
9
+
10
+ .popup_wrap
11
+ {
12
+ display: block;
13
+ width: 100%;
14
+ height: 100%;
15
+ position: absolute;
16
+ top: 0;
17
+ left: 0;
18
+ z-index: 1000;
19
+
20
+ .shade_wrap
21
+ {
22
+ display: block;
23
+
24
+ width: 100%;
25
+ height: 100%;
26
+
27
+ position: absolute;
28
+ top: 0;
29
+ left: 0;
30
+
31
+ background: #000;
32
+ opacity: 0.7;
33
+ }
34
+
35
+ .container_wrap
36
+ {
37
+ display: block;
38
+
39
+ min-width: 280px;
40
+
41
+ padding: 30px;
42
+ margin: 0 0 0 -170px;
43
+
44
+ position: absolute;
45
+ top: 10%;
46
+ left: 50%;
47
+
48
+ -webkit-border-radius: 6px;
49
+ -moz-border-radius: 6px;
50
+ border-radius: 6px;
51
+
52
+ background: #FDFDFD;
53
+
54
+ p
55
+ {
56
+ margin: 0 0 10px 0;
57
+ font-weight: normal;
58
+ font-size: 16px;
59
+ line-height: 20px;
60
+ color: #464646;
61
+ text-align: center;
62
+ }
63
+ }
64
+
65
+ }
data/lib/authorizme.rb CHANGED
@@ -61,9 +61,6 @@ module Authorizme
61
61
 
62
62
  mattr_accessor :not_logged_in_path
63
63
  @@not_logged_in_path = "/#{Authorizme::namespace}/"
64
-
65
- mattr_accessor :remote
66
- @@remote = false
67
64
 
68
65
  mattr_accessor :providers
69
66
  @@providers = ["draugiem", "facebook", "twitter"]
@@ -18,11 +18,14 @@ module Authorizme
18
18
  has_many :synchronize_requests, :class_name => "Authorizme::SynchronizeRequest"
19
19
 
20
20
  attr_reader :password
21
- attr_accessible :first_name, :last_name, :image_url, :email, :password, :password_confirmation
21
+ attr_accessor :password_will_be_update
22
+
23
+ attr_accessible :first_name, :last_name, :image_url, :email, :password, :password_confirmation, :password_will_be_update
22
24
 
23
25
  # Validations
24
26
  validates_confirmation_of :password
25
- validates_presence_of :password_digest, :if => :has_not_provider?
27
+ validates_length_of :password, :minimum => 3, :if => :need_check_password?
28
+ validates_presence_of :password_digest, :if => :has_not_provider?
26
29
  validates_presence_of :email, :on => :create, :if => :has_not_provider?
27
30
  validates_uniqueness_of :email, :if => :has_not_provider?
28
31
 
@@ -112,6 +115,14 @@ module Authorizme
112
115
  def has_not_provider?
113
116
  !self.has_provider
114
117
  end
118
+
119
+ def need_check_password?
120
+ self.password_will_be_update
121
+ end
122
+
123
+ def password_will_be_update_in_this_request
124
+ self.password_will_be_update = true
125
+ end
115
126
 
116
127
  def has_synchronize_request?
117
128
  self.synchronize_requests.status_new.any?
@@ -131,8 +142,24 @@ module Authorizme
131
142
  def on_logged_in
132
143
  end
133
144
 
134
- private
145
+ def send_password_reset
146
+ set_new_password_reset_token
147
+ self.password_reset_sent_at = Time.zone.now
148
+ self.save!
149
+ send_password_reset_notification
150
+ end
135
151
 
152
+ def set_new_password_reset_token
153
+ begin
154
+ self.password_reset_token = SecureRandom.urlsafe_base64
155
+ end while User.exists?(:password_reset_token => self.password_reset_token)
156
+ end
157
+
158
+ private
159
+
160
+ def send_password_reset_notification
161
+ end
162
+
136
163
  def on_synchronized old_user
137
164
  end
138
165
 
@@ -13,7 +13,7 @@ module Authorizme
13
13
 
14
14
  def current_user
15
15
  return @current_user if defined? @current_users
16
- @current_user ||= User.find session[:user_id] if session[:user_id]
16
+ @current_user ||= User.find session[:user_id] if session[:user_id] && session[:user_id] != nil
17
17
  end
18
18
 
19
19
  def login user
@@ -56,12 +56,8 @@ module Authorizme
56
56
  end
57
57
 
58
58
  def not_logged_in_status
59
- if Authorizme::remote
60
- status = {status: "not_logged_in"}
61
- respond_with status
62
- else
63
- redirect_to "/#{Authorizme::namespace}/"
64
- end
59
+ status = {status: "not_logged_in"}
60
+ respond_with status, :location => "/#{Authorizme::namespace}/"
65
61
  end
66
62
  end
67
63
  end
@@ -1,3 +1,3 @@
1
1
  module Authorizme
2
- VERSION = "1.0.0"
2
+ VERSION = "1.1.0"
3
3
  end
@@ -46,14 +46,6 @@ Authorizme.setup do |config|
46
46
  #
47
47
  # Default is set authorizme
48
48
 
49
- # == Authorize all remotly with ajax
50
- #
51
- # If application use ajax in login and logout forms then this must be set true.
52
- #
53
- # config.remote = false
54
- #
55
- # Default it is set false
56
-
57
49
  # == You can specify which providers you want to use in your application
58
50
  #
59
51
  # You can specify which providers you want to use in your application
@@ -14,6 +14,10 @@ class CreateUsers < ActiveRecord::Migration
14
14
 
15
15
  # For password
16
16
  t.string :password_digest
17
+
18
+ # For reseting password
19
+ t.string :password_reset_token
20
+ t.datetime :password_reset_sent_at
17
21
 
18
22
  # Extending with your own data for user
19
23
  # here
@@ -11,7 +11,7 @@ describe Authorizme do
11
11
  end
12
12
 
13
13
  it "get default from configs" do
14
- Authorizme.remote.should == false
14
+ Authorizme.draugiem_api_path.should == "http://api.draugiem.lv/json/"
15
15
  end
16
16
  end
17
17
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: authorizme
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-07-04 00:00:00.000000000 Z
13
+ date: 2013-02-12 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rake
17
- requirement: &69879460 !ruby/object:Gem::Requirement
17
+ requirement: !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,15 @@ dependencies:
22
22
  version: '0'
23
23
  type: :development
24
24
  prerelease: false
25
- version_requirements: *69879460
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ! '>='
29
+ - !ruby/object:Gem::Version
30
+ version: '0'
26
31
  - !ruby/object:Gem::Dependency
27
32
  name: rspec
28
- requirement: &69878780 !ruby/object:Gem::Requirement
33
+ requirement: !ruby/object:Gem::Requirement
29
34
  none: false
30
35
  requirements:
31
36
  - - ! '>='
@@ -33,10 +38,15 @@ dependencies:
33
38
  version: '0'
34
39
  type: :development
35
40
  prerelease: false
36
- version_requirements: *69878780
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
37
47
  - !ruby/object:Gem::Dependency
38
48
  name: rspec-rails
39
- requirement: &69878130 !ruby/object:Gem::Requirement
49
+ requirement: !ruby/object:Gem::Requirement
40
50
  none: false
41
51
  requirements:
42
52
  - - ! '>='
@@ -44,10 +54,15 @@ dependencies:
44
54
  version: '0'
45
55
  type: :development
46
56
  prerelease: false
47
- version_requirements: *69878130
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
48
63
  - !ruby/object:Gem::Dependency
49
64
  name: webrat
50
- requirement: &69877790 !ruby/object:Gem::Requirement
65
+ requirement: !ruby/object:Gem::Requirement
51
66
  none: false
52
67
  requirements:
53
68
  - - ! '>='
@@ -55,10 +70,15 @@ dependencies:
55
70
  version: '0'
56
71
  type: :development
57
72
  prerelease: false
58
- version_requirements: *69877790
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
59
79
  - !ruby/object:Gem::Dependency
60
80
  name: capybara
61
- requirement: &69876630 !ruby/object:Gem::Requirement
81
+ requirement: !ruby/object:Gem::Requirement
62
82
  none: false
63
83
  requirements:
64
84
  - - ! '>='
@@ -66,10 +86,15 @@ dependencies:
66
86
  version: '0'
67
87
  type: :development
68
88
  prerelease: false
69
- version_requirements: *69876630
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
70
95
  - !ruby/object:Gem::Dependency
71
96
  name: factory_girl_rails
72
- requirement: &69875590 !ruby/object:Gem::Requirement
97
+ requirement: !ruby/object:Gem::Requirement
73
98
  none: false
74
99
  requirements:
75
100
  - - ! '>='
@@ -77,10 +102,15 @@ dependencies:
77
102
  version: '0'
78
103
  type: :development
79
104
  prerelease: false
80
- version_requirements: *69875590
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
81
111
  - !ruby/object:Gem::Dependency
82
- name: activesupport
83
- requirement: &69875130 !ruby/object:Gem::Requirement
112
+ name: rails
113
+ requirement: !ruby/object:Gem::Requirement
84
114
  none: false
85
115
  requirements:
86
116
  - - ! '>='
@@ -88,10 +118,15 @@ dependencies:
88
118
  version: '0'
89
119
  type: :runtime
90
120
  prerelease: false
91
- version_requirements: *69875130
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ none: false
123
+ requirements:
124
+ - - ! '>='
125
+ - !ruby/object:Gem::Version
126
+ version: '0'
92
127
  - !ruby/object:Gem::Dependency
93
- name: rails
94
- requirement: &69874540 !ruby/object:Gem::Requirement
128
+ name: activesupport
129
+ requirement: !ruby/object:Gem::Requirement
95
130
  none: false
96
131
  requirements:
97
132
  - - ! '>='
@@ -99,10 +134,15 @@ dependencies:
99
134
  version: '0'
100
135
  type: :runtime
101
136
  prerelease: false
102
- version_requirements: *69874540
137
+ version_requirements: !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
140
+ - - ! '>='
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
103
143
  - !ruby/object:Gem::Dependency
104
144
  name: bcrypt-ruby
105
- requirement: &69873470 !ruby/object:Gem::Requirement
145
+ requirement: !ruby/object:Gem::Requirement
106
146
  none: false
107
147
  requirements:
108
148
  - - ! '>='
@@ -110,10 +150,15 @@ dependencies:
110
150
  version: '0'
111
151
  type: :runtime
112
152
  prerelease: false
113
- version_requirements: *69873470
153
+ version_requirements: !ruby/object:Gem::Requirement
154
+ none: false
155
+ requirements:
156
+ - - ! '>='
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
114
159
  - !ruby/object:Gem::Dependency
115
160
  name: json
116
- requirement: &72309460 !ruby/object:Gem::Requirement
161
+ requirement: !ruby/object:Gem::Requirement
117
162
  none: false
118
163
  requirements:
119
164
  - - ! '>='
@@ -121,10 +166,15 @@ dependencies:
121
166
  version: '0'
122
167
  type: :runtime
123
168
  prerelease: false
124
- version_requirements: *72309460
169
+ version_requirements: !ruby/object:Gem::Requirement
170
+ none: false
171
+ requirements:
172
+ - - ! '>='
173
+ - !ruby/object:Gem::Version
174
+ version: '0'
125
175
  - !ruby/object:Gem::Dependency
126
176
  name: twitter_oauth
127
- requirement: &72309250 !ruby/object:Gem::Requirement
177
+ requirement: !ruby/object:Gem::Requirement
128
178
  none: false
129
179
  requirements:
130
180
  - - ! '>='
@@ -132,10 +182,15 @@ dependencies:
132
182
  version: '0'
133
183
  type: :runtime
134
184
  prerelease: false
135
- version_requirements: *72309250
185
+ version_requirements: !ruby/object:Gem::Requirement
186
+ none: false
187
+ requirements:
188
+ - - ! '>='
189
+ - !ruby/object:Gem::Version
190
+ version: '0'
136
191
  - !ruby/object:Gem::Dependency
137
192
  name: twitter
138
- requirement: &72309040 !ruby/object:Gem::Requirement
193
+ requirement: !ruby/object:Gem::Requirement
139
194
  none: false
140
195
  requirements:
141
196
  - - ! '>='
@@ -143,10 +198,15 @@ dependencies:
143
198
  version: '0'
144
199
  type: :runtime
145
200
  prerelease: false
146
- version_requirements: *72309040
201
+ version_requirements: !ruby/object:Gem::Requirement
202
+ none: false
203
+ requirements:
204
+ - - ! '>='
205
+ - !ruby/object:Gem::Version
206
+ version: '0'
147
207
  - !ruby/object:Gem::Dependency
148
208
  name: oauth2
149
- requirement: &72308830 !ruby/object:Gem::Requirement
209
+ requirement: !ruby/object:Gem::Requirement
150
210
  none: false
151
211
  requirements:
152
212
  - - ! '>='
@@ -154,10 +214,15 @@ dependencies:
154
214
  version: '0'
155
215
  type: :runtime
156
216
  prerelease: false
157
- version_requirements: *72308830
217
+ version_requirements: !ruby/object:Gem::Requirement
218
+ none: false
219
+ requirements:
220
+ - - ! '>='
221
+ - !ruby/object:Gem::Version
222
+ version: '0'
158
223
  - !ruby/object:Gem::Dependency
159
224
  name: fbgraph
160
- requirement: &72308620 !ruby/object:Gem::Requirement
225
+ requirement: !ruby/object:Gem::Requirement
161
226
  none: false
162
227
  requirements:
163
228
  - - ! '>='
@@ -165,7 +230,12 @@ dependencies:
165
230
  version: '0'
166
231
  type: :runtime
167
232
  prerelease: false
168
- version_requirements: *72308620
233
+ version_requirements: !ruby/object:Gem::Requirement
234
+ none: false
235
+ requirements:
236
+ - - ! '>='
237
+ - !ruby/object:Gem::Version
238
+ version: '0'
169
239
  description: Authorization that includes basic authorization and 3 social authorization
170
240
  with Latvia social network draugiem.lv, facebook.com and twitter.com.
171
241
  email:
@@ -174,7 +244,6 @@ executables: []
174
244
  extensions: []
175
245
  extra_rdoc_files: []
176
246
  files:
177
- - .DS_Store
178
247
  - .gitignore
179
248
  - .rspec
180
249
  - .rvmrc
@@ -187,6 +256,7 @@ files:
187
256
  - app/controllers/authorizme/login/draugiem_controller.rb
188
257
  - app/controllers/authorizme/login/facebook_controller.rb
189
258
  - app/controllers/authorizme/login/twitter_controller.rb
259
+ - app/controllers/authorizme/password_resets_controller.rb
190
260
  - app/controllers/authorizme/sessions_controller.rb
191
261
  - app/controllers/authorizme/users_controller.rb
192
262
  - app/models/authorizme/synchronize_request.rb
@@ -197,10 +267,20 @@ files:
197
267
  - app/views/authorizme/layouts/authorizme.html.erb
198
268
  - app/views/authorizme/layouts/popup.html.erb
199
269
  - app/views/authorizme/login/facebook/auth.html.erb
270
+ - app/views/authorizme/password_resets/edit.html.erb
271
+ - app/views/authorizme/password_resets/new.html.erb
200
272
  - app/views/authorizme/users/new.html.erb
201
273
  - authorizme.gemspec
274
+ - config/.DS_Store
275
+ - config/locales/authorizme.en.yml
276
+ - config/locales/authorizme.et.yml
277
+ - config/locales/authorizme.lv.yml
202
278
  - config/routes.rb
203
- - lib/.DS_Store
279
+ - lib/assets/stylesheets/authorizme.css
280
+ - lib/assets/stylesheets/authorizme/button.css.scss
281
+ - lib/assets/stylesheets/authorizme/form.css.scss
282
+ - lib/assets/stylesheets/authorizme/main.css.scss
283
+ - lib/assets/stylesheets/authorizme/popup.css.scss
204
284
  - lib/authorizme.rb
205
285
  - lib/authorizme/.DS_Store
206
286
  - lib/authorizme/acts_as_authorizme.rb
@@ -237,17 +317,27 @@ required_ruby_version: !ruby/object:Gem::Requirement
237
317
  - - ! '>='
238
318
  - !ruby/object:Gem::Version
239
319
  version: '0'
320
+ segments:
321
+ - 0
322
+ hash: -3990726868024022512
240
323
  required_rubygems_version: !ruby/object:Gem::Requirement
241
324
  none: false
242
325
  requirements:
243
326
  - - ! '>='
244
327
  - !ruby/object:Gem::Version
245
328
  version: '0'
329
+ segments:
330
+ - 0
331
+ hash: -3990726868024022512
246
332
  requirements: []
247
333
  rubyforge_project: authorizme
248
- rubygems_version: 1.8.15
334
+ rubygems_version: 1.8.25
249
335
  signing_key:
250
336
  specification_version: 3
251
337
  summary: ! 'Simple authorization gem for basic and Oauth: facebook.com, twitter.com
252
338
  and draugiem.lv'
253
- test_files: []
339
+ test_files:
340
+ - spec/authorizme/providers/draugiem_spec.rb
341
+ - spec/authorizme_spec.rb
342
+ - spec/factories.rb
343
+ - spec/spec_helper.rb
data/.DS_Store DELETED
Binary file