descope 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.github/workflows/ci.yaml +54 -0
- data/.gitignore +59 -0
- data/.release-please-manifest.json +3 -0
- data/.rubocop.yml +10 -0
- data/.rubocop_todo.yml +10 -0
- data/.ruby-version +1 -0
- data/CHANGELOG.md +90 -0
- data/Gemfile +22 -0
- data/Gemfile.lock +204 -0
- data/LICENSE +21 -0
- data/README.md +1171 -0
- data/Rakefile +31 -0
- data/descope.gemspec +34 -0
- data/examples/ruby/Gemfile +4 -0
- data/examples/ruby/Gemfile.lock +41 -0
- data/examples/ruby/access_key_app.rb +45 -0
- data/examples/ruby/enchantedlink_app.rb +65 -0
- data/examples/ruby/magiclink_app.rb +81 -0
- data/examples/ruby/management/Gemfile +5 -0
- data/examples/ruby/management/Gemfile.lock +38 -0
- data/examples/ruby/management/access_key_app.rb +71 -0
- data/examples/ruby/management/audit_app.rb +25 -0
- data/examples/ruby/management/authz_app.rb +135 -0
- data/examples/ruby/management/authz_files.json +229 -0
- data/examples/ruby/management/flow_app.rb +57 -0
- data/examples/ruby/management/permission_app.rb +56 -0
- data/examples/ruby/management/role_app.rb +58 -0
- data/examples/ruby/management/tenant_app.rb +60 -0
- data/examples/ruby/management/user_app.rb +60 -0
- data/examples/ruby/oauth_app.rb +39 -0
- data/examples/ruby/otp_app.rb +50 -0
- data/examples/ruby/password_app.rb +76 -0
- data/examples/ruby/saml_app.rb +38 -0
- data/examples/ruby-on-rails-api/descope/.dockerignore +37 -0
- data/examples/ruby-on-rails-api/descope/.gitattributes +9 -0
- data/examples/ruby-on-rails-api/descope/.gitignore +40 -0
- data/examples/ruby-on-rails-api/descope/.node-version +1 -0
- data/examples/ruby-on-rails-api/descope/.ruby-version +1 -0
- data/examples/ruby-on-rails-api/descope/Dockerfile +75 -0
- data/examples/ruby-on-rails-api/descope/Gemfile +67 -0
- data/examples/ruby-on-rails-api/descope/Gemfile.lock +284 -0
- data/examples/ruby-on-rails-api/descope/Procfile.dev +3 -0
- data/examples/ruby-on-rails-api/descope/README.md +54 -0
- data/examples/ruby-on-rails-api/descope/Rakefile +6 -0
- data/examples/ruby-on-rails-api/descope/app/assets/builds/.keep +0 -0
- data/examples/ruby-on-rails-api/descope/app/assets/config/manifest.js +3 -0
- data/examples/ruby-on-rails-api/descope/app/assets/images/.keep +0 -0
- data/examples/ruby-on-rails-api/descope/app/assets/images/descope.jpeg +0 -0
- data/examples/ruby-on-rails-api/descope/app/assets/images/favicon.ico +0 -0
- data/examples/ruby-on-rails-api/descope/app/assets/images/logo192.png +0 -0
- data/examples/ruby-on-rails-api/descope/app/assets/images/logo512.png +0 -0
- data/examples/ruby-on-rails-api/descope/app/assets/stylesheets/application.bootstrap.scss +67 -0
- data/examples/ruby-on-rails-api/descope/app/channels/application_cable/channel.rb +4 -0
- data/examples/ruby-on-rails-api/descope/app/channels/application_cable/connection.rb +4 -0
- data/examples/ruby-on-rails-api/descope/app/controllers/application_controller.rb +2 -0
- data/examples/ruby-on-rails-api/descope/app/controllers/concerns/.keep +0 -0
- data/examples/ruby-on-rails-api/descope/app/controllers/homepage_controller.rb +4 -0
- data/examples/ruby-on-rails-api/descope/app/controllers/session_controller.rb +66 -0
- data/examples/ruby-on-rails-api/descope/app/helpers/application_helper.rb +2 -0
- data/examples/ruby-on-rails-api/descope/app/helpers/homepage_helper.rb +2 -0
- data/examples/ruby-on-rails-api/descope/app/helpers/session_helper.rb +2 -0
- data/examples/ruby-on-rails-api/descope/app/javascript/App.css +53 -0
- data/examples/ruby-on-rails-api/descope/app/javascript/application.js +5 -0
- data/examples/ruby-on-rails-api/descope/app/javascript/components/App.jsx +4 -0
- data/examples/ruby-on-rails-api/descope/app/javascript/components/Dashboard.jsx +60 -0
- data/examples/ruby-on-rails-api/descope/app/javascript/components/Home.jsx +27 -0
- data/examples/ruby-on-rails-api/descope/app/javascript/components/Login.jsx +45 -0
- data/examples/ruby-on-rails-api/descope/app/javascript/components/Profile.jsx +81 -0
- data/examples/ruby-on-rails-api/descope/app/javascript/components/index.html +11 -0
- data/examples/ruby-on-rails-api/descope/app/javascript/components/index.jsx +24 -0
- data/examples/ruby-on-rails-api/descope/app/javascript/controllers/application.js +9 -0
- data/examples/ruby-on-rails-api/descope/app/javascript/controllers/index.js +5 -0
- data/examples/ruby-on-rails-api/descope/app/javascript/reportWebVitals.js +13 -0
- data/examples/ruby-on-rails-api/descope/app/javascript/routes/index.jsx +17 -0
- data/examples/ruby-on-rails-api/descope/app/jobs/application_job.rb +7 -0
- data/examples/ruby-on-rails-api/descope/app/mailers/application_mailer.rb +4 -0
- data/examples/ruby-on-rails-api/descope/app/models/application_record.rb +3 -0
- data/examples/ruby-on-rails-api/descope/app/models/concerns/.keep +0 -0
- data/examples/ruby-on-rails-api/descope/app/views/homepage/index.html.erb +2 -0
- data/examples/ruby-on-rails-api/descope/app/views/layouts/application.html.erb +16 -0
- data/examples/ruby-on-rails-api/descope/app/views/layouts/mailer.html.erb +13 -0
- data/examples/ruby-on-rails-api/descope/app/views/layouts/mailer.text.erb +1 -0
- data/examples/ruby-on-rails-api/descope/app/views/session/index.html.erb +2 -0
- data/examples/ruby-on-rails-api/descope/bin/bundle +109 -0
- data/examples/ruby-on-rails-api/descope/bin/dev +11 -0
- data/examples/ruby-on-rails-api/descope/bin/docker-entrypoint +8 -0
- data/examples/ruby-on-rails-api/descope/bin/rails +4 -0
- data/examples/ruby-on-rails-api/descope/bin/rake +4 -0
- data/examples/ruby-on-rails-api/descope/bin/setup +36 -0
- data/examples/ruby-on-rails-api/descope/build.js +30 -0
- data/examples/ruby-on-rails-api/descope/config/application.rb +42 -0
- data/examples/ruby-on-rails-api/descope/config/boot.rb +4 -0
- data/examples/ruby-on-rails-api/descope/config/cable.yml +10 -0
- data/examples/ruby-on-rails-api/descope/config/config.yml +9 -0
- data/examples/ruby-on-rails-api/descope/config/credentials.yml.enc +1 -0
- data/examples/ruby-on-rails-api/descope/config/database.yml +25 -0
- data/examples/ruby-on-rails-api/descope/config/environment.rb +5 -0
- data/examples/ruby-on-rails-api/descope/config/environments/development.rb +76 -0
- data/examples/ruby-on-rails-api/descope/config/environments/production.rb +97 -0
- data/examples/ruby-on-rails-api/descope/config/environments/test.rb +64 -0
- data/examples/ruby-on-rails-api/descope/config/initializers/assets.rb +13 -0
- data/examples/ruby-on-rails-api/descope/config/initializers/content_security_policy.rb +25 -0
- data/examples/ruby-on-rails-api/descope/config/initializers/filter_parameter_logging.rb +8 -0
- data/examples/ruby-on-rails-api/descope/config/initializers/inflections.rb +16 -0
- data/examples/ruby-on-rails-api/descope/config/initializers/load_config.rb +12 -0
- data/examples/ruby-on-rails-api/descope/config/initializers/permissions_policy.rb +13 -0
- data/examples/ruby-on-rails-api/descope/config/locales/en.yml +31 -0
- data/examples/ruby-on-rails-api/descope/config/puma.rb +35 -0
- data/examples/ruby-on-rails-api/descope/config/routes.rb +18 -0
- data/examples/ruby-on-rails-api/descope/config/storage.yml +34 -0
- data/examples/ruby-on-rails-api/descope/config.ru +6 -0
- data/examples/ruby-on-rails-api/descope/db/seeds.rb +9 -0
- data/examples/ruby-on-rails-api/descope/lib/assets/.keep +0 -0
- data/examples/ruby-on-rails-api/descope/lib/tasks/.keep +0 -0
- data/examples/ruby-on-rails-api/descope/log/.keep +0 -0
- data/examples/ruby-on-rails-api/descope/package-lock.json +19680 -0
- data/examples/ruby-on-rails-api/descope/package.json +51 -0
- data/examples/ruby-on-rails-api/descope/public/404.html +67 -0
- data/examples/ruby-on-rails-api/descope/public/422.html +67 -0
- data/examples/ruby-on-rails-api/descope/public/500.html +66 -0
- data/examples/ruby-on-rails-api/descope/public/apple-touch-icon-precomposed.png +0 -0
- data/examples/ruby-on-rails-api/descope/public/apple-touch-icon.png +0 -0
- data/examples/ruby-on-rails-api/descope/public/favicon.ico +0 -0
- data/examples/ruby-on-rails-api/descope/public/robots.txt +1 -0
- data/examples/ruby-on-rails-api/descope/storage/.keep +0 -0
- data/examples/ruby-on-rails-api/descope/tmp/.keep +0 -0
- data/examples/ruby-on-rails-api/descope/tmp/pids/.keep +0 -0
- data/examples/ruby-on-rails-api/descope/tmp/storage/.keep +0 -0
- data/examples/ruby-on-rails-api/descope/vendor/.keep +0 -0
- data/examples/ruby-on-rails-api/descope/yarn.lock +10780 -0
- data/lib/descope/api/v1/auth/enchantedlink.rb +156 -0
- data/lib/descope/api/v1/auth/magiclink.rb +170 -0
- data/lib/descope/api/v1/auth/oauth.rb +72 -0
- data/lib/descope/api/v1/auth/otp.rb +186 -0
- data/lib/descope/api/v1/auth/password.rb +100 -0
- data/lib/descope/api/v1/auth/saml.rb +48 -0
- data/lib/descope/api/v1/auth/totp.rb +72 -0
- data/lib/descope/api/v1/auth.rb +452 -0
- data/lib/descope/api/v1/management/access_key.rb +81 -0
- data/lib/descope/api/v1/management/audit.rb +82 -0
- data/lib/descope/api/v1/management/authz.rb +165 -0
- data/lib/descope/api/v1/management/common.rb +147 -0
- data/lib/descope/api/v1/management/flow.rb +55 -0
- data/lib/descope/api/v1/management/password.rb +58 -0
- data/lib/descope/api/v1/management/permission.rb +48 -0
- data/lib/descope/api/v1/management/project.rb +53 -0
- data/lib/descope/api/v1/management/role.rb +48 -0
- data/lib/descope/api/v1/management/scim.rb +206 -0
- data/lib/descope/api/v1/management/sso_settings.rb +153 -0
- data/lib/descope/api/v1/management/tenant.rb +71 -0
- data/lib/descope/api/v1/management/user.rb +619 -0
- data/lib/descope/api/v1/management.rb +38 -0
- data/lib/descope/api/v1/session.rb +84 -0
- data/lib/descope/api/v1.rb +13 -0
- data/lib/descope/client.rb +6 -0
- data/lib/descope/exception.rb +50 -0
- data/lib/descope/mixins/common.rb +129 -0
- data/lib/descope/mixins/headers.rb +15 -0
- data/lib/descope/mixins/http.rb +133 -0
- data/lib/descope/mixins/initializer.rb +80 -0
- data/lib/descope/mixins/logging.rb +30 -0
- data/lib/descope/mixins/validation.rb +79 -0
- data/lib/descope/mixins.rb +22 -0
- data/lib/descope/version.rb +7 -0
- data/lib/descope.rb +9 -0
- data/lib/descope_client.rb +5 -0
- data/release-please-config.json +18 -0
- data/renovate.json +6 -0
- data/spec/factories/user.rb +16 -0
- data/spec/lib.descope/api/v1/auth/enchantedlink_spec.rb +159 -0
- data/spec/lib.descope/api/v1/auth/magiclink_spec.rb +282 -0
- data/spec/lib.descope/api/v1/auth/oauth_spec.rb +117 -0
- data/spec/lib.descope/api/v1/auth/otp_spec.rb +285 -0
- data/spec/lib.descope/api/v1/auth/password_spec.rb +124 -0
- data/spec/lib.descope/api/v1/auth/saml_spec.rb +55 -0
- data/spec/lib.descope/api/v1/auth/totp_spec.rb +70 -0
- data/spec/lib.descope/api/v1/auth_spec.rb +372 -0
- data/spec/lib.descope/api/v1/management/access_key_spec.rb +118 -0
- data/spec/lib.descope/api/v1/management/audit_spec.rb +78 -0
- data/spec/lib.descope/api/v1/management/authz_spec.rb +336 -0
- data/spec/lib.descope/api/v1/management/flow_spec.rb +78 -0
- data/spec/lib.descope/api/v1/management/password_spec.rb +25 -0
- data/spec/lib.descope/api/v1/management/permission_spec.rb +81 -0
- data/spec/lib.descope/api/v1/management/project_spec.rb +63 -0
- data/spec/lib.descope/api/v1/management/role_spec.rb +85 -0
- data/spec/lib.descope/api/v1/management/scim_spec.rb +312 -0
- data/spec/lib.descope/api/v1/management/sso_settings_spec.rb +172 -0
- data/spec/lib.descope/api/v1/management/tenant_spec.rb +141 -0
- data/spec/lib.descope/api/v1/management/user_spec.rb +667 -0
- data/spec/lib.descope/api/v1/session_spec.rb +117 -0
- data/spec/lib.descope/client_spec.rb +40 -0
- data/spec/spec_helper.rb +72 -0
- data/spec/support/client_config.rb +14 -0
- data/spec/support/dummy_class.rb +36 -0
- data/spec/support/utils.rb +32 -0
- metadata +420 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require 'descope'
|
|
5
|
+
|
|
6
|
+
@logger = Logger.new($stdout)
|
|
7
|
+
|
|
8
|
+
@project_id = ENV['DESCOPE_PROJECT_ID']
|
|
9
|
+
@management_key = ENV['DESCOPE_MANAGEMENT_KEY']
|
|
10
|
+
|
|
11
|
+
@logger.info("Initializing Descope API with project_id: #{@project_id} and base_uri: #{@base_uri}")
|
|
12
|
+
|
|
13
|
+
@client = Descope::Client.new({ project_id: @project_id, management_key: @management_key })
|
|
14
|
+
|
|
15
|
+
begin
|
|
16
|
+
@logger.info('Going to login with SAML auth method')
|
|
17
|
+
@logger.info('make sure to configure your SAML for the tenant you are going to use')
|
|
18
|
+
@logger.info('https://docs.descope.com/tutorials/sso/')
|
|
19
|
+
puts 'Enter tenant id:'
|
|
20
|
+
tenant_id = gets.chomp
|
|
21
|
+
@logger.info('CMD click the url and then copy the code from the browser')
|
|
22
|
+
response = @client.saml_sign_in(tenant: tenant_id, redirect_url: 'https://www.google.com')
|
|
23
|
+
@logger.info("SAML response: #{response}")
|
|
24
|
+
|
|
25
|
+
puts 'Enter code:'
|
|
26
|
+
code = gets.chomp
|
|
27
|
+
@logger.info("Exchanging code: #{code}")
|
|
28
|
+
jwt_response = @client.saml_exchange_token(code)
|
|
29
|
+
refresh_token = jwt_response[Descope::Mixins::Common::REFRESH_SESSION_TOKEN_NAME].fetch('jwt')
|
|
30
|
+
|
|
31
|
+
res = @client.me(refresh_token)
|
|
32
|
+
@logger.info("Me response: #{res}")
|
|
33
|
+
|
|
34
|
+
@logger.info('signing out...')
|
|
35
|
+
@client.sign_out(refresh_token)
|
|
36
|
+
rescue Descope::AuthException => e
|
|
37
|
+
@logger.error("Error: #{e.message}")
|
|
38
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# See https://docs.docker.com/engine/reference/builder/#dockerignore-file for more about ignoring files.
|
|
2
|
+
|
|
3
|
+
# Ignore git directory.
|
|
4
|
+
/.git/
|
|
5
|
+
|
|
6
|
+
# Ignore bundler config.
|
|
7
|
+
/.bundle
|
|
8
|
+
|
|
9
|
+
# Ignore all environment files (except templates).
|
|
10
|
+
/.env*
|
|
11
|
+
!/.env*.erb
|
|
12
|
+
|
|
13
|
+
# Ignore all default key files.
|
|
14
|
+
/config/master.key
|
|
15
|
+
/config/credentials/*.key
|
|
16
|
+
|
|
17
|
+
# Ignore all logfiles and tempfiles.
|
|
18
|
+
/log/*
|
|
19
|
+
/tmp/*
|
|
20
|
+
!/log/.keep
|
|
21
|
+
!/tmp/.keep
|
|
22
|
+
|
|
23
|
+
# Ignore pidfiles, but keep the directory.
|
|
24
|
+
/tmp/pids/*
|
|
25
|
+
!/tmp/pids/.keep
|
|
26
|
+
|
|
27
|
+
# Ignore storage (uploaded files in development and any SQLite databases).
|
|
28
|
+
/storage/*
|
|
29
|
+
!/storage/.keep
|
|
30
|
+
/tmp/storage/*
|
|
31
|
+
!/tmp/storage/.keep
|
|
32
|
+
|
|
33
|
+
# Ignore assets.
|
|
34
|
+
/node_modules/
|
|
35
|
+
/app/assets/builds/*
|
|
36
|
+
!/app/assets/builds/.keep
|
|
37
|
+
/public/assets
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# See https://git-scm.com/docs/gitattributes for more about git attribute files.
|
|
2
|
+
|
|
3
|
+
# Mark the database schema as having been generated.
|
|
4
|
+
db/schema.rb linguist-generated
|
|
5
|
+
|
|
6
|
+
# Mark any vendored files as having been vendored.
|
|
7
|
+
vendor/* linguist-vendored
|
|
8
|
+
config/credentials/*.yml.enc diff=rails_credentials
|
|
9
|
+
config/credentials.yml.enc diff=rails_credentials
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# See https://help.github.com/articles/ignoring-files for more about ignoring files.
|
|
2
|
+
#
|
|
3
|
+
# If you find yourself ignoring temporary files generated by your text editor
|
|
4
|
+
# or operating system, you probably want to add a global ignore instead:
|
|
5
|
+
# git config --global core.excludesfile '~/.gitignore_global'
|
|
6
|
+
|
|
7
|
+
# Ignore bundler config.
|
|
8
|
+
/.bundle
|
|
9
|
+
|
|
10
|
+
# Ignore all environment files (except templates).
|
|
11
|
+
/.env*
|
|
12
|
+
!/.env*.erb
|
|
13
|
+
|
|
14
|
+
# Ignore all logfiles and tempfiles.
|
|
15
|
+
/log/*
|
|
16
|
+
/tmp/*
|
|
17
|
+
!/log/.keep
|
|
18
|
+
!/tmp/.keep
|
|
19
|
+
|
|
20
|
+
# Ignore pidfiles, but keep the directory.
|
|
21
|
+
/tmp/pids/*
|
|
22
|
+
!/tmp/pids/
|
|
23
|
+
!/tmp/pids/.keep
|
|
24
|
+
|
|
25
|
+
# Ignore storage (uploaded files in development and any SQLite databases).
|
|
26
|
+
/storage/*
|
|
27
|
+
!/storage/.keep
|
|
28
|
+
/tmp/storage/*
|
|
29
|
+
!/tmp/storage/
|
|
30
|
+
!/tmp/storage/.keep
|
|
31
|
+
|
|
32
|
+
/public/assets
|
|
33
|
+
|
|
34
|
+
# Ignore master key for decrypting credentials and more.
|
|
35
|
+
/config/master.key
|
|
36
|
+
|
|
37
|
+
/app/assets/builds/*
|
|
38
|
+
!/app/assets/builds/.keep
|
|
39
|
+
|
|
40
|
+
/node_modules
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
20.11.0
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ruby-3.3.0
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# syntax = docker/dockerfile:1
|
|
2
|
+
|
|
3
|
+
# Make sure RUBY_VERSION matches the Ruby version in .ruby-version and Gemfile
|
|
4
|
+
ARG RUBY_VERSION=3.3.0
|
|
5
|
+
FROM registry.docker.com/library/ruby:$RUBY_VERSION-slim as base
|
|
6
|
+
|
|
7
|
+
# Rails app lives here
|
|
8
|
+
WORKDIR /rails
|
|
9
|
+
|
|
10
|
+
# Set production environment
|
|
11
|
+
ENV RAILS_ENV="production" \
|
|
12
|
+
BUNDLE_DEPLOYMENT="1" \
|
|
13
|
+
BUNDLE_PATH="/usr/local/bundle" \
|
|
14
|
+
BUNDLE_WITHOUT="development"
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
# Throw-away build stage to reduce size of final image
|
|
18
|
+
FROM base as build
|
|
19
|
+
|
|
20
|
+
# Install packages needed to build gems and node modules
|
|
21
|
+
RUN apt-get update -qq && \
|
|
22
|
+
apt-get install --no-install-recommends -y build-essential curl git libvips node-gyp pkg-config python-is-python3
|
|
23
|
+
|
|
24
|
+
# Install JavaScript dependencies
|
|
25
|
+
ARG NODE_VERSION=20.11.0
|
|
26
|
+
ARG YARN_VERSION=1.22.19
|
|
27
|
+
ENV PATH=/usr/local/node/bin:$PATH
|
|
28
|
+
RUN curl -sL https://github.com/nodenv/node-build/archive/master.tar.gz | tar xz -C /tmp/ && \
|
|
29
|
+
/tmp/node-build-master/bin/node-build "${NODE_VERSION}" /usr/local/node && \
|
|
30
|
+
npm install -g yarn@$YARN_VERSION && \
|
|
31
|
+
rm -rf /tmp/node-build-master
|
|
32
|
+
|
|
33
|
+
# Install application gems
|
|
34
|
+
COPY Gemfile Gemfile.lock ./
|
|
35
|
+
RUN bundle install && \
|
|
36
|
+
rm -rf ~/.bundle/ "${BUNDLE_PATH}"/ruby/*/cache "${BUNDLE_PATH}"/ruby/*/bundler/gems/*/.git && \
|
|
37
|
+
bundle exec bootsnap precompile --gemfile
|
|
38
|
+
|
|
39
|
+
# Install node modules
|
|
40
|
+
COPY package.json yarn.lock ./
|
|
41
|
+
RUN yarn install --frozen-lockfile
|
|
42
|
+
|
|
43
|
+
# Copy application code
|
|
44
|
+
COPY . .
|
|
45
|
+
|
|
46
|
+
# Precompile bootsnap code for faster boot times
|
|
47
|
+
RUN bundle exec bootsnap precompile app/ lib/
|
|
48
|
+
|
|
49
|
+
# Precompiling assets for production without requiring secret RAILS_MASTER_KEY
|
|
50
|
+
RUN SECRET_KEY_BASE_DUMMY=1 ./bin/rails assets:precompile
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
# Final stage for app image
|
|
54
|
+
FROM base
|
|
55
|
+
|
|
56
|
+
# Install packages needed for deployment
|
|
57
|
+
RUN apt-get update -qq && \
|
|
58
|
+
apt-get install --no-install-recommends -y curl libsqlite3-0 libvips && \
|
|
59
|
+
rm -rf /var/lib/apt/lists /var/cache/apt/archives
|
|
60
|
+
|
|
61
|
+
# Copy built artifacts: gems, application
|
|
62
|
+
COPY --from=build /usr/local/bundle /usr/local/bundle
|
|
63
|
+
COPY --from=build /rails /rails
|
|
64
|
+
|
|
65
|
+
# Run and own only the runtime files as a non-root user for security
|
|
66
|
+
RUN useradd rails --create-home --shell /bin/bash && \
|
|
67
|
+
chown -R rails:rails db log storage tmp
|
|
68
|
+
USER rails:rails
|
|
69
|
+
|
|
70
|
+
# Entrypoint prepares the database.
|
|
71
|
+
ENTRYPOINT ["/rails/bin/docker-entrypoint"]
|
|
72
|
+
|
|
73
|
+
# Start the server by default, this can be overwritten at runtime
|
|
74
|
+
EXPOSE 3000
|
|
75
|
+
CMD ["./bin/rails", "server"]
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
source "https://rubygems.org"
|
|
2
|
+
|
|
3
|
+
ruby "3.3.0"
|
|
4
|
+
|
|
5
|
+
# Bundle edge Rails instead: gem "rails", github: "rails/rails", branch: "main"
|
|
6
|
+
gem "rails", "~> 7.1.3"
|
|
7
|
+
|
|
8
|
+
gem 'descope', path: '../../../..'
|
|
9
|
+
|
|
10
|
+
# The original asset pipeline for Rails [https://github.com/rails/sprockets-rails]
|
|
11
|
+
gem "sprockets-rails"
|
|
12
|
+
|
|
13
|
+
# Use sqlite3 as the database for Active Record
|
|
14
|
+
gem "sqlite3", "~> 1.4"
|
|
15
|
+
|
|
16
|
+
# Use the Puma web server [https://github.com/puma/puma]
|
|
17
|
+
gem "puma", ">= 5.0"
|
|
18
|
+
|
|
19
|
+
# Bundle and transpile JavaScript [https://github.com/rails/jsbundling-rails]
|
|
20
|
+
gem "jsbundling-rails"
|
|
21
|
+
|
|
22
|
+
# Hotwire's SPA-like page accelerator [https://turbo.hotwired.dev]
|
|
23
|
+
gem "turbo-rails"
|
|
24
|
+
|
|
25
|
+
# Hotwire's modest JavaScript framework [https://stimulus.hotwired.dev]
|
|
26
|
+
gem "stimulus-rails"
|
|
27
|
+
|
|
28
|
+
# Bundle and process CSS [https://github.com/rails/cssbundling-rails]
|
|
29
|
+
gem "cssbundling-rails"
|
|
30
|
+
|
|
31
|
+
# Build JSON APIs with ease [https://github.com/rails/jbuilder]
|
|
32
|
+
gem "jbuilder"
|
|
33
|
+
|
|
34
|
+
# Use Redis adapter to run Action Cable in production
|
|
35
|
+
# gem "redis", ">= 4.0.1"
|
|
36
|
+
|
|
37
|
+
# Use Kredis to get higher-level data types in Redis [https://github.com/rails/kredis]
|
|
38
|
+
# gem "kredis"
|
|
39
|
+
|
|
40
|
+
# Use Active Model has_secure_password [https://guides.rubyonrails.org/active_model_basics.html#securepassword]
|
|
41
|
+
# gem "bcrypt", "~> 3.1.7"
|
|
42
|
+
|
|
43
|
+
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
|
|
44
|
+
gem "tzinfo-data", platforms: %i[ windows jruby ]
|
|
45
|
+
|
|
46
|
+
# Reduces boot times through caching; required in config/boot.rb
|
|
47
|
+
gem "bootsnap", require: false
|
|
48
|
+
|
|
49
|
+
# Use Active Storage variants [https://guides.rubyonrails.org/active_storage_overview.html#transforming-images]
|
|
50
|
+
# gem "image_processing", "~> 1.2"
|
|
51
|
+
|
|
52
|
+
group :development, :test do
|
|
53
|
+
# See https://guides.rubyonrails.org/debugging_rails_applications.html#debugging-with-the-debug-gem
|
|
54
|
+
gem "debug", platforms: %i[ mri windows ]
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
group :development do
|
|
58
|
+
# Use console on exceptions pages [https://github.com/rails/web-console]
|
|
59
|
+
gem "web-console"
|
|
60
|
+
|
|
61
|
+
# Add speed badges [https://github.com/MiniProfiler/rack-mini-profiler]
|
|
62
|
+
# gem "rack-mini-profiler"
|
|
63
|
+
|
|
64
|
+
# Speed up commands on slow machines / big apps [https://github.com/rails/spring]
|
|
65
|
+
# gem "spring"
|
|
66
|
+
end
|
|
67
|
+
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
PATH
|
|
2
|
+
remote: ../../../..
|
|
3
|
+
specs:
|
|
4
|
+
descope (1.0.3)
|
|
5
|
+
addressable (~> 2.8)
|
|
6
|
+
jwt (~> 2.7)
|
|
7
|
+
rest-client (~> 2.1)
|
|
8
|
+
retryable (~> 3.0)
|
|
9
|
+
zache (~> 0.12)
|
|
10
|
+
|
|
11
|
+
GEM
|
|
12
|
+
remote: https://rubygems.org/
|
|
13
|
+
specs:
|
|
14
|
+
actioncable (7.1.3)
|
|
15
|
+
actionpack (= 7.1.3)
|
|
16
|
+
activesupport (= 7.1.3)
|
|
17
|
+
nio4r (~> 2.0)
|
|
18
|
+
websocket-driver (>= 0.6.1)
|
|
19
|
+
zeitwerk (~> 2.6)
|
|
20
|
+
actionmailbox (7.1.3)
|
|
21
|
+
actionpack (= 7.1.3)
|
|
22
|
+
activejob (= 7.1.3)
|
|
23
|
+
activerecord (= 7.1.3)
|
|
24
|
+
activestorage (= 7.1.3)
|
|
25
|
+
activesupport (= 7.1.3)
|
|
26
|
+
mail (>= 2.7.1)
|
|
27
|
+
net-imap
|
|
28
|
+
net-pop
|
|
29
|
+
net-smtp
|
|
30
|
+
actionmailer (7.1.3)
|
|
31
|
+
actionpack (= 7.1.3)
|
|
32
|
+
actionview (= 7.1.3)
|
|
33
|
+
activejob (= 7.1.3)
|
|
34
|
+
activesupport (= 7.1.3)
|
|
35
|
+
mail (~> 2.5, >= 2.5.4)
|
|
36
|
+
net-imap
|
|
37
|
+
net-pop
|
|
38
|
+
net-smtp
|
|
39
|
+
rails-dom-testing (~> 2.2)
|
|
40
|
+
actionpack (7.1.3)
|
|
41
|
+
actionview (= 7.1.3)
|
|
42
|
+
activesupport (= 7.1.3)
|
|
43
|
+
nokogiri (>= 1.8.5)
|
|
44
|
+
racc
|
|
45
|
+
rack (>= 2.2.4)
|
|
46
|
+
rack-session (>= 1.0.1)
|
|
47
|
+
rack-test (>= 0.6.3)
|
|
48
|
+
rails-dom-testing (~> 2.2)
|
|
49
|
+
rails-html-sanitizer (~> 1.6)
|
|
50
|
+
actiontext (7.1.3)
|
|
51
|
+
actionpack (= 7.1.3)
|
|
52
|
+
activerecord (= 7.1.3)
|
|
53
|
+
activestorage (= 7.1.3)
|
|
54
|
+
activesupport (= 7.1.3)
|
|
55
|
+
globalid (>= 0.6.0)
|
|
56
|
+
nokogiri (>= 1.8.5)
|
|
57
|
+
actionview (7.1.3)
|
|
58
|
+
activesupport (= 7.1.3)
|
|
59
|
+
builder (~> 3.1)
|
|
60
|
+
erubi (~> 1.11)
|
|
61
|
+
rails-dom-testing (~> 2.2)
|
|
62
|
+
rails-html-sanitizer (~> 1.6)
|
|
63
|
+
activejob (7.1.3)
|
|
64
|
+
activesupport (= 7.1.3)
|
|
65
|
+
globalid (>= 0.3.6)
|
|
66
|
+
activemodel (7.1.3)
|
|
67
|
+
activesupport (= 7.1.3)
|
|
68
|
+
activerecord (7.1.3)
|
|
69
|
+
activemodel (= 7.1.3)
|
|
70
|
+
activesupport (= 7.1.3)
|
|
71
|
+
timeout (>= 0.4.0)
|
|
72
|
+
activestorage (7.1.3)
|
|
73
|
+
actionpack (= 7.1.3)
|
|
74
|
+
activejob (= 7.1.3)
|
|
75
|
+
activerecord (= 7.1.3)
|
|
76
|
+
activesupport (= 7.1.3)
|
|
77
|
+
marcel (~> 1.0)
|
|
78
|
+
activesupport (7.1.3)
|
|
79
|
+
base64
|
|
80
|
+
bigdecimal
|
|
81
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
82
|
+
connection_pool (>= 2.2.5)
|
|
83
|
+
drb
|
|
84
|
+
i18n (>= 1.6, < 2)
|
|
85
|
+
minitest (>= 5.1)
|
|
86
|
+
mutex_m
|
|
87
|
+
tzinfo (~> 2.0)
|
|
88
|
+
addressable (2.8.6)
|
|
89
|
+
public_suffix (>= 2.0.2, < 6.0)
|
|
90
|
+
base64 (0.2.0)
|
|
91
|
+
bigdecimal (3.1.6)
|
|
92
|
+
bindex (0.8.1)
|
|
93
|
+
bootsnap (1.17.1)
|
|
94
|
+
msgpack (~> 1.2)
|
|
95
|
+
builder (3.2.4)
|
|
96
|
+
concurrent-ruby (1.2.3)
|
|
97
|
+
connection_pool (2.4.1)
|
|
98
|
+
crass (1.0.6)
|
|
99
|
+
cssbundling-rails (1.4.0)
|
|
100
|
+
railties (>= 6.0.0)
|
|
101
|
+
date (3.3.4)
|
|
102
|
+
debug (1.9.1)
|
|
103
|
+
irb (~> 1.10)
|
|
104
|
+
reline (>= 0.3.8)
|
|
105
|
+
domain_name (0.6.20240107)
|
|
106
|
+
drb (2.2.0)
|
|
107
|
+
ruby2_keywords
|
|
108
|
+
erubi (1.12.0)
|
|
109
|
+
globalid (1.2.1)
|
|
110
|
+
activesupport (>= 6.1)
|
|
111
|
+
http-accept (1.7.0)
|
|
112
|
+
http-cookie (1.0.5)
|
|
113
|
+
domain_name (~> 0.5)
|
|
114
|
+
i18n (1.14.1)
|
|
115
|
+
concurrent-ruby (~> 1.0)
|
|
116
|
+
io-console (0.7.2)
|
|
117
|
+
irb (1.11.1)
|
|
118
|
+
rdoc
|
|
119
|
+
reline (>= 0.4.2)
|
|
120
|
+
jbuilder (2.11.5)
|
|
121
|
+
actionview (>= 5.0.0)
|
|
122
|
+
activesupport (>= 5.0.0)
|
|
123
|
+
jsbundling-rails (1.3.0)
|
|
124
|
+
railties (>= 6.0.0)
|
|
125
|
+
jwt (2.7.1)
|
|
126
|
+
loofah (2.22.0)
|
|
127
|
+
crass (~> 1.0.2)
|
|
128
|
+
nokogiri (>= 1.12.0)
|
|
129
|
+
mail (2.8.1)
|
|
130
|
+
mini_mime (>= 0.1.1)
|
|
131
|
+
net-imap
|
|
132
|
+
net-pop
|
|
133
|
+
net-smtp
|
|
134
|
+
marcel (1.0.2)
|
|
135
|
+
mime-types (3.5.2)
|
|
136
|
+
mime-types-data (~> 3.2015)
|
|
137
|
+
mime-types-data (3.2023.1205)
|
|
138
|
+
mini_mime (1.1.5)
|
|
139
|
+
minitest (5.21.2)
|
|
140
|
+
msgpack (1.7.2)
|
|
141
|
+
mutex_m (0.2.0)
|
|
142
|
+
net-imap (0.4.9.1)
|
|
143
|
+
date
|
|
144
|
+
net-protocol
|
|
145
|
+
net-pop (0.1.2)
|
|
146
|
+
net-protocol
|
|
147
|
+
net-protocol (0.2.2)
|
|
148
|
+
timeout
|
|
149
|
+
net-smtp (0.4.0.1)
|
|
150
|
+
net-protocol
|
|
151
|
+
netrc (0.11.0)
|
|
152
|
+
nio4r (2.7.0)
|
|
153
|
+
nokogiri (1.16.2-aarch64-linux)
|
|
154
|
+
racc (~> 1.4)
|
|
155
|
+
nokogiri (1.16.2-arm-linux)
|
|
156
|
+
racc (~> 1.4)
|
|
157
|
+
nokogiri (1.16.2-arm64-darwin)
|
|
158
|
+
racc (~> 1.4)
|
|
159
|
+
nokogiri (1.16.2-x86-linux)
|
|
160
|
+
racc (~> 1.4)
|
|
161
|
+
nokogiri (1.16.2-x86_64-darwin)
|
|
162
|
+
racc (~> 1.4)
|
|
163
|
+
nokogiri (1.16.2-x86_64-linux)
|
|
164
|
+
racc (~> 1.4)
|
|
165
|
+
psych (5.1.2)
|
|
166
|
+
stringio
|
|
167
|
+
public_suffix (5.0.4)
|
|
168
|
+
puma (6.4.2)
|
|
169
|
+
nio4r (~> 2.0)
|
|
170
|
+
racc (1.7.3)
|
|
171
|
+
rack (3.0.8)
|
|
172
|
+
rack-session (2.0.0)
|
|
173
|
+
rack (>= 3.0.0)
|
|
174
|
+
rack-test (2.1.0)
|
|
175
|
+
rack (>= 1.3)
|
|
176
|
+
rackup (2.1.0)
|
|
177
|
+
rack (>= 3)
|
|
178
|
+
webrick (~> 1.8)
|
|
179
|
+
rails (7.1.3)
|
|
180
|
+
actioncable (= 7.1.3)
|
|
181
|
+
actionmailbox (= 7.1.3)
|
|
182
|
+
actionmailer (= 7.1.3)
|
|
183
|
+
actionpack (= 7.1.3)
|
|
184
|
+
actiontext (= 7.1.3)
|
|
185
|
+
actionview (= 7.1.3)
|
|
186
|
+
activejob (= 7.1.3)
|
|
187
|
+
activemodel (= 7.1.3)
|
|
188
|
+
activerecord (= 7.1.3)
|
|
189
|
+
activestorage (= 7.1.3)
|
|
190
|
+
activesupport (= 7.1.3)
|
|
191
|
+
bundler (>= 1.15.0)
|
|
192
|
+
railties (= 7.1.3)
|
|
193
|
+
rails-dom-testing (2.2.0)
|
|
194
|
+
activesupport (>= 5.0.0)
|
|
195
|
+
minitest
|
|
196
|
+
nokogiri (>= 1.6)
|
|
197
|
+
rails-html-sanitizer (1.6.0)
|
|
198
|
+
loofah (~> 2.21)
|
|
199
|
+
nokogiri (~> 1.14)
|
|
200
|
+
railties (7.1.3)
|
|
201
|
+
actionpack (= 7.1.3)
|
|
202
|
+
activesupport (= 7.1.3)
|
|
203
|
+
irb
|
|
204
|
+
rackup (>= 1.0.0)
|
|
205
|
+
rake (>= 12.2)
|
|
206
|
+
thor (~> 1.0, >= 1.2.2)
|
|
207
|
+
zeitwerk (~> 2.6)
|
|
208
|
+
rake (13.1.0)
|
|
209
|
+
rdoc (6.6.2)
|
|
210
|
+
psych (>= 4.0.0)
|
|
211
|
+
reline (0.4.2)
|
|
212
|
+
io-console (~> 0.5)
|
|
213
|
+
rest-client (2.1.0)
|
|
214
|
+
http-accept (>= 1.7.0, < 2.0)
|
|
215
|
+
http-cookie (>= 1.0.2, < 2.0)
|
|
216
|
+
mime-types (>= 1.16, < 4.0)
|
|
217
|
+
netrc (~> 0.8)
|
|
218
|
+
retryable (3.0.5)
|
|
219
|
+
ruby2_keywords (0.0.5)
|
|
220
|
+
sprockets (4.2.1)
|
|
221
|
+
concurrent-ruby (~> 1.0)
|
|
222
|
+
rack (>= 2.2.4, < 4)
|
|
223
|
+
sprockets-rails (3.4.2)
|
|
224
|
+
actionpack (>= 5.2)
|
|
225
|
+
activesupport (>= 5.2)
|
|
226
|
+
sprockets (>= 3.0.0)
|
|
227
|
+
sqlite3 (1.7.0-aarch64-linux)
|
|
228
|
+
sqlite3 (1.7.0-arm-linux)
|
|
229
|
+
sqlite3 (1.7.0-arm64-darwin)
|
|
230
|
+
sqlite3 (1.7.0-x86-linux)
|
|
231
|
+
sqlite3 (1.7.0-x86_64-darwin)
|
|
232
|
+
sqlite3 (1.7.0-x86_64-linux)
|
|
233
|
+
stimulus-rails (1.3.3)
|
|
234
|
+
railties (>= 6.0.0)
|
|
235
|
+
stringio (3.1.0)
|
|
236
|
+
thor (1.3.0)
|
|
237
|
+
timeout (0.4.1)
|
|
238
|
+
turbo-rails (1.5.0)
|
|
239
|
+
actionpack (>= 6.0.0)
|
|
240
|
+
activejob (>= 6.0.0)
|
|
241
|
+
railties (>= 6.0.0)
|
|
242
|
+
tzinfo (2.0.6)
|
|
243
|
+
concurrent-ruby (~> 1.0)
|
|
244
|
+
web-console (4.2.1)
|
|
245
|
+
actionview (>= 6.0.0)
|
|
246
|
+
activemodel (>= 6.0.0)
|
|
247
|
+
bindex (>= 0.4.0)
|
|
248
|
+
railties (>= 6.0.0)
|
|
249
|
+
webrick (1.8.1)
|
|
250
|
+
websocket-driver (0.7.6)
|
|
251
|
+
websocket-extensions (>= 0.1.0)
|
|
252
|
+
websocket-extensions (0.1.5)
|
|
253
|
+
zache (0.13.1)
|
|
254
|
+
zeitwerk (2.6.12)
|
|
255
|
+
|
|
256
|
+
PLATFORMS
|
|
257
|
+
aarch64-linux
|
|
258
|
+
arm-linux
|
|
259
|
+
arm64-darwin
|
|
260
|
+
x86-linux
|
|
261
|
+
x86_64-darwin
|
|
262
|
+
x86_64-linux
|
|
263
|
+
|
|
264
|
+
DEPENDENCIES
|
|
265
|
+
bootsnap
|
|
266
|
+
cssbundling-rails
|
|
267
|
+
debug
|
|
268
|
+
descope!
|
|
269
|
+
jbuilder
|
|
270
|
+
jsbundling-rails
|
|
271
|
+
puma (>= 5.0)
|
|
272
|
+
rails (~> 7.1.3)
|
|
273
|
+
sprockets-rails
|
|
274
|
+
sqlite3 (~> 1.4)
|
|
275
|
+
stimulus-rails
|
|
276
|
+
turbo-rails
|
|
277
|
+
tzinfo-data
|
|
278
|
+
web-console
|
|
279
|
+
|
|
280
|
+
RUBY VERSION
|
|
281
|
+
ruby 3.3.0p0
|
|
282
|
+
|
|
283
|
+
BUNDLED WITH
|
|
284
|
+
2.5.5
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Descope Ruby On Rails API Example
|
|
2
|
+
|
|
3
|
+
Rails-React Sample app with Descope Auth
|
|
4
|
+
Add Descope's Ruby SDK to add authentication to a Rails 7 + React.js app. The project will feature multiple pages, protected routes, and logout functionality
|
|
5
|
+
|
|
6
|
+
## ⚙️ Setup
|
|
7
|
+
|
|
8
|
+
1. Install dependencies:
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
bundle install
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
3. Client Setup
|
|
15
|
+
|
|
16
|
+
Create a ```.env``` file in the root directory of the `client` folder and add your Descope [Project ID](https://app.descope.com/settings/project) in the file:
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
REACT_APP_PROJECT_ID="YOUR_DESCOPE_PROJECT_ID"
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
> **NOTE**: If you're running your flask server on a different port than 3000, change the ```"proxy":"http://127.0.0.1:3000/"``` value to wherever your server is hosted. You can edit the proxy value in your client package.json file.
|
|
23
|
+
|
|
24
|
+
4. Server Setup
|
|
25
|
+
|
|
26
|
+
Since this app also showcases roles, it will require you to set them up in the Descope Console.
|
|
27
|
+
|
|
28
|
+
- Create two different [roles]((https://app.descope.com/authorization)) called "teacher" and "student" <br>
|
|
29
|
+
- Create a ```.env``` file in the server folder and add your project id in the file:
|
|
30
|
+
```
|
|
31
|
+
PROJECT_ID="YOUR_DESCOPE_PROJECT_ID"
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## 🔮 Running the Application
|
|
35
|
+
|
|
36
|
+
To run the server:
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
./bin/dev
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## 📁 Folder Structure
|
|
43
|
+
|
|
44
|
+
- Server: the server folder contains the rails app and server that will handle session validation
|
|
45
|
+
- React App in the `app/javascript/components` folder
|
|
46
|
+
|
|
47
|
+
## ⚠️ Issue Reporting
|
|
48
|
+
|
|
49
|
+
For any issues or suggestions, feel free to open an issue in the GitHub repository.
|
|
50
|
+
|
|
51
|
+
## 📜 License
|
|
52
|
+
|
|
53
|
+
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
|
54
|
+
|
|
File without changes
|
|
File without changes
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|