mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-24 20:36:49 +00:00
UI integration of Discourse login
This commit is contained in:
@@ -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
|
||||
|
||||
25
app/helpers/discourse_helper.rb
Normal file
25
app/helpers/discourse_helper.rb
Normal 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
|
||||
@@ -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: "#"}
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user