foodcoops/foodsoft

View on GitHub
plugins/discourse/app/controllers/discourse_sso_controller.rb

Summary

Maintainability
A
35 mins
Test Coverage
class DiscourseSsoController < DiscourseController
  before_action -> { require_config_enabled :discourse_sso }

  def sso
    raise I18n.t('discourse.sso.invalid_signature') unless valid_signature?

    payload = parse_payload
    nonce = payload[:nonce]
    return_sso_url = payload[:return_sso_url] || "#{discourse_url}/session/sso_login"

    raise I18n.t('discourse.sso.nonce_missing') if nonce.blank?

    redirect_to_with_payload return_sso_url,
                             nonce: nonce,
                             email: current_user.email,
                             require_activation: true,
                             external_id: "#{FoodsoftConfig.scope}/#{current_user.id}",
                             username: current_user.nick,
                             name: current_user.name
  rescue StandardError => e
    redirect_to root_url, alert: e.to_s
  end
end