From 217fa9a57c5a3cd2920e1db9facaeb8396cab82a Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Thu, 7 Jan 2016 19:01:09 +1100 Subject: [PATCH] UI integration of Discourse login --- app/controllers/discourse_sso_controller.rb | 25 +++++++++++++++++---- app/helpers/discourse_helper.rb | 25 +++++++++++++++++++++ app/views/shared/_signed_in.html.haml | 6 +++++ config/application.yml.example | 2 +- config/locales/en.yml | 1 + config/routes.rb | 3 ++- 6 files changed, 56 insertions(+), 6 deletions(-) create mode 100644 app/helpers/discourse_helper.rb diff --git a/app/controllers/discourse_sso_controller.rb b/app/controllers/discourse_sso_controller.rb index 1aa18969e7..0b067f6c92 100644 --- a/app/controllers/discourse_sso_controller.rb +++ b/app/controllers/discourse_sso_controller.rb @@ -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 diff --git a/app/helpers/discourse_helper.rb b/app/helpers/discourse_helper.rb new file mode 100644 index 0000000000..1d813cf404 --- /dev/null +++ b/app/helpers/discourse_helper.rb @@ -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 diff --git a/app/views/shared/_signed_in.html.haml b/app/views/shared/_signed_in.html.haml index c3a1bd8cc8..3126913ca0 100644 --- a/app/views/shared/_signed_in.html.haml +++ b/app/views/shared/_signed_in.html.haml @@ -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: "#"} diff --git a/config/application.yml.example b/config/application.yml.example index b76e8d2936..8b72a2011d 100644 --- a/config/application.yml.example +++ b/config/application.yml.example @@ -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" diff --git a/config/locales/en.yml b/config/locales/en.yml index 04d350153b..062c4c2a29 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -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" diff --git a/config/routes.rb b/config/routes.rb index 229357276f..a5ceb35874 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -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