SingleSignOn controller with routes and config

This commit is contained in:
Maikel Linke
2016-01-07 12:23:39 +11:00
parent 09086b8dd8
commit 030f4f63ed
4 changed files with 45 additions and 1 deletions

View File

@@ -0,0 +1,38 @@
require 'discourse/single_sign_on'
class DiscourseSsoController < ApplicationController
include SharedHelper
def sso
if spree_current_user
begin
redirect_to sso_url
rescue TypeError
render text: "Bad SingleSignOn request.", status: :bad_request
end
else
redirect_to login_path
end
end
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.'
sso = Discourse::SingleSignOn.parse(request.query_string, secret)
sso.email = spree_current_user.email
sso.username = spree_current_user.login
sso.external_id = spree_current_user.id
sso.sso_secret = secret
sso.admin = admin_user?
sso.require_activation = require_activation?
sso.to_url(discourse_url)
end
def require_activation?
!admin_user? && !email_validated?
end
def email_validated?
spree_current_user.confirmed.map(&:email).include?(spree_current_user.email)
end
end

View File

@@ -13,3 +13,7 @@ LOCALE: en
CHECKOUT_ZONE: Australia
# Find currency codes at http://en.wikipedia.org/wiki/ISO_4217.
CURRENCY: AUD
# SingleSignOn login for Discourse
#DISCOURSE_SSO_SECRET: ""
#DISCOURSE_SSO_URL: "https://community.openfoodnetwork.org/session/sso_login"

View File

@@ -11,6 +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 "/map", to: "map#index", as: :map
get "/register", to: "registration#index", as: :registration

View File

@@ -1,6 +1,6 @@
# This class is the reference implementation of a SSO provider from Discourse.
module OpenFoodNetwork
module Discourse
class SingleSignOn
ACCESSORS = [:nonce, :name, :username, :email, :avatar_url, :avatar_force_update, :require_activation,
:about_me, :external_id, :return_sso_url, :admin, :moderator, :suppress_welcome_message]