UI integration of Discourse login

This commit is contained in:
Maikel Linke
2016-01-07 19:01:09 +11:00
parent 030f4f63ed
commit 217fa9a57c
6 changed files with 56 additions and 6 deletions

View File

@@ -2,6 +2,17 @@ require 'discourse/single_sign_on'
class DiscourseSsoController < ApplicationController
include SharedHelper
include DiscourseHelper
before_filter :require_config
def login
if require_activation?
redirect_to discourse_url
else
redirect_to discourse_login_url
end
end
def sso
if spree_current_user
@@ -15,9 +26,11 @@ class DiscourseSsoController < ApplicationController
end
end
private
def sso_url
secret = ENV['DISCOURSE_SSO_SECRET'] or raise 'Missing SSO secret'
discourse_url = ENV['DISCOURSE_SSO_URL'] or raise 'Missing Discourse SSO login URL.'
secret = discourse_sso_secret!
discourse_url = discourse_url!
sso = Discourse::SingleSignOn.parse(request.query_string, secret)
sso.email = spree_current_user.email
sso.username = spree_current_user.login
@@ -25,7 +38,11 @@ class DiscourseSsoController < ApplicationController
sso.sso_secret = secret
sso.admin = admin_user?
sso.require_activation = require_activation?
sso.to_url(discourse_url)
sso.to_url(discourse_sso_url)
end
def require_config
raise ActionController::RoutingError.new('Not Found') unless discourse_configured?
end
def require_activation?
@@ -33,6 +50,6 @@ class DiscourseSsoController < ApplicationController
end
def email_validated?
spree_current_user.confirmed.map(&:email).include?(spree_current_user.email)
spree_current_user.enterprises.confirmed.map(&:email).include?(spree_current_user.email)
end
end

View File

@@ -0,0 +1,25 @@
module DiscourseHelper
def discourse_configured?
discourse_url.present?
end
def discourse_url
ENV['DISCOURSE_URL']
end
def discourse_login_url
discourse_url + '/login'
end
def discourse_sso_url
discourse_url + '/session/sso_login'
end
def discourse_url!
discourse_url or raise 'Missing Discourse URL'
end
def discourse_sso_secret!
ENV['DISCOURSE_SSO_SECRET'] or raise 'Missing SSO secret'
end
end

View File

@@ -1,3 +1,9 @@
- if discourse_configured?
%li
%a{href: discourse_login_path, target: '_blank'}
%span.nav-primary
= t 'label_notices'
%li.has-dropdown.not-click
%a{href: "#"}

View File

@@ -16,4 +16,4 @@ CURRENCY: AUD
# SingleSignOn login for Discourse
#DISCOURSE_SSO_SECRET: ""
#DISCOURSE_SSO_URL: "https://community.openfoodnetwork.org/session/sso_login"
#DISCOURSE_URL: "https://community.openfoodnetwork.org"

View File

@@ -111,6 +111,7 @@ en:
label_account: "Account"
label_more: "More"
label_less: "Show less"
label_notices: "Notices"
items: "items"
cart_headline: "Your shopping cart"

View File

@@ -11,7 +11,8 @@ Openfoodnetwork::Application.routes.draw do
get "/#/login", to: "home#index", as: :spree_login
get "/login", to: redirect("/#/login")
get "/sso", to: "discourse_sso#sso"
get "/discourse/login", to: "discourse_sso#login"
get "/discourse/sso", to: "discourse_sso#sso"
get "/map", to: "map#index", as: :map