Commit a64aff2f1c1ddc77b00211489d74fbc23c0c2fa2
1 parent
4ce034ca
Exists in
master
and in
4 other branches
Omniauth Support
Showing
20 changed files
with
194 additions
and
60 deletions
Show diff stats
Gemfile
| @@ -8,6 +8,10 @@ gem "mysql2" | @@ -8,6 +8,10 @@ gem "mysql2" | ||
| 8 | 8 | ||
| 9 | # Auth | 9 | # Auth |
| 10 | gem "devise", "~> 2.1.0" | 10 | gem "devise", "~> 2.1.0" |
| 11 | +gem 'omniauth' | ||
| 12 | +gem 'omniauth-google-oauth2' | ||
| 13 | +gem 'omniauth-twitter' | ||
| 14 | +gem 'omniauth-github' | ||
| 11 | 15 | ||
| 12 | # GITLAB patched libs | 16 | # GITLAB patched libs |
| 13 | gem "grit", :git => "https://github.com/gitlabhq/grit.git", :ref => "7f35cb98ff17d534a07e3ce6ec3d580f67402837" | 17 | gem "grit", :git => "https://github.com/gitlabhq/grit.git", :ref => "7f35cb98ff17d534a07e3ce6ec3d580f67402837" |
Gemfile.lock
| @@ -166,6 +166,8 @@ GEM | @@ -166,6 +166,8 @@ GEM | ||
| 166 | eventmachine (0.12.10) | 166 | eventmachine (0.12.10) |
| 167 | execjs (1.4.0) | 167 | execjs (1.4.0) |
| 168 | multi_json (~> 1.0) | 168 | multi_json (~> 1.0) |
| 169 | + faraday (0.8.1) | ||
| 170 | + multipart-post (~> 1.1) | ||
| 169 | ffaker (1.14.0) | 171 | ffaker (1.14.0) |
| 170 | ffi (1.0.11) | 172 | ffi (1.0.11) |
| 171 | foreman (0.47.0) | 173 | foreman (0.47.0) |
| @@ -191,6 +193,7 @@ GEM | @@ -191,6 +193,7 @@ GEM | ||
| 191 | httparty (0.8.3) | 193 | httparty (0.8.3) |
| 192 | multi_json (~> 1.0) | 194 | multi_json (~> 1.0) |
| 193 | multi_xml | 195 | multi_xml |
| 196 | + httpauth (0.1) | ||
| 194 | i18n (0.6.0) | 197 | i18n (0.6.0) |
| 195 | journey (1.0.4) | 198 | journey (1.0.4) |
| 196 | jquery-rails (2.0.2) | 199 | jquery-rails (2.0.2) |
| @@ -200,6 +203,8 @@ GEM | @@ -200,6 +203,8 @@ GEM | ||
| 200 | jquery-rails | 203 | jquery-rails |
| 201 | railties (>= 3.1.0) | 204 | railties (>= 3.1.0) |
| 202 | json (1.7.4) | 205 | json (1.7.4) |
| 206 | + jwt (0.1.5) | ||
| 207 | + multi_json (>= 1.0) | ||
| 203 | kaminari (0.13.0) | 208 | kaminari (0.13.0) |
| 204 | actionpack (>= 3.0.0) | 209 | actionpack (>= 3.0.0) |
| 205 | activesupport (>= 3.0.0) | 210 | activesupport (>= 3.0.0) |
| @@ -223,12 +228,35 @@ GEM | @@ -223,12 +228,35 @@ GEM | ||
| 223 | sprockets (~> 2.0) | 228 | sprockets (~> 2.0) |
| 224 | multi_json (1.3.6) | 229 | multi_json (1.3.6) |
| 225 | multi_xml (0.5.1) | 230 | multi_xml (0.5.1) |
| 231 | + multipart-post (1.1.5) | ||
| 226 | mysql2 (0.3.11) | 232 | mysql2 (0.3.11) |
| 227 | net-ldap (0.2.2) | 233 | net-ldap (0.2.2) |
| 228 | nokogiri (1.5.3) | 234 | nokogiri (1.5.3) |
| 235 | + oauth (0.4.6) | ||
| 236 | + oauth2 (0.8.0) | ||
| 237 | + faraday (~> 0.8) | ||
| 238 | + httpauth (~> 0.1) | ||
| 239 | + jwt (~> 0.1.4) | ||
| 240 | + multi_json (~> 1.0) | ||
| 241 | + rack (~> 1.2) | ||
| 229 | omniauth (1.1.0) | 242 | omniauth (1.1.0) |
| 230 | hashie (~> 1.2) | 243 | hashie (~> 1.2) |
| 231 | rack | 244 | rack |
| 245 | + omniauth-github (1.0.1) | ||
| 246 | + omniauth (~> 1.0) | ||
| 247 | + omniauth-oauth2 (~> 1.0) | ||
| 248 | + omniauth-google-oauth2 (0.1.13) | ||
| 249 | + omniauth (~> 1.0) | ||
| 250 | + omniauth-oauth2 | ||
| 251 | + omniauth-oauth (1.0.1) | ||
| 252 | + oauth | ||
| 253 | + omniauth (~> 1.0) | ||
| 254 | + omniauth-oauth2 (1.1.0) | ||
| 255 | + oauth2 (~> 0.8.0) | ||
| 256 | + omniauth (~> 1.0) | ||
| 257 | + omniauth-twitter (0.0.12) | ||
| 258 | + multi_json (~> 1.3) | ||
| 259 | + omniauth-oauth (~> 1.0) | ||
| 232 | orm_adapter (0.3.0) | 260 | orm_adapter (0.3.0) |
| 233 | polyglot (0.3.3) | 261 | polyglot (0.3.3) |
| 234 | posix-spawn (0.3.6) | 262 | posix-spawn (0.3.6) |
| @@ -411,7 +439,11 @@ DEPENDENCIES | @@ -411,7 +439,11 @@ DEPENDENCIES | ||
| 411 | minitest (>= 2.10) | 439 | minitest (>= 2.10) |
| 412 | modernizr (= 2.5.3) | 440 | modernizr (= 2.5.3) |
| 413 | mysql2 | 441 | mysql2 |
| 442 | + omniauth | ||
| 443 | + omniauth-github | ||
| 444 | + omniauth-google-oauth2 | ||
| 414 | omniauth-ldap! | 445 | omniauth-ldap! |
| 446 | + omniauth-twitter | ||
| 415 | pry | 447 | pry |
| 416 | pygments.rb! | 448 | pygments.rb! |
| 417 | rack-mini-profiler | 449 | rack-mini-profiler |
app/assets/stylesheets/main.scss
| @@ -3,8 +3,8 @@ | @@ -3,8 +3,8 @@ | ||
| 3 | 3 | ||
| 4 | /** GITLAB colors **/ | 4 | /** GITLAB colors **/ |
| 5 | $text_color:#222; | 5 | $text_color:#222; |
| 6 | -$lite_text_color: #666; | ||
| 7 | -$link_color:#2A79A3; | 6 | +$lite_text_color: #666; |
| 7 | +$link_color:#2A79A3; | ||
| 8 | $active_link_color:#2FA0BB; | 8 | $active_link_color:#2FA0BB; |
| 9 | $active_bg_color:#79C3E0; | 9 | $active_bg_color:#79C3E0; |
| 10 | $active_bd_color: #2FA0BB; | 10 | $active_bd_color: #2FA0BB; |
| @@ -31,7 +31,7 @@ $hover: #FDF5D9; | @@ -31,7 +31,7 @@ $hover: #FDF5D9; | ||
| 31 | box-shadow: 0 0 3px #ddd; | 31 | box-shadow: 0 0 3px #ddd; |
| 32 | } | 32 | } |
| 33 | 33 | ||
| 34 | -@mixin solid_shade { | 34 | +@mixin solid_shade { |
| 35 | -moz-box-shadow: 0 0 0 3px #eee; | 35 | -moz-box-shadow: 0 0 0 3px #eee; |
| 36 | -webkit-box-shadow: 0 0 0 3px #eee; | 36 | -webkit-box-shadow: 0 0 0 3px #eee; |
| 37 | box-shadow: 0 0 0 3px #eee; | 37 | box-shadow: 0 0 0 3px #eee; |
| @@ -73,21 +73,21 @@ $hover: #FDF5D9; | @@ -73,21 +73,21 @@ $hover: #FDF5D9; | ||
| 73 | 73 | ||
| 74 | 74 | ||
| 75 | /** | 75 | /** |
| 76 | - * Header of application. | 76 | + * Header of application. |
| 77 | * Contain application logo, search panel, profile icon | 77 | * Contain application logo, search panel, profile icon |
| 78 | */ | 78 | */ |
| 79 | @import "sections/header.scss"; | 79 | @import "sections/header.scss"; |
| 80 | 80 | ||
| 81 | /** | 81 | /** |
| 82 | - * Navigation menu of application. | 82 | + * Navigation menu of application. |
| 83 | * Panel with links to pages depends on project, profile or admin area | 83 | * Panel with links to pages depends on project, profile or admin area |
| 84 | */ | 84 | */ |
| 85 | @import "sections/nav.scss"; | 85 | @import "sections/nav.scss"; |
| 86 | 86 | ||
| 87 | /** | 87 | /** |
| 88 | - * This file represent some UI that can be changed | ||
| 89 | - * during web app restyle or theme select. | ||
| 90 | - * | 88 | + * This file represent some UI that can be changed |
| 89 | + * during web app restyle or theme select. | ||
| 90 | + * | ||
| 91 | * Next items should be placed there | 91 | * Next items should be placed there |
| 92 | * - link, button colors | 92 | * - link, button colors |
| 93 | * - header restyles | 93 | * - header restyles |
| @@ -118,11 +118,11 @@ $hover: #FDF5D9; | @@ -118,11 +118,11 @@ $hover: #FDF5D9; | ||
| 118 | * Most of application styles placed here. | 118 | * Most of application styles placed here. |
| 119 | * This file represent common UI that should not be changed between themes | 119 | * This file represent common UI that should not be changed between themes |
| 120 | * or project restyling like form width or user avatar class or commit title | 120 | * or project restyling like form width or user avatar class or commit title |
| 121 | - * | 121 | + * |
| 122 | * TODO: clean it | 122 | * TODO: clean it |
| 123 | */ | 123 | */ |
| 124 | @import "common.scss"; | 124 | @import "common.scss"; |
| 125 | - | 125 | +@import "auth_methods.scss"; |
| 126 | 126 | ||
| 127 | /** | 127 | /** |
| 128 | * Styles related to specific part of app | 128 | * Styles related to specific part of app |
| @@ -140,17 +140,17 @@ $hover: #FDF5D9; | @@ -140,17 +140,17 @@ $hover: #FDF5D9; | ||
| 140 | @import "ref_select.scss"; | 140 | @import "ref_select.scss"; |
| 141 | 141 | ||
| 142 | /** | 142 | /** |
| 143 | - * Code (files list) styles. Browsing project files there | 143 | + * Code (files list) styles. Browsing project files there |
| 144 | */ | 144 | */ |
| 145 | @import "sections/tree.scss"; | 145 | @import "sections/tree.scss"; |
| 146 | 146 | ||
| 147 | /** | 147 | /** |
| 148 | - * This file represent notes(comments) styles | 148 | + * This file represent notes(comments) styles |
| 149 | */ | 149 | */ |
| 150 | @import "sections/notes.scss"; | 150 | @import "sections/notes.scss"; |
| 151 | 151 | ||
| 152 | /** | 152 | /** |
| 153 | - * Devise styles | 153 | + * Devise styles |
| 154 | */ | 154 | */ |
| 155 | @import "sections/login.scss"; | 155 | @import "sections/login.scss"; |
| 156 | 156 |
app/controllers/omniauth_callbacks_controller.rb
| @@ -9,7 +9,7 @@ class OmniauthCallbacksController < Devise::OmniauthCallbacksController | @@ -9,7 +9,7 @@ class OmniauthCallbacksController < Devise::OmniauthCallbacksController | ||
| 9 | error ||= env["omniauth.error.type"].to_s | 9 | error ||= env["omniauth.error.type"].to_s |
| 10 | error.to_s.humanize if error | 10 | error.to_s.humanize if error |
| 11 | end | 11 | end |
| 12 | - | 12 | + |
| 13 | def ldap | 13 | def ldap |
| 14 | # We only find ourselves here if the authentication to LDAP was successful. | 14 | # We only find ourselves here if the authentication to LDAP was successful. |
| 15 | info = request.env["omniauth.auth"]["info"] | 15 | info = request.env["omniauth.auth"]["info"] |
| @@ -20,4 +20,34 @@ class OmniauthCallbacksController < Devise::OmniauthCallbacksController | @@ -20,4 +20,34 @@ class OmniauthCallbacksController < Devise::OmniauthCallbacksController | ||
| 20 | sign_in_and_redirect @user | 20 | sign_in_and_redirect @user |
| 21 | end | 21 | end |
| 22 | 22 | ||
| 23 | + Settings.omniauth_providers.each do |provider| | ||
| 24 | + define_method provider['name'] do | ||
| 25 | + handle_omniauth | ||
| 26 | + end | ||
| 27 | + end | ||
| 28 | + | ||
| 29 | + private | ||
| 30 | + | ||
| 31 | + def handle_omniauth | ||
| 32 | + oauth = request.env['omniauth.auth'] | ||
| 33 | + provider, uid = oauth['provider'], oauth['uid'] | ||
| 34 | + | ||
| 35 | + if current_user | ||
| 36 | + # Change a logged-in user's authentication method: | ||
| 37 | + current_user.uid = uid | ||
| 38 | + current_user.provider = provider | ||
| 39 | + current_user.save | ||
| 40 | + redirect_to profile_path | ||
| 41 | + else | ||
| 42 | + @user = User.find_by_provider_and_uid(provider, uid) | ||
| 43 | + | ||
| 44 | + if @user | ||
| 45 | + sign_in_and_redirect @user | ||
| 46 | + else | ||
| 47 | + flash[:notice] = "There's no such user!" | ||
| 48 | + redirect_to new_user_session_path | ||
| 49 | + end | ||
| 50 | + end | ||
| 51 | + end | ||
| 52 | + | ||
| 23 | end | 53 | end |
app/helpers/application_helper.rb
| @@ -75,16 +75,16 @@ module ApplicationHelper | @@ -75,16 +75,16 @@ module ApplicationHelper | ||
| 75 | end | 75 | end |
| 76 | 76 | ||
| 77 | def show_last_push_widget?(event) | 77 | def show_last_push_widget?(event) |
| 78 | - event && | 78 | + event && |
| 79 | event.last_push_to_non_root? && | 79 | event.last_push_to_non_root? && |
| 80 | !event.rm_ref? && | 80 | !event.rm_ref? && |
| 81 | - event.project && | 81 | + event.project && |
| 82 | event.project.merge_requests_enabled | 82 | event.project.merge_requests_enabled |
| 83 | end | 83 | end |
| 84 | 84 | ||
| 85 | def tab_class(tab_key) | 85 | def tab_class(tab_key) |
| 86 | active = case tab_key | 86 | active = case tab_key |
| 87 | - | 87 | + |
| 88 | # Project Area | 88 | # Project Area |
| 89 | when :wall; wall_tab? | 89 | when :wall; wall_tab? |
| 90 | when :wiki; controller.controller_name == "wikis" | 90 | when :wiki; controller.controller_name == "wikis" |
| @@ -123,4 +123,9 @@ module ApplicationHelper | @@ -123,4 +123,9 @@ module ApplicationHelper | ||
| 123 | def hexdigest(string) | 123 | def hexdigest(string) |
| 124 | Digest::SHA1.hexdigest string | 124 | Digest::SHA1.hexdigest string |
| 125 | end | 125 | end |
| 126 | + | ||
| 127 | + def authbutton(provider, size = 64) | ||
| 128 | + image_tag("authbuttons/#{provider.to_s.split('_').first}_#{size}.png", | ||
| 129 | + alt: "Sign in with #{provider.to_s.titleize}" ) | ||
| 130 | + end | ||
| 126 | end | 131 | end |
app/views/devise/sessions/new.html.erb
| @@ -14,10 +14,15 @@ | @@ -14,10 +14,15 @@ | ||
| 14 | <div class="right"> <%= render :partial => "devise/shared/links" %></div> | 14 | <div class="right"> <%= render :partial => "devise/shared/links" %></div> |
| 15 | 15 | ||
| 16 | <%- if devise_mapping.omniauthable? %> | 16 | <%- if devise_mapping.omniauthable? %> |
| 17 | - <%- resource_class.omniauth_providers.each do |provider| %> | ||
| 18 | - <hr/> | ||
| 19 | - <%= link_to "Sign in with #{provider.to_s.titleize}", omniauth_authorize_path(resource_name, provider), :class => "btn primary" %><br /> | ||
| 20 | - <% end -%> | 17 | + <hr/> |
| 18 | + <div class="auth_methods"> | ||
| 19 | + <ul> | ||
| 20 | + <%- resource_class.omniauth_providers.each do |provider| %> | ||
| 21 | + <li><%= link_to authbutton(provider), | ||
| 22 | + omniauth_authorize_path(resource_name, provider) %></li> | ||
| 23 | + <% end -%> | ||
| 24 | + </ul> | ||
| 25 | + </div> | ||
| 21 | <% end -%> | 26 | <% end -%> |
| 22 | 27 | ||
| 23 | <% end %> | 28 | <% end %> |
app/views/layouts/profile.html.haml
| @@ -10,7 +10,7 @@ | @@ -10,7 +10,7 @@ | ||
| 10 | = link_to "Profile", profile_path | 10 | = link_to "Profile", profile_path |
| 11 | 11 | ||
| 12 | %li{class: tab_class(:password)} | 12 | %li{class: tab_class(:password)} |
| 13 | - = link_to "Password", profile_password_path | 13 | + = link_to "Authentication", profile_password_path |
| 14 | 14 | ||
| 15 | %li{class: tab_class(:ssh_keys)} | 15 | %li{class: tab_class(:ssh_keys)} |
| 16 | = link_to keys_path do | 16 | = link_to keys_path do |
app/views/profile/password.html.haml
| 1 | %h3.page_title Password | 1 | %h3.page_title Password |
| 2 | %hr | 2 | %hr |
| 3 | + | ||
| 3 | = form_for @user, url: profile_password_path, method: :put do |f| | 4 | = form_for @user, url: profile_password_path, method: :put do |f| |
| 4 | - .data | ||
| 5 | - %p.slead After successful password update you will be redirected to login page where you should login with new password | ||
| 6 | - -if @user.errors.any? | ||
| 7 | - .alert-message.block-message.error | ||
| 8 | - %ul | ||
| 9 | - - @user.errors.full_messages.each do |msg| | ||
| 10 | - %li= msg | 5 | + .row |
| 6 | + .span7 | ||
| 7 | + .data | ||
| 8 | + %p.slead After successful password update you will be redirected to login page where you should login with new password | ||
| 9 | + -if @user.errors.any? | ||
| 10 | + .alert-message.block-message.error | ||
| 11 | + %ul | ||
| 12 | + - @user.errors.full_messages.each do |msg| | ||
| 13 | + %li= msg | ||
| 14 | + | ||
| 15 | + .clearfix | ||
| 16 | + = f.label :password | ||
| 17 | + .input= f.password_field :password | ||
| 18 | + .clearfix | ||
| 19 | + = f.label :password_confirmation | ||
| 20 | + .input= f.password_field :password_confirmation | ||
| 11 | 21 | ||
| 12 | - .clearfix | ||
| 13 | - = f.label :password | ||
| 14 | - .input= f.password_field :password | ||
| 15 | - .clearfix | ||
| 16 | - = f.label :password_confirmation | ||
| 17 | - .input= f.password_field :password_confirmation | 22 | + - if Settings.omniauth.enabled |
| 23 | + .span5.right | ||
| 24 | + .auth_methods.alert.alert-info | ||
| 25 | + %strong Tip: Use one of the following sites to login | ||
| 26 | + %ul | ||
| 27 | + - User.omniauth_providers.each do |provider| | ||
| 28 | + %li= link_to authbutton(provider), | | ||
| 29 | + omniauth_authorize_path(User, provider) | | ||
| 18 | .actions | 30 | .actions |
| 19 | = f.submit 'Save', class: "btn primary" | 31 | = f.submit 'Save', class: "btn primary" |
app/views/profile/show.html.haml
| @@ -49,6 +49,13 @@ | @@ -49,6 +49,13 @@ | ||
| 49 | %strong Tip: | 49 | %strong Tip: |
| 50 | You can change your avatar at gravatar.com | 50 | You can change your avatar at gravatar.com |
| 51 | 51 | ||
| 52 | + - if Settings.omniauth.enabled && @user.provider? | ||
| 53 | + %h4 | ||
| 54 | + Omniauth Providers: | ||
| 55 | + = link_to "Change", profile_password_path, class: "btn small right" | ||
| 56 | + You can login through #{@user.provider.titleize}! | ||
| 57 | + = authbutton(@user.provider, 32) | ||
| 58 | + | ||
| 52 | %h4 | 59 | %h4 |
| 53 | Personal projects: | 60 | Personal projects: |
| 54 | %small.right | 61 | %small.right |
config/gitlab.yml.example
| 1 | -# # # # # # # # # # # # # # # # # # | 1 | +# # # # # # # # # # # # # # # # # # |
| 2 | # Gitlab application config file # | 2 | # Gitlab application config file # |
| 3 | # # # # # # # # # # # # # # # # # # | 3 | # # # # # # # # # # # # # # # # # # |
| 4 | 4 | ||
| @@ -19,14 +19,14 @@ email: | @@ -19,14 +19,14 @@ email: | ||
| 19 | 19 | ||
| 20 | # Application specific settings | 20 | # Application specific settings |
| 21 | # Like default project limit for user etc | 21 | # Like default project limit for user etc |
| 22 | -app: | ||
| 23 | - default_projects_limit: 10 | 22 | +app: |
| 23 | + default_projects_limit: 10 | ||
| 24 | # backup_path: "/vol/backups" # default: Rails.root + backups/ | 24 | # backup_path: "/vol/backups" # default: Rails.root + backups/ |
| 25 | # backup_keep_time: 604800 # default: 0 (forever) (in seconds) | 25 | # backup_keep_time: 604800 # default: 0 (forever) (in seconds) |
| 26 | 26 | ||
| 27 | 27 | ||
| 28 | -# | ||
| 29 | -# 2. Advanced settings: | 28 | +# |
| 29 | +# 2. Advanced settings: | ||
| 30 | # ========================== | 30 | # ========================== |
| 31 | 31 | ||
| 32 | # Git Hosting configuration | 32 | # Git Hosting configuration |
| @@ -49,3 +49,15 @@ git: | @@ -49,3 +49,15 @@ git: | ||
| 49 | git_max_size: 5242880 # 5.megabytes | 49 | git_max_size: 5242880 # 5.megabytes |
| 50 | # Git timeout to read commit, in seconds | 50 | # Git timeout to read commit, in seconds |
| 51 | git_timeout: 10 | 51 | git_timeout: 10 |
| 52 | + | ||
| 53 | +# Omniauth configuration | ||
| 54 | +# omniauth: | ||
| 55 | +# enabled: true | ||
| 56 | +# providers: | ||
| 57 | +# - { name: 'google_oauth2', app_id: 'YOUR APP ID', | ||
| 58 | +# app_secret: 'YOUR APP SECRET', | ||
| 59 | +# args: { access_type: 'offline', approval_prompt: '' } } | ||
| 60 | +# - { name: 'twitter', app_id: 'YOUR APP ID', | ||
| 61 | +# app_secret: 'YOUR APP SECRET'} | ||
| 62 | +# - { name: 'github', app_id: 'YOUR APP ID', | ||
| 63 | +# app_secret: 'YOUR APP SECRET' } |
config/initializers/1_settings.rb
| @@ -6,7 +6,7 @@ class Settings < Settingslogic | @@ -6,7 +6,7 @@ class Settings < Settingslogic | ||
| 6 | self.web['protocol'] ||= web.https ? "https" : "http" | 6 | self.web['protocol'] ||= web.https ? "https" : "http" |
| 7 | end | 7 | end |
| 8 | 8 | ||
| 9 | - def web_host | 9 | + def web_host |
| 10 | self.web['host'] ||= 'localhost' | 10 | self.web['host'] ||= 'localhost' |
| 11 | end | 11 | end |
| 12 | 12 | ||
| @@ -14,11 +14,11 @@ class Settings < Settingslogic | @@ -14,11 +14,11 @@ class Settings < Settingslogic | ||
| 14 | self.email['from'] ||= ("notify@" + web_host) | 14 | self.email['from'] ||= ("notify@" + web_host) |
| 15 | end | 15 | end |
| 16 | 16 | ||
| 17 | - def url | 17 | + def url |
| 18 | self['url'] ||= build_url | 18 | self['url'] ||= build_url |
| 19 | - end | 19 | + end |
| 20 | 20 | ||
| 21 | - def web_port | 21 | + def web_port |
| 22 | if web.https | 22 | if web.https |
| 23 | web['port'] = 443 | 23 | web['port'] = 443 |
| 24 | else | 24 | else |
| @@ -36,7 +36,7 @@ class Settings < Settingslogic | @@ -36,7 +36,7 @@ class Settings < Settingslogic | ||
| 36 | raw_url << web_host | 36 | raw_url << web_host |
| 37 | 37 | ||
| 38 | if web_custom_port? | 38 | if web_custom_port? |
| 39 | - raw_url << ":#{web_port}" | 39 | + raw_url << ":#{web_port}" |
| 40 | end | 40 | end |
| 41 | 41 | ||
| 42 | raw_url | 42 | raw_url |
| @@ -111,5 +111,14 @@ class Settings < Settingslogic | @@ -111,5 +111,14 @@ class Settings < Settingslogic | ||
| 111 | def backup_keep_time | 111 | def backup_keep_time |
| 112 | app['backup_keep_time'] || 0 | 112 | app['backup_keep_time'] || 0 |
| 113 | end | 113 | end |
| 114 | + | ||
| 115 | + def omniauth_enabled? | ||
| 116 | + omniauth['enabled'] || false | ||
| 117 | + end | ||
| 118 | + | ||
| 119 | + def omniauth_providers | ||
| 120 | + omniauth['providers'] || [] | ||
| 121 | + end | ||
| 122 | + | ||
| 114 | end | 123 | end |
| 115 | end | 124 | end |
db/migrate/20120803152018_add_provider_and_uid_to_users.rb
0 → 100644
db/schema.rb
| @@ -11,7 +11,7 @@ | @@ -11,7 +11,7 @@ | ||
| 11 | # | 11 | # |
| 12 | # It's strongly recommended to check this file into your version control system. | 12 | # It's strongly recommended to check this file into your version control system. |
| 13 | 13 | ||
| 14 | -ActiveRecord::Schema.define(:version => 20120712080407) do | 14 | +ActiveRecord::Schema.define(:version => 20120803152018) do |
| 15 | 15 | ||
| 16 | create_table "events", :force => true do |t| | 16 | create_table "events", :force => true do |t| |
| 17 | t.string "target_type" | 17 | t.string "target_type" |
| @@ -146,31 +146,33 @@ ActiveRecord::Schema.define(:version => 20120712080407) do | @@ -146,31 +146,33 @@ ActiveRecord::Schema.define(:version => 20120712080407) do | ||
| 146 | end | 146 | end |
| 147 | 147 | ||
| 148 | create_table "users", :force => true do |t| | 148 | create_table "users", :force => true do |t| |
| 149 | - t.string "email", :default => "", :null => false | ||
| 150 | - t.string "encrypted_password", :limit => 128, :default => "", :null => false | 149 | + t.string "email", :default => "", :null => false |
| 150 | + t.string "encrypted_password", :default => "", :null => false | ||
| 151 | t.string "reset_password_token" | 151 | t.string "reset_password_token" |
| 152 | t.datetime "reset_password_sent_at" | 152 | t.datetime "reset_password_sent_at" |
| 153 | t.datetime "remember_created_at" | 153 | t.datetime "remember_created_at" |
| 154 | - t.integer "sign_in_count", :default => 0 | 154 | + t.integer "sign_in_count", :default => 0 |
| 155 | t.datetime "current_sign_in_at" | 155 | t.datetime "current_sign_in_at" |
| 156 | t.datetime "last_sign_in_at" | 156 | t.datetime "last_sign_in_at" |
| 157 | t.string "current_sign_in_ip" | 157 | t.string "current_sign_in_ip" |
| 158 | t.string "last_sign_in_ip" | 158 | t.string "last_sign_in_ip" |
| 159 | - t.datetime "created_at", :null => false | ||
| 160 | - t.datetime "updated_at", :null => false | 159 | + t.datetime "created_at", :null => false |
| 160 | + t.datetime "updated_at", :null => false | ||
| 161 | t.string "name" | 161 | t.string "name" |
| 162 | - t.boolean "admin", :default => false, :null => false | ||
| 163 | - t.integer "projects_limit", :default => 10 | ||
| 164 | - t.string "skype", :default => "", :null => false | ||
| 165 | - t.string "linkedin", :default => "", :null => false | ||
| 166 | - t.string "twitter", :default => "", :null => false | 162 | + t.boolean "admin", :default => false, :null => false |
| 163 | + t.integer "projects_limit", :default => 10 | ||
| 164 | + t.string "skype", :default => "", :null => false | ||
| 165 | + t.string "linkedin", :default => "", :null => false | ||
| 166 | + t.string "twitter", :default => "", :null => false | ||
| 167 | t.string "authentication_token" | 167 | t.string "authentication_token" |
| 168 | - t.boolean "dark_scheme", :default => false, :null => false | ||
| 169 | - t.integer "theme_id", :default => 1, :null => false | 168 | + t.boolean "dark_scheme", :default => false, :null => false |
| 169 | + t.integer "theme_id", :default => 1, :null => false | ||
| 170 | t.string "bio" | 170 | t.string "bio" |
| 171 | - t.boolean "blocked", :default => false, :null => false | ||
| 172 | - t.integer "failed_attempts", :default => 0 | 171 | + t.boolean "blocked", :default => false, :null => false |
| 172 | + t.integer "failed_attempts", :default => 0 | ||
| 173 | t.datetime "locked_at" | 173 | t.datetime "locked_at" |
| 174 | + t.string "provider" | ||
| 175 | + t.string "uid" | ||
| 174 | end | 176 | end |
| 175 | 177 | ||
| 176 | add_index "users", ["email"], :name => "index_users_on_email", :unique => true | 178 | add_index "users", ["email"], :name => "index_users_on_email", :unique => true |
1.89 KB
4.34 KB
1.58 KB
3.37 KB
1.41 KB
3.3 KB