From 48031dde29d6dc4a0ba84c445ae4c07627257d4a Mon Sep 17 00:00:00 2001 From: hellekin Date: Mon, 5 Oct 2020 21:51:37 +0200 Subject: Configure Discourse SSO We're creating a minimal User model that will be filled from SSO. We also configure Inflections so we can use SSO instead of Sso which looks weird for a module named after an acronym. Use Discourse as SSO: https://meta.discourse.org/t/using-discourse-as-a-sso-provider/32974 --- app/lib/sso.rb | 2 ++ app/lib/sso/from_discourse.rb | 3 ++- app/models/user.rb | 4 ++++ config/initializers/inflections.rb | 6 ++++++ config/initializers/session_store.rb | 6 ++++++ config/initializers/sso_config.rb | 2 ++ db/migrate/20201005154823_create_users.rb | 15 +++++++++++++++ 7 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 app/models/user.rb create mode 100644 config/initializers/session_store.rb create mode 100644 db/migrate/20201005154823_create_users.rb diff --git a/app/lib/sso.rb b/app/lib/sso.rb index ace2830..0939a7c 100644 --- a/app/lib/sso.rb +++ b/app/lib/sso.rb @@ -5,3 +5,5 @@ module SSO require 'securerandom' require_relative '../../config/initializers/sso_config' end + + diff --git a/app/lib/sso/from_discourse.rb b/app/lib/sso/from_discourse.rb index 66742e2..a5df192 100644 --- a/app/lib/sso/from_discourse.rb +++ b/app/lib/sso/from_discourse.rb @@ -2,7 +2,8 @@ module SSO class FromDiscourse - attr_accessor :nonce, :token, :user_info, :status + attr_accessor :nonce, :token + attr_reader :request_uri, :user_info, :status class << self # See config/initializers/sso.rb diff --git a/app/models/user.rb b/app/models/user.rb new file mode 100644 index 0000000..f7e96a8 --- /dev/null +++ b/app/models/user.rb @@ -0,0 +1,4 @@ +class User < ApplicationRecord + has_many :agencies + has_many :agents, through: :agencies, source: :agent +end diff --git a/config/initializers/inflections.rb b/config/initializers/inflections.rb index ac033bf..13e8739 100644 --- a/config/initializers/inflections.rb +++ b/config/initializers/inflections.rb @@ -14,3 +14,9 @@ # ActiveSupport::Inflector.inflections(:en) do |inflect| # inflect.acronym 'RESTful' # end + +ActiveSupport::Inflector.inflections do |inflect| + inflect.irregular 'human', 'humans' + inflect.acronym 'API' + inflect.acronym 'SSO' +end diff --git a/config/initializers/session_store.rb b/config/initializers/session_store.rb new file mode 100644 index 0000000..4af1519 --- /dev/null +++ b/config/initializers/session_store.rb @@ -0,0 +1,6 @@ +if Rails.env.production? + # Only serve session cookies over HTTPS + Rails.application.config.session_store :cookie_store, key: 'map_session', expire_after: 7.days, httponly: true, secure: true +else + Rails.application.config.session_store :cookie_store, key: 'map_session', expire_after: 7.days +end diff --git a/config/initializers/sso_config.rb b/config/initializers/sso_config.rb index b3f23f7..f5413ff 100644 --- a/config/initializers/sso_config.rb +++ b/config/initializers/sso_config.rb @@ -9,6 +9,8 @@ # end # end +require 'sso/from_discourse' + SSO::FromDiscourse.config = { sso_url: 'https://talk.incommon.cc/session/sso_provider', return_url: "http://localhost:3000/authenticate", diff --git a/db/migrate/20201005154823_create_users.rb b/db/migrate/20201005154823_create_users.rb new file mode 100644 index 0000000..2d8403c --- /dev/null +++ b/db/migrate/20201005154823_create_users.rb @@ -0,0 +1,15 @@ +class CreateUsers < ActiveRecord::Migration[6.0] + def change + create_table :users do |t| + t.string :name + t.string :username + t.string :email + t.bigint :external_id + t.string :avatar_url + + t.timestamps + end + add_index :users, [:external_id], unique: true + add_index :users, [:email], unique: true + end +end -- cgit v1.2.3