From ebaabcdb31cd455e0f549ff26d534d1542647bec Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Mon, 24 Jun 2019 09:04:00 +0800 Subject: [PATCH 001/152] Updates .env.example --- .env.example | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.env.example b/.env.example index be66839..81042d7 100644 --- a/.env.example +++ b/.env.example @@ -1,7 +1,9 @@ TOPSEKRIT_AUTHORISATION_SETTING='open' TOPSEKRIT_AUTHORISED_DOMAIN='reinteractive.net' GOOGLE_OAUTH_CALLBACK_PATH='/auth/google_oauth2/callback' -GOOGLE_CLIENT_ID='' -GOOGLE_CLIENT_SECRET='' +GOOGLE_OAUTH_CLIENT_ID='' +GOOGLE_OAUTH_CLIENT_SECRET='' BASE_URL='http://localhost:3000' -TOPSEKRIT_EXPIRY_DAYS='14' \ No newline at end of file +TOPSEKRIT_EXPIRY_DAYS='14' +RECAPTCHA_SITE_KEY='' +RECAPTCHA_SECRET_KEY='' From f6b3bac8378d16f7050f0aecd96cb8cbbf5f576f Mon Sep 17 00:00:00 2001 From: Daniel Draper Date: Tue, 11 Jun 2019 16:50:45 +1000 Subject: [PATCH 002/152] Install and configure devise for sign up without password --- Gemfile | 1 + Gemfile.lock | 14 + .../users/confirmations_controller.rb | 31 ++ app/models/user.rb | 12 + app/views/devise/confirmations/new.html.erb | 16 + .../mailer/confirmation_instructions.html.erb | 5 + .../devise/mailer/email_changed.html.erb | 7 + .../devise/mailer/password_change.html.erb | 3 + .../reset_password_instructions.html.erb | 8 + .../mailer/unlock_instructions.html.erb | 7 + app/views/devise/passwords/edit.html.erb | 19 ++ app/views/devise/passwords/new.html.erb | 15 + app/views/devise/registrations/edit.html.erb | 27 ++ app/views/devise/registrations/new.html.erb | 15 + app/views/devise/sessions/new.html.erb | 15 + app/views/devise/shared/_links.html.erb | 25 ++ app/views/devise/unlocks/new.html.erb | 16 + config/initializers/devise.rb | 279 ++++++++++++++++++ config/locales/devise.en.yml | 64 ++++ config/routes.rb | 3 + .../20190611063450_devise_create_users.rb | 44 +++ db/schema.rb | 25 +- spec/models/user_spec.rb | 12 + test/fixtures/users.yml | 11 + test/models/user_test.rb | 7 + vendor/cache/bcrypt-3.1.11.gem | Bin 0 -> 44032 bytes vendor/cache/devise-4.4.0.gem | Bin 0 -> 169984 bytes vendor/cache/orm_adapter-0.5.0.gem | Bin 0 -> 15360 bytes vendor/cache/responders-2.4.0.gem | Bin 0 -> 19456 bytes vendor/cache/warden-1.2.7.gem | Bin 0 -> 32256 bytes 30 files changed, 680 insertions(+), 1 deletion(-) create mode 100644 app/controllers/users/confirmations_controller.rb create mode 100644 app/models/user.rb create mode 100644 app/views/devise/confirmations/new.html.erb create mode 100644 app/views/devise/mailer/confirmation_instructions.html.erb create mode 100644 app/views/devise/mailer/email_changed.html.erb create mode 100644 app/views/devise/mailer/password_change.html.erb create mode 100644 app/views/devise/mailer/reset_password_instructions.html.erb create mode 100644 app/views/devise/mailer/unlock_instructions.html.erb create mode 100644 app/views/devise/passwords/edit.html.erb create mode 100644 app/views/devise/passwords/new.html.erb create mode 100644 app/views/devise/registrations/edit.html.erb create mode 100644 app/views/devise/registrations/new.html.erb create mode 100644 app/views/devise/sessions/new.html.erb create mode 100644 app/views/devise/shared/_links.html.erb create mode 100644 app/views/devise/unlocks/new.html.erb create mode 100644 config/initializers/devise.rb create mode 100644 config/locales/devise.en.yml create mode 100644 db/migrate/20190611063450_devise_create_users.rb create mode 100644 spec/models/user_spec.rb create mode 100644 test/fixtures/users.yml create mode 100644 test/models/user_test.rb create mode 100644 vendor/cache/bcrypt-3.1.11.gem create mode 100644 vendor/cache/devise-4.4.0.gem create mode 100644 vendor/cache/orm_adapter-0.5.0.gem create mode 100644 vendor/cache/responders-2.4.0.gem create mode 100644 vendor/cache/warden-1.2.7.gem diff --git a/Gemfile b/Gemfile index e26bcf1..49d015b 100644 --- a/Gemfile +++ b/Gemfile @@ -25,6 +25,7 @@ gem "bugsnag" gem "okcomputer" gem "skylight" gem 'rails_12factor', group: :production +gem "devise" gem 'sdoc', '~> 0.4.0', group: :doc diff --git a/Gemfile.lock b/Gemfile.lock index d489b0d..0c42fcc 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -43,6 +43,7 @@ GEM encryptor (~> 3.0.0) autoprefixer-rails (6.7.7.1) execjs + bcrypt (3.1.11) better_errors (2.1.1) coderay (>= 1.0.0) erubis (>= 2.6.6) @@ -71,6 +72,12 @@ GEM concurrent-ruby (1.0.5) database_cleaner (1.5.3) debug_inspector (0.0.2) + devise (4.4.0) + bcrypt (~> 3.0) + orm_adapter (~> 0.1) + railties (>= 4.1.0, < 5.2) + responders + warden (~> 1.2.3) diff-lcs (1.3) dotenv (2.2.0) dotenv-rails (2.2.0) @@ -142,6 +149,7 @@ GEM omniauth-oauth2 (1.4.0) oauth2 (~> 1.0) omniauth (~> 1.2) + orm_adapter (0.5.0) parser (2.4.0.0) ast (~> 2.2) pg (0.20.0) @@ -194,6 +202,9 @@ GEM recaptcha (4.10.0) json request_store (1.3.2) + responders (2.4.0) + actionpack (>= 4.2.0, < 5.3) + railties (>= 4.2.0, < 5.3) rspec-core (3.5.4) rspec-support (~> 3.5.0) rspec-expectations (3.5.0) @@ -256,6 +267,8 @@ GEM unicorn-rails (2.2.1) rack unicorn + warden (1.2.7) + rack (>= 1.0) web-console (2.3.0) activemodel (>= 4.0) binding_of_caller (>= 0.7.2) @@ -280,6 +293,7 @@ DEPENDENCIES capybara carrierwave database_cleaner + devise dotenv-rails email_validator factory_girl_rails diff --git a/app/controllers/users/confirmations_controller.rb b/app/controllers/users/confirmations_controller.rb new file mode 100644 index 0000000..46fb9f3 --- /dev/null +++ b/app/controllers/users/confirmations_controller.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +class Users::ConfirmationsController < Devise::ConfirmationsController + # GET /resource/confirmation/new + # def new + # super + # end + + # POST /resource/confirmation + # def create + # super + # end + + # GET /resource/confirmation?confirmation_token=abcdef + # def show + # super + # end + + # protected + + # The path used after resending confirmation instructions. + # def after_resending_confirmation_instructions_path_for(resource_name) + # super(resource_name) + # end + + # The path used after confirmation. + def after_confirmation_path_for(resource_name, resource) + token = resource.send(:set_reset_password_token) + edit_password_url(resource, reset_password_token: token) + end +end diff --git a/app/models/user.rb b/app/models/user.rb new file mode 100644 index 0000000..fb86846 --- /dev/null +++ b/app/models/user.rb @@ -0,0 +1,12 @@ +class User < ActiveRecord::Base + # Include default devise modules. Others available are: + # :lockable, :timeoutable and :omniauthable + devise :database_authenticatable, :registerable, :confirmable, + :recoverable, :rememberable, :trackable, :validatable + + protected + + def password_required? + confirmed? ? super : false + end +end diff --git a/app/views/devise/confirmations/new.html.erb b/app/views/devise/confirmations/new.html.erb new file mode 100644 index 0000000..949b172 --- /dev/null +++ b/app/views/devise/confirmations/new.html.erb @@ -0,0 +1,16 @@ +

Resend confirmation instructions

+ +<%= simple_form_for(resource, as: resource_name, url: confirmation_path(resource_name), html: { method: :post }) do |f| %> + <%= f.error_notification %> + <%= f.full_error :confirmation_token %> + +
+ <%= f.input :email, required: true, autofocus: true %> +
+ +
+ <%= f.button :submit, "Resend confirmation instructions" %> +
+<% end %> + +<%= render "devise/shared/links" %> diff --git a/app/views/devise/mailer/confirmation_instructions.html.erb b/app/views/devise/mailer/confirmation_instructions.html.erb new file mode 100644 index 0000000..dc55f64 --- /dev/null +++ b/app/views/devise/mailer/confirmation_instructions.html.erb @@ -0,0 +1,5 @@ +

Welcome <%= @email %>!

+ +

You can confirm your account email through the link below:

+ +

<%= link_to 'Confirm my account', confirmation_url(@resource, confirmation_token: @token) %>

diff --git a/app/views/devise/mailer/email_changed.html.erb b/app/views/devise/mailer/email_changed.html.erb new file mode 100644 index 0000000..32f4ba8 --- /dev/null +++ b/app/views/devise/mailer/email_changed.html.erb @@ -0,0 +1,7 @@ +

Hello <%= @email %>!

+ +<% if @resource.try(:unconfirmed_email?) %> +

We're contacting you to notify you that your email is being changed to <%= @resource.unconfirmed_email %>.

+<% else %> +

We're contacting you to notify you that your email has been changed to <%= @resource.email %>.

+<% end %> diff --git a/app/views/devise/mailer/password_change.html.erb b/app/views/devise/mailer/password_change.html.erb new file mode 100644 index 0000000..b41daf4 --- /dev/null +++ b/app/views/devise/mailer/password_change.html.erb @@ -0,0 +1,3 @@ +

Hello <%= @resource.email %>!

+ +

We're contacting you to notify you that your password has been changed.

diff --git a/app/views/devise/mailer/reset_password_instructions.html.erb b/app/views/devise/mailer/reset_password_instructions.html.erb new file mode 100644 index 0000000..f667dc1 --- /dev/null +++ b/app/views/devise/mailer/reset_password_instructions.html.erb @@ -0,0 +1,8 @@ +

Hello <%= @resource.email %>!

+ +

Someone has requested a link to change your password. You can do this through the link below.

+ +

<%= link_to 'Change my password', edit_password_url(@resource, reset_password_token: @token) %>

+ +

If you didn't request this, please ignore this email.

+

Your password won't change until you access the link above and create a new one.

diff --git a/app/views/devise/mailer/unlock_instructions.html.erb b/app/views/devise/mailer/unlock_instructions.html.erb new file mode 100644 index 0000000..41e148b --- /dev/null +++ b/app/views/devise/mailer/unlock_instructions.html.erb @@ -0,0 +1,7 @@ +

Hello <%= @resource.email %>!

+ +

Your account has been locked due to an excessive number of unsuccessful sign in attempts.

+ +

Click the link below to unlock your account:

+ +

<%= link_to 'Unlock my account', unlock_url(@resource, unlock_token: @token) %>

diff --git a/app/views/devise/passwords/edit.html.erb b/app/views/devise/passwords/edit.html.erb new file mode 100644 index 0000000..a938930 --- /dev/null +++ b/app/views/devise/passwords/edit.html.erb @@ -0,0 +1,19 @@ +

Change your password

+ +<%= simple_form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :put }) do |f| %> + <%= f.error_notification %> + + <%= f.input :reset_password_token, as: :hidden %> + <%= f.full_error :reset_password_token %> + +
+ <%= f.input :password, label: "New password", required: true, autofocus: true, hint: ("#{@minimum_password_length} characters minimum" if @minimum_password_length) %> + <%= f.input :password_confirmation, label: "Confirm your new password", required: true %> +
+ +
+ <%= f.button :submit, "Change my password" %> +
+<% end %> + +<%= render "devise/shared/links" %> diff --git a/app/views/devise/passwords/new.html.erb b/app/views/devise/passwords/new.html.erb new file mode 100644 index 0000000..d1503e7 --- /dev/null +++ b/app/views/devise/passwords/new.html.erb @@ -0,0 +1,15 @@ +

Forgot your password?

+ +<%= simple_form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :post }) do |f| %> + <%= f.error_notification %> + +
+ <%= f.input :email, required: true, autofocus: true %> +
+ +
+ <%= f.button :submit, "Send me reset password instructions" %> +
+<% end %> + +<%= render "devise/shared/links" %> diff --git a/app/views/devise/registrations/edit.html.erb b/app/views/devise/registrations/edit.html.erb new file mode 100644 index 0000000..5db350b --- /dev/null +++ b/app/views/devise/registrations/edit.html.erb @@ -0,0 +1,27 @@ +

Edit <%= resource_name.to_s.humanize %>

+ +<%= simple_form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| %> + <%= f.error_notification %> + +
+ <%= f.input :email, required: true, autofocus: true %> + + <% if devise_mapping.confirmable? && resource.pending_reconfirmation? %> +

Currently waiting confirmation for: <%= resource.unconfirmed_email %>

+ <% end %> + + <%= f.input :password, autocomplete: "off", hint: "leave it blank if you don't want to change it", required: false %> + <%= f.input :password_confirmation, required: false %> + <%= f.input :current_password, hint: "we need your current password to confirm your changes", required: true %> +
+ +
+ <%= f.button :submit, "Update" %> +
+<% end %> + +

Cancel my account

+ +

Unhappy? <%= link_to "Cancel my account", registration_path(resource_name), data: { confirm: "Are you sure?" }, method: :delete %>

+ +<%= link_to "Back", :back %> diff --git a/app/views/devise/registrations/new.html.erb b/app/views/devise/registrations/new.html.erb new file mode 100644 index 0000000..911a038 --- /dev/null +++ b/app/views/devise/registrations/new.html.erb @@ -0,0 +1,15 @@ +

Sign up

+ +<%= simple_form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %> + <%= f.error_notification %> + +
+ <%= f.input :email, required: true, autofocus: true %> +
+ +
+ <%= f.button :submit, "Sign up" %> +
+<% end %> + +<%= render "devise/shared/links" %> diff --git a/app/views/devise/sessions/new.html.erb b/app/views/devise/sessions/new.html.erb new file mode 100644 index 0000000..31f8a4d --- /dev/null +++ b/app/views/devise/sessions/new.html.erb @@ -0,0 +1,15 @@ +

Log in

+ +<%= simple_form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %> +
+ <%= f.input :email, required: false, autofocus: true %> + <%= f.input :password, required: false %> + <%= f.input :remember_me, as: :boolean if devise_mapping.rememberable? %> +
+ +
+ <%= f.button :submit, "Log in" %> +
+<% end %> + +<%= render "devise/shared/links" %> diff --git a/app/views/devise/shared/_links.html.erb b/app/views/devise/shared/_links.html.erb new file mode 100644 index 0000000..e6a3e41 --- /dev/null +++ b/app/views/devise/shared/_links.html.erb @@ -0,0 +1,25 @@ +<%- if controller_name != 'sessions' %> + <%= link_to "Log in", new_session_path(resource_name) %>
+<% end -%> + +<%- if devise_mapping.registerable? && controller_name != 'registrations' %> + <%= link_to "Sign up", new_registration_path(resource_name) %>
+<% end -%> + +<%- if devise_mapping.recoverable? && controller_name != 'passwords' && controller_name != 'registrations' %> + <%= link_to "Forgot your password?", new_password_path(resource_name) %>
+<% end -%> + +<%- if devise_mapping.confirmable? && controller_name != 'confirmations' %> + <%= link_to "Didn't receive confirmation instructions?", new_confirmation_path(resource_name) %>
+<% end -%> + +<%- if devise_mapping.lockable? && resource_class.unlock_strategy_enabled?(:email) && controller_name != 'unlocks' %> + <%= link_to "Didn't receive unlock instructions?", new_unlock_path(resource_name) %>
+<% end -%> + +<%- if devise_mapping.omniauthable? %> + <%- resource_class.omniauth_providers.each do |provider| %> + <%= link_to "Sign in with #{OmniAuth::Utils.camelize(provider)}", omniauth_authorize_path(resource_name, provider) %>
+ <% end -%> +<% end -%> diff --git a/app/views/devise/unlocks/new.html.erb b/app/views/devise/unlocks/new.html.erb new file mode 100644 index 0000000..788f62e --- /dev/null +++ b/app/views/devise/unlocks/new.html.erb @@ -0,0 +1,16 @@ +

Resend unlock instructions

+ +<%= simple_form_for(resource, as: resource_name, url: unlock_path(resource_name), html: { method: :post }) do |f| %> + <%= f.error_notification %> + <%= f.full_error :unlock_token %> + +
+ <%= f.input :email, required: true, autofocus: true %> +
+ +
+ <%= f.button :submit, "Resend unlock instructions" %> +
+<% end %> + +<%= render "devise/shared/links" %> diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb new file mode 100644 index 0000000..012f213 --- /dev/null +++ b/config/initializers/devise.rb @@ -0,0 +1,279 @@ +# frozen_string_literal: true + +# Use this hook to configure devise mailer, warden hooks and so forth. +# Many of these configuration options can be set straight in your model. +Devise.setup do |config| + # The secret key used by Devise. Devise uses this key to generate + # random tokens. Changing this key will render invalid all existing + # confirmation, reset password and unlock tokens in the database. + # Devise will use the `secret_key_base` as its `secret_key` + # by default. You can change it below and use your own secret key. + # config.secret_key = '00f45515be77f3097584762be03209d6e585bf0c7f7ce5b0b9239a494f5b335d276a87816dcaaf62bd1ffa6d147879e8579dfd6a4ff1e6ab0effa8f31f1efd12' + + # ==> Mailer Configuration + # Configure the e-mail address which will be shown in Devise::Mailer, + # note that it will be overwritten if you use your own mailer class + # with default "from" parameter. + config.mailer_sender = 'please-change-me-at-config-initializers-devise@example.com' + + # Configure the class responsible to send e-mails. + # config.mailer = 'Devise::Mailer' + + # Configure the parent class responsible to send e-mails. + # config.parent_mailer = 'ActionMailer::Base' + + # ==> ORM configuration + # Load and configure the ORM. Supports :active_record (default) and + # :mongoid (bson_ext recommended) by default. Other ORMs may be + # available as additional gems. + require 'devise/orm/active_record' + + # ==> Configuration for any authentication mechanism + # Configure which keys are used when authenticating a user. The default is + # just :email. You can configure it to use [:username, :subdomain], so for + # authenticating a user, both parameters are required. Remember that those + # parameters are used only when authenticating and not when retrieving from + # session. If you need permissions, you should implement that in a before filter. + # You can also supply a hash where the value is a boolean determining whether + # or not authentication should be aborted when the value is not present. + # config.authentication_keys = [:email] + + # Configure parameters from the request object used for authentication. Each entry + # given should be a request method and it will automatically be passed to the + # find_for_authentication method and considered in your model lookup. For instance, + # if you set :request_keys to [:subdomain], :subdomain will be used on authentication. + # The same considerations mentioned for authentication_keys also apply to request_keys. + # config.request_keys = [] + + # Configure which authentication keys should be case-insensitive. + # These keys will be downcased upon creating or modifying a user and when used + # to authenticate or find a user. Default is :email. + config.case_insensitive_keys = [:email] + + # Configure which authentication keys should have whitespace stripped. + # These keys will have whitespace before and after removed upon creating or + # modifying a user and when used to authenticate or find a user. Default is :email. + config.strip_whitespace_keys = [:email] + + # Tell if authentication through request.params is enabled. True by default. + # It can be set to an array that will enable params authentication only for the + # given strategies, for example, `config.params_authenticatable = [:database]` will + # enable it only for database (email + password) authentication. + # config.params_authenticatable = true + + # Tell if authentication through HTTP Auth is enabled. False by default. + # It can be set to an array that will enable http authentication only for the + # given strategies, for example, `config.http_authenticatable = [:database]` will + # enable it only for database authentication. The supported strategies are: + # :database = Support basic authentication with authentication key + password + # config.http_authenticatable = false + + # If 401 status code should be returned for AJAX requests. True by default. + # config.http_authenticatable_on_xhr = true + + # The realm used in Http Basic Authentication. 'Application' by default. + # config.http_authentication_realm = 'Application' + + # It will change confirmation, password recovery and other workflows + # to behave the same regardless if the e-mail provided was right or wrong. + # Does not affect registerable. + # config.paranoid = true + + # By default Devise will store the user in session. You can skip storage for + # particular strategies by setting this option. + # Notice that if you are skipping storage for all authentication paths, you + # may want to disable generating routes to Devise's sessions controller by + # passing skip: :sessions to `devise_for` in your config/routes.rb + config.skip_session_storage = [:http_auth] + + # By default, Devise cleans up the CSRF token on authentication to + # avoid CSRF token fixation attacks. This means that, when using AJAX + # requests for sign in and sign up, you need to get a new CSRF token + # from the server. You can disable this option at your own risk. + # config.clean_up_csrf_token_on_authentication = true + + # When false, Devise will not attempt to reload routes on eager load. + # This can reduce the time taken to boot the app but if your application + # requires the Devise mappings to be loaded during boot time the application + # won't boot properly. + # config.reload_routes = true + + # ==> Configuration for :database_authenticatable + # For bcrypt, this is the cost for hashing the password and defaults to 11. If + # using other algorithms, it sets how many times you want the password to be hashed. + # + # Limiting the stretches to just one in testing will increase the performance of + # your test suite dramatically. However, it is STRONGLY RECOMMENDED to not use + # a value less than 10 in other environments. Note that, for bcrypt (the default + # algorithm), the cost increases exponentially with the number of stretches (e.g. + # a value of 20 is already extremely slow: approx. 60 seconds for 1 calculation). + config.stretches = Rails.env.test? ? 1 : 11 + + # Set up a pepper to generate the hashed password. + # config.pepper = 'b916c16973a45d824cf0f9d2e2020377193d88e11cf47b419fa1a4d47e4ea0c7d088809b06362357dc2aa1ce3d47c3331c6fecdd42eab158ac917a766f328a37' + + # Send a notification to the original email when the user's email is changed. + # config.send_email_changed_notification = false + + # Send a notification email when the user's password is changed. + # config.send_password_change_notification = false + + # ==> Configuration for :confirmable + # A period that the user is allowed to access the website even without + # confirming their account. For instance, if set to 2.days, the user will be + # able to access the website for two days without confirming their account, + # access will be blocked just in the third day. Default is 0.days, meaning + # the user cannot access the website without confirming their account. + # config.allow_unconfirmed_access_for = 2.days + + # A period that the user is allowed to confirm their account before their + # token becomes invalid. For example, if set to 3.days, the user can confirm + # their account within 3 days after the mail was sent, but on the fourth day + # their account can't be confirmed with the token any more. + # Default is nil, meaning there is no restriction on how long a user can take + # before confirming their account. + # config.confirm_within = 3.days + + # If true, requires any email changes to be confirmed (exactly the same way as + # initial account confirmation) to be applied. Requires additional unconfirmed_email + # db field (see migrations). Until confirmed, new email is stored in + # unconfirmed_email column, and copied to email column on successful confirmation. + config.reconfirmable = true + + # Defines which key will be used when confirming an account + # config.confirmation_keys = [:email] + + # ==> Configuration for :rememberable + # The time the user will be remembered without asking for credentials again. + # config.remember_for = 2.weeks + + # Invalidates all the remember me tokens when the user signs out. + config.expire_all_remember_me_on_sign_out = true + + # If true, extends the user's remember period when remembered via cookie. + # config.extend_remember_period = false + + # Options to be passed to the created cookie. For instance, you can set + # secure: true in order to force SSL only cookies. + # config.rememberable_options = {} + + # ==> Configuration for :validatable + # Range for password length. + config.password_length = 6..128 + + # Email regex used to validate email formats. It simply asserts that + # one (and only one) @ exists in the given string. This is mainly + # to give user feedback and not to assert the e-mail validity. + config.email_regexp = /\A[^@\s]+@[^@\s]+\z/ + + # ==> Configuration for :timeoutable + # The time you want to timeout the user session without activity. After this + # time the user will be asked for credentials again. Default is 30 minutes. + # config.timeout_in = 30.minutes + + # ==> Configuration for :lockable + # Defines which strategy will be used to lock an account. + # :failed_attempts = Locks an account after a number of failed attempts to sign in. + # :none = No lock strategy. You should handle locking by yourself. + # config.lock_strategy = :failed_attempts + + # Defines which key will be used when locking and unlocking an account + # config.unlock_keys = [:email] + + # Defines which strategy will be used to unlock an account. + # :email = Sends an unlock link to the user email + # :time = Re-enables login after a certain amount of time (see :unlock_in below) + # :both = Enables both strategies + # :none = No unlock strategy. You should handle unlocking by yourself. + # config.unlock_strategy = :both + + # Number of authentication tries before locking an account if lock_strategy + # is failed attempts. + # config.maximum_attempts = 20 + + # Time interval to unlock the account if :time is enabled as unlock_strategy. + # config.unlock_in = 1.hour + + # Warn on the last attempt before the account is locked. + # config.last_attempt_warning = true + + # ==> Configuration for :recoverable + # + # Defines which key will be used when recovering the password for an account + # config.reset_password_keys = [:email] + + # Time interval you can reset your password with a reset password key. + # Don't put a too small interval or your users won't have the time to + # change their passwords. + config.reset_password_within = 6.hours + + # When set to false, does not sign a user in automatically after their password is + # reset. Defaults to true, so a user is signed in automatically after a reset. + # config.sign_in_after_reset_password = true + + # ==> Configuration for :encryptable + # Allow you to use another hashing or encryption algorithm besides bcrypt (default). + # You can use :sha1, :sha512 or algorithms from others authentication tools as + # :clearance_sha1, :authlogic_sha512 (then you should set stretches above to 20 + # for default behavior) and :restful_authentication_sha1 (then you should set + # stretches to 10, and copy REST_AUTH_SITE_KEY to pepper). + # + # Require the `devise-encryptable` gem when using anything other than bcrypt + # config.encryptor = :sha512 + + # ==> Scopes configuration + # Turn scoped views on. Before rendering "sessions/new", it will first check for + # "users/sessions/new". It's turned off by default because it's slower if you + # are using only default views. + # config.scoped_views = false + + # Configure the default scope given to Warden. By default it's the first + # devise role declared in your routes (usually :user). + # config.default_scope = :user + + # Set this configuration to false if you want /users/sign_out to sign out + # only the current scope. By default, Devise signs out all scopes. + # config.sign_out_all_scopes = true + + # ==> Navigation configuration + # Lists the formats that should be treated as navigational. Formats like + # :html, should redirect to the sign in page when the user does not have + # access, but formats like :xml or :json, should return 401. + # + # If you have any extra navigational formats, like :iphone or :mobile, you + # should add them to the navigational formats lists. + # + # The "*/*" below is required to match Internet Explorer requests. + # config.navigational_formats = ['*/*', :html] + + # The default HTTP method used to sign out a resource. Default is :delete. + config.sign_out_via = :delete + + # ==> OmniAuth + # Add a new OmniAuth provider. Check the wiki for more information on setting + # up on your models and hooks. + # config.omniauth :github, 'APP_ID', 'APP_SECRET', scope: 'user,public_repo' + + # ==> Warden configuration + # If you want to use other strategies, that are not supported by Devise, or + # change the failure app, you can configure them inside the config.warden block. + # + # config.warden do |manager| + # manager.intercept_401 = false + # manager.default_strategies(scope: :user).unshift :some_external_strategy + # end + + # ==> Mountable engine configurations + # When using Devise inside an engine, let's call it `MyEngine`, and this engine + # is mountable, there are some extra configurations to be taken into account. + # The following options are available, assuming the engine is mounted as: + # + # mount MyEngine, at: '/my_engine' + # + # The router that invoked `devise_for`, in the example above, would be: + # config.router_name = :my_engine + # + # When using OmniAuth, Devise cannot automatically set OmniAuth path, + # so you need to do it manually. For the users scope, it would be: + # config.omniauth_path_prefix = '/my_engine/users/auth' +end diff --git a/config/locales/devise.en.yml b/config/locales/devise.en.yml new file mode 100644 index 0000000..0b8f130 --- /dev/null +++ b/config/locales/devise.en.yml @@ -0,0 +1,64 @@ +# Additional translations at https://github.com/plataformatec/devise/wiki/I18n + +en: + devise: + confirmations: + confirmed: "Your email address has been successfully confirmed." + send_instructions: "You will receive an email with instructions for how to confirm your email address in a few minutes." + send_paranoid_instructions: "If your email address exists in our database, you will receive an email with instructions for how to confirm your email address in a few minutes." + failure: + already_authenticated: "You are already signed in." + inactive: "Your account is not activated yet." + invalid: "Invalid %{authentication_keys} or password." + locked: "Your account is locked." + last_attempt: "You have one more attempt before your account is locked." + not_found_in_database: "Invalid %{authentication_keys} or password." + timeout: "Your session expired. Please sign in again to continue." + unauthenticated: "You need to sign in or sign up before continuing." + unconfirmed: "You have to confirm your email address before continuing." + mailer: + confirmation_instructions: + subject: "Confirmation instructions" + reset_password_instructions: + subject: "Reset password instructions" + unlock_instructions: + subject: "Unlock instructions" + email_changed: + subject: "Email Changed" + password_change: + subject: "Password Changed" + omniauth_callbacks: + failure: "Could not authenticate you from %{kind} because \"%{reason}\"." + success: "Successfully authenticated from %{kind} account." + passwords: + no_token: "You can't access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided." + send_instructions: "You will receive an email with instructions on how to reset your password in a few minutes." + send_paranoid_instructions: "If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes." + updated: "Your password has been changed successfully. You are now signed in." + updated_not_active: "Your password has been changed successfully." + registrations: + destroyed: "Bye! Your account has been successfully cancelled. We hope to see you again soon." + signed_up: "Welcome! You have signed up successfully." + signed_up_but_inactive: "You have signed up successfully. However, we could not sign you in because your account is not yet activated." + signed_up_but_locked: "You have signed up successfully. However, we could not sign you in because your account is locked." + signed_up_but_unconfirmed: "A message with a confirmation link has been sent to your email address. Please follow the link to activate your account." + update_needs_confirmation: "You updated your account successfully, but we need to verify your new email address. Please check your email and follow the confirm link to confirm your new email address." + updated: "Your account has been updated successfully." + sessions: + signed_in: "Signed in successfully." + signed_out: "Signed out successfully." + already_signed_out: "Signed out successfully." + unlocks: + send_instructions: "You will receive an email with instructions for how to unlock your account in a few minutes." + send_paranoid_instructions: "If your account exists, you will receive an email with instructions for how to unlock it in a few minutes." + unlocked: "Your account has been unlocked successfully. Please sign in to continue." + errors: + messages: + already_confirmed: "was already confirmed, please try signing in" + confirmation_period_expired: "needs to be confirmed within %{period}, please request a new one" + expired: "has expired, please request a new one" + not_found: "not found" + not_locked: "was not locked" + not_saved: + one: "1 error prohibited this %{resource} from being saved:" + other: "%{count} errors prohibited this %{resource} from being saved:" diff --git a/config/routes.rb b/config/routes.rb index 1bbef90..d6f117f 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,4 +1,7 @@ Rails.application.routes.draw do + devise_for :users, controllers: { + confirmations: 'users/confirmations' + } resources :auth_tokens, only: [:show, :new, :create] resources :secrets, only: [:show, :new, :create, :edit, :update] resources :decrypted_secrets, only: :create diff --git a/db/migrate/20190611063450_devise_create_users.rb b/db/migrate/20190611063450_devise_create_users.rb new file mode 100644 index 0000000..2f735e1 --- /dev/null +++ b/db/migrate/20190611063450_devise_create_users.rb @@ -0,0 +1,44 @@ +# frozen_string_literal: true + +class DeviseCreateUsers < ActiveRecord::Migration + def change + create_table :users do |t| + ## Database authenticatable + t.string :email, null: false, default: "" + t.string :encrypted_password, null: false, default: "" + + ## Recoverable + t.string :reset_password_token + t.datetime :reset_password_sent_at + + ## Rememberable + t.datetime :remember_created_at + + ## Trackable + t.integer :sign_in_count, default: 0, null: false + t.datetime :current_sign_in_at + t.datetime :last_sign_in_at + t.inet :current_sign_in_ip + t.inet :last_sign_in_ip + + ## Confirmable + t.string :confirmation_token + t.datetime :confirmed_at + t.datetime :confirmation_sent_at + t.string :unconfirmed_email # Only if using reconfirmable + + ## Lockable + # t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts + # t.string :unlock_token # Only if unlock strategy is :email or :both + # t.datetime :locked_at + + + t.timestamps null: false + end + + add_index :users, :email, unique: true + add_index :users, :reset_password_token, unique: true + add_index :users, :confirmation_token, unique: true + # add_index :users, :unlock_token, unique: true + end +end diff --git a/db/schema.rb b/db/schema.rb index 4fafe2a..5853dd5 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20170408130142) do +ActiveRecord::Schema.define(version: 20190611063450) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -41,4 +41,27 @@ t.string "access_key" end + create_table "users", force: :cascade do |t| + t.string "email", default: "", null: false + t.string "encrypted_password", default: "", null: false + t.string "reset_password_token" + t.datetime "reset_password_sent_at" + t.datetime "remember_created_at" + t.integer "sign_in_count", default: 0, null: false + t.datetime "current_sign_in_at" + t.datetime "last_sign_in_at" + t.inet "current_sign_in_ip" + t.inet "last_sign_in_ip" + t.string "confirmation_token" + t.datetime "confirmed_at" + t.datetime "confirmation_sent_at" + t.string "unconfirmed_email" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + add_index "users", ["confirmation_token"], name: "index_users_on_confirmation_token", unique: true, using: :btree + add_index "users", ["email"], name: "index_users_on_email", unique: true, using: :btree + add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true, using: :btree + end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb new file mode 100644 index 0000000..5ccb642 --- /dev/null +++ b/spec/models/user_spec.rb @@ -0,0 +1,12 @@ +require 'rails_helper' + +describe User do + describe '#set_reset_password_token' do + it 'returns the plaintext token' do + potential_token = subject.send(:set_reset_password_token) + potential_token_digest = Devise.token_generator.digest(subject, :reset_password_token, potential_token) + actual_token_digest = subject.reset_password_token + expect(potential_token_digest).to eql(actual_token_digest) + end + end +end diff --git a/test/fixtures/users.yml b/test/fixtures/users.yml new file mode 100644 index 0000000..937a0c0 --- /dev/null +++ b/test/fixtures/users.yml @@ -0,0 +1,11 @@ +# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html + +# This model initially had no columns defined. If you add columns to the +# model remove the '{}' from the fixture names and add the columns immediately +# below each fixture, per the syntax in the comments below +# +one: {} +# column: value +# +two: {} +# column: value diff --git a/test/models/user_test.rb b/test/models/user_test.rb new file mode 100644 index 0000000..82f61e0 --- /dev/null +++ b/test/models/user_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class UserTest < ActiveSupport::TestCase + # test "the truth" do + # assert true + # end +end diff --git a/vendor/cache/bcrypt-3.1.11.gem b/vendor/cache/bcrypt-3.1.11.gem new file mode 100644 index 0000000000000000000000000000000000000000..53fa448cab6e771238edb0e802ccce15dcdf2bee GIT binary patch literal 44032 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 V>c6xb{kL%cZGr!`!2g35_#as*WLp3L literal 0 HcmV?d00001 diff --git a/vendor/cache/devise-4.4.0.gem b/vendor/cache/devise-4.4.0.gem new file mode 100644 index 0000000000000000000000000000000000000000..389bab7bfbf93b0e5225db46f4cf9c262cd0e40f GIT binary patch literal 169984 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 YS_&!t*7x+QxL*qVQs9>Y|7!*Q00X2;q5uE@ literal 0 HcmV?d00001 diff --git a/vendor/cache/orm_adapter-0.5.0.gem b/vendor/cache/orm_adapter-0.5.0.gem new file mode 100644 index 0000000000000000000000000000000000000000..fbc5b178f4d6dc1a59c3b5ae55d17da1f8d9302b GIT binary patch literal 15360 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 DW{Jy5 literal 0 HcmV?d00001 diff --git a/vendor/cache/warden-1.2.7.gem b/vendor/cache/warden-1.2.7.gem new file mode 100644 index 0000000000000000000000000000000000000000..49fb8082440c20a392eeded59122a6488ce1bc12 GIT binary patch literal 32256 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 literal 0 HcmV?d00001 From b1d60d526f9c10bb103476f900b159ef99f43633 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Mon, 24 Jun 2019 13:00:09 +0800 Subject: [PATCH 003/152] Rewords password edit form --- app/views/devise/passwords/edit.html.erb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/devise/passwords/edit.html.erb b/app/views/devise/passwords/edit.html.erb index a938930..5743635 100644 --- a/app/views/devise/passwords/edit.html.erb +++ b/app/views/devise/passwords/edit.html.erb @@ -1,4 +1,4 @@ -

Change your password

+

Set your password

<%= simple_form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :put }) do |f| %> <%= f.error_notification %> @@ -12,7 +12,7 @@
- <%= f.button :submit, "Change my password" %> + <%= f.button :submit, "Set my password" %>
<% end %> From afec29903494988fd380b07da20b2b1513007aa4 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Mon, 24 Jun 2019 13:28:10 +0800 Subject: [PATCH 004/152] Adds dashboard page --- app/controllers/authenticated_controller.rb | 3 +++ app/controllers/dashboard_controller.rb | 4 ++++ app/views/dashboard/show.html.erb | 1 + app/views/shared/_header.html.erb | 5 +++++ config/initializers/devise.rb | 2 +- config/routes.rb | 2 ++ 6 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 app/controllers/authenticated_controller.rb create mode 100644 app/controllers/dashboard_controller.rb create mode 100644 app/views/dashboard/show.html.erb diff --git a/app/controllers/authenticated_controller.rb b/app/controllers/authenticated_controller.rb new file mode 100644 index 0000000..f9ed256 --- /dev/null +++ b/app/controllers/authenticated_controller.rb @@ -0,0 +1,3 @@ +class AuthenticatedController < ApplicationController + before_action :authenticate_user! +end diff --git a/app/controllers/dashboard_controller.rb b/app/controllers/dashboard_controller.rb new file mode 100644 index 0000000..28c4943 --- /dev/null +++ b/app/controllers/dashboard_controller.rb @@ -0,0 +1,4 @@ +class DashboardController < AuthenticatedController + def show + end +end diff --git a/app/views/dashboard/show.html.erb b/app/views/dashboard/show.html.erb new file mode 100644 index 0000000..9e01032 --- /dev/null +++ b/app/views/dashboard/show.html.erb @@ -0,0 +1 @@ +
Dashboard
diff --git a/app/views/shared/_header.html.erb b/app/views/shared/_header.html.erb index 8dbdfba..0f079e4 100644 --- a/app/views/shared/_header.html.erb +++ b/app/views/shared/_header.html.erb @@ -4,5 +4,10 @@
  • How it works
  • FAQ
  • About
  • + <% if user_signed_in? %> +
  • <%= link_to('Logout', destroy_user_session_path, method: :delete) %>
  • + <% else %> +
  • <%= link_to('Login', new_user_session_path) %>
  • + <% end %> diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb index 012f213..e2bf7bc 100644 --- a/config/initializers/devise.rb +++ b/config/initializers/devise.rb @@ -247,7 +247,7 @@ # config.navigational_formats = ['*/*', :html] # The default HTTP method used to sign out a resource. Default is :delete. - config.sign_out_via = :delete + config.sign_out_via = :get # ==> OmniAuth # Add a new OmniAuth provider. Check the wiki for more information on setting diff --git a/config/routes.rb b/config/routes.rb index d6f117f..72a4ba7 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -18,4 +18,6 @@ get '/copyright', to: 'pages#copyright' get '/privacy_policy', to: 'pages#privacy_policy' get '/terms_and_conditions', to: 'pages#terms_and_conditions' + + get 'dashboard' , to: 'dashboard#show' end From fab9763287727e70c8838e0872874e7514af99b3 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Mon, 24 Jun 2019 14:26:56 +0800 Subject: [PATCH 005/152] Adds temporary notice flash Adds pry on dev and test environments --- Gemfile | 1 + Gemfile.lock | 5 +++++ app/views/shared/_flash_messages.html.erb | 14 +++++++++++++- vendor/cache/method_source-0.9.2.gem | Bin 0 -> 13824 bytes vendor/cache/pry-0.12.2.gem | Bin 0 -> 156160 bytes 5 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 vendor/cache/method_source-0.9.2.gem create mode 100644 vendor/cache/pry-0.12.2.gem diff --git a/Gemfile b/Gemfile index 49d015b..b2d24da 100644 --- a/Gemfile +++ b/Gemfile @@ -52,4 +52,5 @@ end group :development, :test do gem "byebug" gem "dotenv-rails" + gem 'pry' end diff --git a/Gemfile.lock b/Gemfile.lock index 0c42fcc..41be25c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -121,6 +121,7 @@ GEM nokogiri (>= 1.5.9) mail (2.6.4) mime-types (>= 1.16, < 4) + method_source (0.9.2) mime-types (3.1) mime-types-data (~> 3.2015) mime-types-data (3.2016.0521) @@ -160,6 +161,9 @@ GEM cliver (~> 0.3.1) websocket-driver (>= 0.2.0) powerpack (0.1.1) + pry (0.12.2) + coderay (~> 1.1.0) + method_source (~> 0.9.0) public_suffix (2.0.5) quiet_assets (1.1.0) railties (>= 3.1, < 5.0) @@ -307,6 +311,7 @@ DEPENDENCIES pg pickadate-rails poltergeist + pry quiet_assets rails (~> 4.2.8) rails_12factor diff --git a/app/views/shared/_flash_messages.html.erb b/app/views/shared/_flash_messages.html.erb index 51487aa..e1ff36a 100644 --- a/app/views/shared/_flash_messages.html.erb +++ b/app/views/shared/_flash_messages.html.erb @@ -12,4 +12,16 @@ -<% end %> \ No newline at end of file +<% end %> + + +<% if flash[:notice] %> +
    +
    + +
    +
    +<% end %> diff --git a/vendor/cache/method_source-0.9.2.gem b/vendor/cache/method_source-0.9.2.gem new file mode 100644 index 0000000000000000000000000000000000000000..c12e342307cf6eec78fe5451b5654f385528463f GIT binary patch literal 13824 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 IKL~;U0VQ)E)&Kwi literal 0 HcmV?d00001 diff --git a/vendor/cache/pry-0.12.2.gem b/vendor/cache/pry-0.12.2.gem new file mode 100644 index 0000000000000000000000000000000000000000..e7c4ee1811959c2a7c6d787e0490cfbc1290c3c1 GIT binary patch literal 156160 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

    UT(e0sYuwQ< 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�VG#iygIBs}FDTA)KycC!+>RtgIsd;DcU7KId_h&o*-qL?A zVz9#h_u*C<|LfuQcVEu`AMr=(CfP*HGHFX`rYIX^(+)!mgFrk>2l)mCmcB|RXY=z$ zMFk$zZv*jJ6OJbY=J3fl9`v&OJ%Y}fv|$vp;y@G-A@4&?kRn&GdxJbj5~FyJ*aiGT z1`T@6F*h;F0PP)7z-EXTi^MG0ilQxP0wut{K$`A#VRYj~e*yh7*uf{+O-ES-UFPM) z6to~GAFBd;H>#OgY)+(_LBeh~eo%-pC9@ygd zSR$;~Um(}izxwiclX~05u`_0t#(+0}^5PiJkJ93JE+J-lWOM)O3sjie+b)rqx8fop z%K2|yDXgV-x#(@>n%UO>T^3GG_Z?TyPNP{ubdde@wWH94(xQoo1+!YNp?~#d@}~5* z>tkokTbQjs{l=x~ZT+ccb>K~Tfw;kcizRZCd#6R>i8Jdop8W>Wr$4S>@MZ-D(rj0+%ywyEw*Ot$W&2Z> zWm~KYx)7uz@H{d3QOH|38x4Etv6e$n*;oIy|L*CV14`Frej#AHMlp`&I!#8#mk3;- zjE9f=O4MEH&ja2$=mZAZbk$$X*(Etg&%7dvL_dKDmNypC5ZxBoI>NT=^JJEy+FqTf z$t<1?&aWfS9?iNpf~A5O7|g;UkyJ9qj=+AsPUd=Y4-emVI^^Tc=4ga}07t)BIvlds z%?VX zH1U)NQ*~^Y%*N33i%DZZy~#P*A>MY!&jv@mG+NLxx^nD5!3e%bJ4&x@-Wyv=Fd`=< zIGOCdz}nWM4!`P#h{*(A>0f`XO!<3m)0wUAH67{IpM!sz_tf9;lWg9LA(DH9A&9#o z`jLVt|5t7N8XO1F{o^qF>f^7Eqx(O6wE>We_I0nfm|RSuwcUV+A2vk%3a0AQW4UMN#w1bdoh4(=(uy#)L3N2R((As9YjF0l zA-r0^Sg8xp&HS3wgtGZ{oTq2!BmLhzpa4(^EjvrzPuuQI58KhZ zuhXC5@7D>q&{13TRdkjw`T>23*<*1heN@fItq+BIZhmNez_&M#H!5B>(O_rk8%$M< z;7X>ynz}H2Z)`5sd3?_o8!s)I+6e8adNaZHjk5|&2dv!eULCV8AWhmHS_aX zwm3Vd=o0|TiZA1Igvw6Lwx8FIFq;@` zQ*?wxzs7O;KAjMWeZK$p-Tt$^!~N%$^v&Zl-9(Q*#8I~u{6-gwg-5lxXN0H#8_1z3 zm|$t_E&h$8tpY>^aKOr9p8eFRf@#dvn&2Q&|GNI| zcaI+0Dvz21ORU*eO$PabA6;Wj;psdMtB0&dVmhA9dKe?bT(og%(o9>9kl^~qaXLqW zWTay;F}e=Jbd$d>W%tu;N=1DZ#RTtA!#>}GN`xPiA%W;87BmlC?t`_~2aIuDV}CM; zlIcT`^+NOLP0`VI!FkyCZL+@rXR6s!OxV^1o^VsIVG0>jyaYC!i6+8wjbf@9wNw4J zl>4qQEvgrceRX$l%j_cNjl@aq5(~HwwP&&(g%hSyQr|){r

    >ZJ9-R7zpw>+4X_33?jBPmzUkvaR?@)mX&#n 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

    $)Nl-BB@&jc0gg= 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 Date: Mon, 24 Jun 2019 14:59:12 +0800 Subject: [PATCH 006/152] Redirects to dashboard after setting the password --- app/controllers/users/passwords_controller.rb | 38 +++++++++++++++++++ config/routes.rb | 3 +- 2 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 app/controllers/users/passwords_controller.rb diff --git a/app/controllers/users/passwords_controller.rb b/app/controllers/users/passwords_controller.rb new file mode 100644 index 0000000..093ac71 --- /dev/null +++ b/app/controllers/users/passwords_controller.rb @@ -0,0 +1,38 @@ +# frozen_string_literal: true + +class Users::PasswordsController < Devise::PasswordsController + # GET /resource/password/new + # def new + # super + # end + + # POST /resource/password + # def create + # super + # end + + # GET /resource/password/edit?reset_password_token=abcdef + # def edit + # super + # end + + # PUT /resource/password + # def update + # super + # end + + # protected + + def after_resetting_password_path_for(resource) + # TODO: this path is also being used by user registration flow + # (After confirming the account, the user is asked to edit/set the password) + # Please fix accordingly if the path is not desired + # when editing password out of registration's context + dashboard_path + end + + # The path used after sending reset password instructions + # def after_sending_reset_password_instructions_path_for(resource_name) + # super(resource_name) + # end +end diff --git a/config/routes.rb b/config/routes.rb index 72a4ba7..a8c25aa 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,6 +1,7 @@ Rails.application.routes.draw do devise_for :users, controllers: { - confirmations: 'users/confirmations' + confirmations: 'users/confirmations', + passwords: 'users/passwords' } resources :auth_tokens, only: [:show, :new, :create] resources :secrets, only: [:show, :new, :create, :edit, :update] From 7f9ff216a95ef9b986e984ddd22108e86f1fc6e4 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Mon, 24 Jun 2019 15:35:25 +0800 Subject: [PATCH 007/152] Adds a new homepage with a registration form --- app/controllers/pages_controller.rb | 6 +- app/views/pages/home.html.erb | 142 ++++++++++++++++++++++++++++ config/routes.rb | 2 +- 3 files changed, 147 insertions(+), 3 deletions(-) create mode 100644 app/views/pages/home.html.erb diff --git a/app/controllers/pages_controller.rb b/app/controllers/pages_controller.rb index e319e07..eb33e63 100644 --- a/app/controllers/pages_controller.rb +++ b/app/controllers/pages_controller.rb @@ -1,4 +1,7 @@ class PagesController < ApplicationController + def home + @user = User.new + end def copyright end @@ -8,5 +11,4 @@ def privacy_policy def terms_and_conditions end - -end \ No newline at end of file +end diff --git a/app/views/pages/home.html.erb b/app/views/pages/home.html.erb new file mode 100644 index 0000000..2e7a821 --- /dev/null +++ b/app/views/pages/home.html.erb @@ -0,0 +1,142 @@ +

    +

    Share secrets such as passwords, API keys, and SSL certificates simply and securely.

    + + <% unless user_signed_in? %> + <%= simple_form_for(@user, url: registration_path(@user)) do |f| %> +

    Share a secret now...

    + <%= f.input :email, required: true, label: false, placeholder: 'Enter your email address', input_html: { class: 'form-control center-block' } %> + <%= invisible_recaptcha_tags text: 'Register', class: 'button white' %> + + + <%= link_to "Register with a Google Account", '/auth/google_oauth2', id: 'oauth-google', class: "google-link" %> + <% end %> + <% end %> +
    + +
    +
      +
    • + <%= image_tag "homepage-icons/your-secret.svg" %> +

      Your secret is yours to keep and share

      +

      SecretLink.org ecrypts your data and sends the only key to decrypt it to your receipient. Once they view the secret we delete the encrypted version from our database.

      +
    • +
    • + <%= image_tag "homepage-icons/fast-and-forgetful.svg" %> +

      It works fast and is conveniently forgetful

      +

      Because SecretLink.org does not keep the decryption keys, we can't decrypt your data, also your data has an expiry, once expired, no one can decrypt and we delete it from the system.

      +
    • +
    • + <%= image_tag "homepage-icons/simple-and-efficient.svg" %> +

      It's simple & efficient

      +

      All you need is a valid email or sign in via Google. No new passwords to remember, no accounts to worry about.

      +
    • +
    +
    + +
    + +
    +
    +

    01

    +

    Authenticate Yourself

    +
    +
    + <%= image_tag "homepage-icons/step02.svg" %> +

    Either enter your email and click on the link we send you or use Google OAuth so we can get to know you, it's a trust thing :)

    +
    +
    + +
    +
    +

    02

    +

    You add the secret sauce

    +
    +
    + <%= image_tag "homepage-icons/step03.svg" %> +

    Then you enter your secret, ensure the recipient is correct, add comments and expiry and hit send to mail them the only copy of the decryption key.

    +
    +
    + +
    +
    +

    03

    +

    Share the love

    +
    +
    + <%= image_tag "homepage-icons/step04.svg" %> +

    Once they view the secret, the encrypted copy is deleted from the system, never to be seen again. No data is even better than encrypted data!

    +
    +
    + +
    + +
    +

    What goes on behind the scenes?

    +

    Shh... it's a secret! But you look trustworthy... read on :)

    +
    + +
    + +
    +
    +

    + About SecretLink.org +

    +
    +

    SecretLink.org is available for anyone to use, it is a Ruby on Rails application created and built by <%= link_to "reinteractive", "https://reinteractive.net" %> and hosted through reinteractive's <%= link_to "OpsCare", "https://reinteractive.net/service/ops-care/" %> service. It has been made open source to ensure transparency on the service and to encourage contribution to improve the security of the application.

    +

    If you do not want to (or can not) use our hosted version, you are welcome to run your own version for your own company or organisation, we only

    +
    +
    +

    stipulate that you may not run it as a service for third parties in competition to https://SecretLink.org/

    +

    If you would like assistance getting SecretLink.org (or any other Rails application) setup, hosted and maintained on AWS, please consider <%= link_to "contacting us", "https://reinteractive.net/enquiries/new?message=I%27d+like+to+get+some+more+information+to+setup+SecretLink.org..." %> to get more information about our Ruby on Rails <%= link_to "OpsCare", "https://reinteractive.net/service/ops-care/" %> and <%= link_to "CodeCare", "https://reinteractive.net/service/code-care/" %> services.

    +

    It is free to use and is governed by our <%= link_to "Terms & Conditions", "/terms_and_conditions" %>.

    +
    +
    +
    + +<%= render partial: 'shared/ga' %> diff --git a/config/routes.rb b/config/routes.rb index a8c25aa..eed1b62 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -14,7 +14,7 @@ get '/auth/failure', to: 'oauth_callbacks#auth_failure' get '/auth/new', to: 'auth_tokens#new' - root 'auth_tokens#new' + root 'pages#home' get '/copyright', to: 'pages#copyright' get '/privacy_policy', to: 'pages#privacy_policy' From bc0aa165207117d1622bb11a2e88022a6462b074 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Mon, 24 Jun 2019 16:56:44 +0800 Subject: [PATCH 008/152] Adds user registration test --- spec/features/user_registration_spec.rb | 52 +++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 spec/features/user_registration_spec.rb diff --git a/spec/features/user_registration_spec.rb b/spec/features/user_registration_spec.rb new file mode 100644 index 0000000..4e2c8bd --- /dev/null +++ b/spec/features/user_registration_spec.rb @@ -0,0 +1,52 @@ +require 'rails_helper' + +describe 'User registration with email' do + describe 'successful' do + let(:email) { "user@secretlink.org" } + + it 'creates an unconfirmed user' do + visit root_path + + fill_in "user[email]", with: email + expect { click_button "Register" }.to change { User.count }.by(1) + + user = User.last + expect(user.email).to eq email + expect(user.confirmation_token).to_not be_nil + expect(user.confirmed_at).to be_nil + end + + it 'shows a confirmation message' do + visit root_path + + fill_in "user[email]", with: email + click_button "Register" + expect(page).to have_content I18n.t('devise.registrations.signed_up_but_unconfirmed') + end + + it 'sends a confirmation email' do + visit root_path + + fill_in "user[email]", with: email + click_button "Register" + + mail = ActionMailer::Base.deliveries.last + + expect(mail.to).to match_array([email]) + expect(mail.subject).to eq "Confirmation instructions" + end + end + + describe 'unsuccessful' do + let (:invalid_email) { "invalidemail" } + + it 'does not create a user' do + visit root_path + + expect(page).to have_content("Register") + fill_in "user[email]", with: invalid_email + + expect { click_button "Register" }.to_not change { User.count } + end + end +end From 381d880a878daaa4e48deaea4a3f591571f75da1 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Tue, 25 Jun 2019 08:58:03 +0800 Subject: [PATCH 009/152] Setups factory_bot --- Gemfile | 2 +- Gemfile.lock | 12 ++++++------ spec/factories/users.rb | 14 ++++++++++++++ spec/support/factory_bot.rb | 3 +++ vendor/cache/factory_bot-5.0.2.gem | Bin 0 -> 37376 bytes vendor/cache/factory_bot_rails-5.0.2.gem | Bin 0 -> 10752 bytes 6 files changed, 24 insertions(+), 7 deletions(-) create mode 100644 spec/factories/users.rb create mode 100644 spec/support/factory_bot.rb create mode 100644 vendor/cache/factory_bot-5.0.2.gem create mode 100644 vendor/cache/factory_bot_rails-5.0.2.gem diff --git a/Gemfile b/Gemfile index b2d24da..89e6a6d 100644 --- a/Gemfile +++ b/Gemfile @@ -42,7 +42,7 @@ group :test do gem "capybara" gem "poltergeist" gem "rspec-rails" - gem "factory_girl_rails" + gem "factory_bot_rails" gem "database_cleaner" gem "faker" gem "launchy" diff --git a/Gemfile.lock b/Gemfile.lock index 41be25c..8e3adba 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -88,11 +88,11 @@ GEM encryptor (3.0.0) erubis (2.7.0) execjs (2.7.0) - factory_girl (4.8.0) - activesupport (>= 3.0.0) - factory_girl_rails (4.8.0) - factory_girl (~> 4.8.0) - railties (>= 3.0.0) + factory_bot (5.0.2) + activesupport (>= 4.2.0) + factory_bot_rails (5.0.2) + factory_bot (~> 5.0.2) + railties (>= 4.2.0) faker (1.7.3) i18n (~> 0.5) faraday (0.11.0) @@ -300,7 +300,7 @@ DEPENDENCIES devise dotenv-rails email_validator - factory_girl_rails + factory_bot_rails faker jbuilder (~> 2.0) jquery-rails diff --git a/spec/factories/users.rb b/spec/factories/users.rb new file mode 100644 index 0000000..1a6979d --- /dev/null +++ b/spec/factories/users.rb @@ -0,0 +1,14 @@ +FactoryBot.define do + factory :user do + email { 'user@secretlink.org' } + password { 'password' } + password_confirmation { 'password' } + + trait :unconfirmed do + password { nil } + password_confirmation { nil } + confirmation_token { 'token' } + confirmed_at { nil } + end + end +end diff --git a/spec/support/factory_bot.rb b/spec/support/factory_bot.rb new file mode 100644 index 0000000..c7890e4 --- /dev/null +++ b/spec/support/factory_bot.rb @@ -0,0 +1,3 @@ +RSpec.configure do |config| + config.include FactoryBot::Syntax::Methods +end diff --git a/vendor/cache/factory_bot-5.0.2.gem b/vendor/cache/factory_bot-5.0.2.gem new file mode 100644 index 0000000000000000000000000000000000000000..f5155deb9a9d97c8333afff366a332a9830f4226 GIT binary patch literal 37376 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 literal 0 HcmV?d00001 diff --git a/vendor/cache/factory_bot_rails-5.0.2.gem b/vendor/cache/factory_bot_rails-5.0.2.gem new file mode 100644 index 0000000000000000000000000000000000000000..12fa46034f68610389ce7a649df8e32b4ce64149 GIT binary patch literal 10752 zcmeHtRZtvCw=O=oJ40}{!6iT-Sa5fD2=49>2*Di^7~Gu+Hh6Fd65L&ay9AlD&%F=- zssG{Lr?c<5ReQax?poE|tH194x~sl+vi3B$GWRs+wDpJk?=sL|#>dA8_n-bR`*+XH z!_Nc9&CAEnC%_Nl7x*jwSA|aijvDmemC%3f*UQ7x-2JbVeC({P9sg_K-^%~D`2U{U zzb5x@&HtxXslK4XxvDoAAs`OuIJwM#a9__%&F`$iSB*7+J@^Fm=@l_V6%^EAYP<9c z{dCO{r;b&)&)yUArVGDnK=$@?%lF#>Xa19IlDJd0rSeS4Ds|KzCz$k>B>Ywu>^x_Y zI?`@vaS49=kZk%2@6TI>jl1M=GGZ&PJ!L8~%()a|I6D_fvqV0YPV`0V(HDd1%X+d1 ze^d~IFa}YNOO|^QWl7@{H45C#Ne5g~!rbI_+`|CDFS71uQ`;bMU%dX#&3w6?tncTb zJh2;$kph(Th*2a+^88lb1UqAlFNblO^7IEaXU+DaDDrsSaqhxQq=)6FppFISXK%xw z?FTA*%wDPFVcav!O!WEr0%rLL&W0W7Q8JyWM5wArk6|TuYr7XMeh?9=?q{Z{&I?c+ zxO@VJEDZQcrViDC3~EN!)gdpd6#xlK8TgfZ*Wk*nJw~-v-hR{!;hFoy+6pfvQJ6Me zDV9DL|TW67miRx2kQSaBp z%!n<0W{{5Us*@Z+0!ocTi{Z1pzc*t z@aXkQ%c8@>vZME51KHUpCres$6Dn^bb2J>P(6n+6>OIFb${DVoZjxt(wbl+8T@5>d zA3}J0l%i*-kvuuRN9K?WLw~g`H!`zEvVEPsH-^~#xP^RR;BoA$9hv}SN{8?G8oSDd zywZMe=ENHnN!ZIYbD{``h*cWC@iG=+a9H53R-dG_eDQ#IZ0HPH$$`;m8B3fns9x4xj8pNh&6N=ExGD%q3~at= z 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 literal 0 HcmV?d00001 From 4dbd0b744dfee812300ffcb773e0cd9fb4a8184a Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Tue, 25 Jun 2019 08:59:16 +0800 Subject: [PATCH 010/152] Adds user confirmation tests --- spec/features/user_confirmation_spec.rb | 37 +++++++++++++++++++++++++ spec/features/user_registration_spec.rb | 8 +++--- 2 files changed, 41 insertions(+), 4 deletions(-) create mode 100644 spec/features/user_confirmation_spec.rb diff --git a/spec/features/user_confirmation_spec.rb b/spec/features/user_confirmation_spec.rb new file mode 100644 index 0000000..d5c3564 --- /dev/null +++ b/spec/features/user_confirmation_spec.rb @@ -0,0 +1,37 @@ +require 'rails_helper' + +describe 'User confirmation' do + let! (:user) { create :user, :unconfirmed } + + describe 'successful' do + it 'confirms the user' do + visit user_confirmation_path(confirmation_token: user.confirmation_token) + + expect(page).to have_content I18n.t('devise.confirmations.confirmed') + expect(user.reload.confirmed_at).to_not be_nil + end + + it 'asks the user to set the password and redirects to dashboard' do + visit user_confirmation_path(confirmation_token: user.confirmation_token) + + expect(page).to have_content('Set your password') + expect(user.encrypted_password).to be_blank + + fill_in 'user[password]', with: 'password' + fill_in 'user[password_confirmation]', with: 'password' + click_on 'Set my password' + + expect(page).to have_content I18n.t('devise.passwords.updated') + expect(page).to have_content 'Dashboard' + + expect(user.reload.encrypted_password).to_not be_blank + end + end + + describe 'token is nonexistent' do + it 'shows error' do + visit user_confirmation_path(confirmation_token: 'nonexistent') + expect(page).to have_content 'Confirmation token is invalid' + end + end +end diff --git a/spec/features/user_registration_spec.rb b/spec/features/user_registration_spec.rb index 4e2c8bd..48bc335 100644 --- a/spec/features/user_registration_spec.rb +++ b/spec/features/user_registration_spec.rb @@ -8,7 +8,7 @@ visit root_path fill_in "user[email]", with: email - expect { click_button "Register" }.to change { User.count }.by(1) + expect { click_on "Register" }.to change { User.count }.by(1) user = User.last expect(user.email).to eq email @@ -20,7 +20,7 @@ visit root_path fill_in "user[email]", with: email - click_button "Register" + click_on "Register" expect(page).to have_content I18n.t('devise.registrations.signed_up_but_unconfirmed') end @@ -28,7 +28,7 @@ visit root_path fill_in "user[email]", with: email - click_button "Register" + click_on "Register" mail = ActionMailer::Base.deliveries.last @@ -46,7 +46,7 @@ expect(page).to have_content("Register") fill_in "user[email]", with: invalid_email - expect { click_button "Register" }.to_not change { User.count } + expect { click_on "Register" }.to_not change { User.count } end end end From 48aebcb4c1e13c89247bff0f115590f124457d95 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Tue, 25 Jun 2019 09:26:37 +0800 Subject: [PATCH 011/152] Fixes failing specs --- spec/features/auth_token_spec.rb | 4 ++-- spec/features/limited_system_spec.rb | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/spec/features/auth_token_spec.rb b/spec/features/auth_token_spec.rb index 1919a9f..8d0cc7c 100644 --- a/spec/features/auth_token_spec.rb +++ b/spec/features/auth_token_spec.rb @@ -5,7 +5,7 @@ let(:from_email) { "from@example.com" } it "allows sending a token without javascript support" do - visit root_path + visit new_auth_token_path expect(page).to have_content("Share a secret now...") fill_in "auth_token[email]", with: from_email expect { @@ -14,7 +14,7 @@ end it "generates an auth token", js: true do - visit root_path + visit new_auth_token_path expect(page).to have_content("Share a secret now...") fill_in "auth_token[email]", with: from_email page.driver.scroll_to(0, 500) diff --git a/spec/features/limited_system_spec.rb b/spec/features/limited_system_spec.rb index ec4ba4e..e5390c3 100644 --- a/spec/features/limited_system_spec.rb +++ b/spec/features/limited_system_spec.rb @@ -21,7 +21,7 @@ context "using an approved email domain" do it "generates an auth token without javascript" do - visit root_path + visit new_auth_token_path expect(page).to have_content("Share a secret now...") fill_in "auth_token[email]", with: from_email expect { @@ -30,7 +30,7 @@ end it "generates an auth token with javascript", js: true do - visit root_path + visit new_auth_token_path expect(page).to have_content("Share a secret now...") fill_in "auth_token[email]", with: from_email page.driver.scroll_to(0, 500) @@ -43,7 +43,7 @@ context "trying to use a disapproved email domain" do it "returns an error without javascript" do - visit root_path + visit new_auth_token_path expect(page).to have_content("Share a secret now...") fill_in "auth_token[email]", with: disapproved_email expect { @@ -53,7 +53,7 @@ end it "returns an error with javascript", js: true do - visit root_path + visit new_auth_token_path expect(page).to have_content("Share a secret now...") fill_in "auth_token[email]", with: disapproved_email page.driver.scroll_to(0, 500) From b8240e1667122f0ce54c6b84bb072cc223d7de00 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Tue, 25 Jun 2019 10:09:13 +0800 Subject: [PATCH 012/152] Sets SecretsController as authenticated --- app/controllers/concerns/retrieve_secret.rb | 2 +- app/controllers/secrets_controller.rb | 13 +++++-------- config/routes.rb | 1 + 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/app/controllers/concerns/retrieve_secret.rb b/app/controllers/concerns/retrieve_secret.rb index a1f1e10..bb51290 100644 --- a/app/controllers/concerns/retrieve_secret.rb +++ b/app/controllers/concerns/retrieve_secret.rb @@ -16,4 +16,4 @@ def retrieve_secret end end end -end \ No newline at end of file +end diff --git a/app/controllers/secrets_controller.rb b/app/controllers/secrets_controller.rb index 91fe1b3..8d029b8 100644 --- a/app/controllers/secrets_controller.rb +++ b/app/controllers/secrets_controller.rb @@ -1,17 +1,14 @@ -class SecretsController < ApplicationController +class SecretsController < AuthenticatedController include RetrieveSecret before_filter :retrieve_secret, only: :show - before_filter :require_validated_email, only: [:new, :create] + before_action :authenticate_user!, except: [:show] def show - # As the receipient has now clicked a link, we know their email address is also - # valid, so we will validate them so they can painlessly send a new secret if - # they like as well. - validate_email!(@secret.to_email) + # TODO: Should we add a button to encourage the user to register? end def new - @secret = Secret.new(from_email: validated_email) + @secret = Secret.new(from_email: current_user.email) end def create @@ -30,7 +27,7 @@ def create def secret_params params.require(:secret).permit(:title, :to_email, :secret, :comments, :expire_at, :secret_file).tap do |p| - p[:from_email] = validated_email + p[:from_email] = current_user.email end end diff --git a/config/routes.rb b/config/routes.rb index eed1b62..3a6489b 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -3,6 +3,7 @@ confirmations: 'users/confirmations', passwords: 'users/passwords' } + resources :auth_tokens, only: [:show, :new, :create] resources :secrets, only: [:show, :new, :create, :edit, :update] resources :decrypted_secrets, only: :create From c7298e8cf8bfc550089c641dbe0e5af2a0ff23d3 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Tue, 25 Jun 2019 10:16:13 +0800 Subject: [PATCH 013/152] Removes unneeded require_validated_email --- app/controllers/application_controller.rb | 4 ---- app/controllers/decrypted_secrets_controller.rb | 1 - 2 files changed, 5 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index d2e1a8b..df2af67 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -2,10 +2,6 @@ class ApplicationController < ActionController::Base protect_from_forgery with: :exception helper_method :validated_email - def require_validated_email - redirect_to new_auth_token_path unless validated_email? - end - def validated_email session[:validated_email] end diff --git a/app/controllers/decrypted_secrets_controller.rb b/app/controllers/decrypted_secrets_controller.rb index d462886..5cb1af2 100644 --- a/app/controllers/decrypted_secrets_controller.rb +++ b/app/controllers/decrypted_secrets_controller.rb @@ -1,7 +1,6 @@ class DecryptedSecretsController < ApplicationController include RetrieveSecret before_filter :retrieve_secret - before_filter :require_validated_email def create begin From d901ff90b21e1ad9550664b8b46b9272510db086 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Tue, 25 Jun 2019 11:04:36 +0800 Subject: [PATCH 014/152] Fixes sending secret spec --- app/helpers/application_helper.rb | 2 +- spec/factories/users.rb | 1 + spec/features/sending_secret_spec.rb | 23 +++++++++-------------- spec/rails_helper.rb | 2 -- spec/support/devise.rb | 7 +++++++ 5 files changed, 18 insertions(+), 17 deletions(-) create mode 100644 spec/support/devise.rb diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index caccb42..7060e3c 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -9,7 +9,7 @@ def to_email_placeholder end def from_email_placeholder - validated_email + current_user.email end # A closed system only allows secrets to be sent to and from email diff --git a/spec/factories/users.rb b/spec/factories/users.rb index 1a6979d..67ac751 100644 --- a/spec/factories/users.rb +++ b/spec/factories/users.rb @@ -3,6 +3,7 @@ email { 'user@secretlink.org' } password { 'password' } password_confirmation { 'password' } + confirmed_at { Time.now } trait :unconfirmed do password { nil } diff --git a/spec/features/sending_secret_spec.rb b/spec/features/sending_secret_spec.rb index aa29d75..9219f5f 100644 --- a/spec/features/sending_secret_spec.rb +++ b/spec/features/sending_secret_spec.rb @@ -2,24 +2,19 @@ describe "Sending a secret" do + let(:user) { create :user } let(:to_email) { "to@example.com" } - let(:from_email) { "from@example.com" } before(:each) do allow_any_instance_of(AuthToken).to receive(:notify).and_return(true) end describe "creating a secret" do - - let(:auth_token_params) { { email: from_email } } - let!(:auth_token) { - AuthTokenService.generate(auth_token_params) - AuthToken.where(email: from_email).first - } let(:secret) { Secret.last } before do - visit auth_token_path(auth_token.hashed_token) + login_as(user) + visit new_secret_path fill_in "Title", with: "Super Secret" fill_in "Recipient", with: to_email fill_in "Secret", with: "AbC123" @@ -31,7 +26,7 @@ it "allows a secret to be created" do expect(secret.title).to eq("Super Secret") - expect(secret.from_email).to eq(from_email) + expect(secret.from_email).to eq(user.email) expect(secret.to_email).to eq(to_email) expect(secret.comments).to eq("Some super secret info") expect(secret.expire_at).to eq((Date.current + 1).strftime("%Y-%m-%d")) @@ -41,7 +36,7 @@ it "sends an email to the recipient" do email = ActionMailer::Base.deliveries.last expect(email.to).to eq([to_email]) - expect(email.reply_to).to eq([from_email]) + expect(email.reply_to).to eq([user.email]) expect(email.subject).to eq("SecretLink.org: A secret has been shared with you - Reference #{Secret.last.uuid}") expect(email.from).to eq(["info@SecretLink.org"]) expect(email.to_s).to match("This link will show you the secret:") @@ -63,7 +58,7 @@ describe "accessing a secret" do let!(:secret) { - SecretService.encrypt_new_secret({from_email: from_email, + SecretService.encrypt_new_secret({from_email: user.email, to_email: to_email, secret: "Super Secret Message", expire_at: Time.current + 7.days}) @@ -109,11 +104,11 @@ click_button "Click here to show the secret" expect(page).to have_content("Super Secret Message") email = ActionMailer::Base.deliveries.last - expect(email.to).to eq([from_email]) + expect(email.to).to eq([user.email]) expect(email.reply_to).to eq([to_email]) expect(email.subject).to eq("Your secret was consumed on SecretLink.org - Reference #{Secret.last.uuid}") expect(email.from).to eq(["info@SecretLink.org"]) - expect(email.text_part.to_s).to match("from@example.com") + expect(email.text_part.to_s).to match(user.email) expect(email.text_part.to_s).to match("The encrypted information has now been deleted from the database") end @@ -122,7 +117,7 @@ describe "trying to access an expired secret" do let!(:secret) { - SecretService.encrypt_new_secret({from_email: from_email, + SecretService.encrypt_new_secret({from_email: user.email, to_email: to_email, secret: "Super Secret Message", expire_at: Time.now - 1}) diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index 6101940..d6fb196 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -52,6 +52,4 @@ # Add commands to the rspec DSL for manipulating cookies config.include ShowMeTheCookies, :type => :feature - end - diff --git a/spec/support/devise.rb b/spec/support/devise.rb new file mode 100644 index 0000000..2abb184 --- /dev/null +++ b/spec/support/devise.rb @@ -0,0 +1,7 @@ +RSpec.configure do |config| + config.include Warden::Test::Helpers + + config.after :each do + Warden.test_reset! + end +end From 8e33fd6bca147ed50a0ad3716cb41480fe829104 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Tue, 25 Jun 2019 13:00:35 +0800 Subject: [PATCH 015/152] Fixes closed system spec --- spec/features/closed_system_spec.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/spec/features/closed_system_spec.rb b/spec/features/closed_system_spec.rb index 7521e5d..8fa5986 100644 --- a/spec/features/closed_system_spec.rb +++ b/spec/features/closed_system_spec.rb @@ -2,7 +2,7 @@ describe "Generating auth tokens on a closed system" do - let(:from_email) { "from@example.com" } + let(:user) { create :user, email: "user@example.com" } let(:authorised_domain) { "example.com" } before(:each) do @@ -11,8 +11,8 @@ allow(Rails.configuration).to \ receive(:topsekrit_authorised_domain).and_return(authorised_domain) - auth_token = AuthToken.create!(email: from_email) - visit auth_token_path(auth_token.hashed_token) + login_as(user) + visit new_secret_path fill_in "Title", with: "Super Secret" fill_in "Recipient", with: to_email @@ -46,4 +46,4 @@ end -end \ No newline at end of file +end From 98f4ed17c65196dc19d1863910e87794ef422f59 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Tue, 25 Jun 2019 13:36:36 +0800 Subject: [PATCH 016/152] Removes unneeded auth_tokens_controller --- app/controllers/auth_tokens_controller.rb | 47 -------------- config/routes.rb | 6 +- spec/features/auth_token_spec.rb | 75 ----------------------- 3 files changed, 2 insertions(+), 126 deletions(-) delete mode 100644 app/controllers/auth_tokens_controller.rb delete mode 100644 spec/features/auth_token_spec.rb diff --git a/app/controllers/auth_tokens_controller.rb b/app/controllers/auth_tokens_controller.rb deleted file mode 100644 index 6f629cf..0000000 --- a/app/controllers/auth_tokens_controller.rb +++ /dev/null @@ -1,47 +0,0 @@ -class AuthTokensController < ApplicationController - before_action :check_recaptcha, only: :create - - def show - auth_token = AuthToken.find_by(hashed_token: params[:id]) - if auth_token.present? - validate_email!(auth_token.email) - auth_token.delete - redirect_to new_secret_path - else - flash[:message] = "Sorry, we don't know who you are, try sending a new token!" - render :new - end - end - - def new - if validated_email? - # TODO: Remove the HTML formatting and let the view handle it. - flash.now[:message] = "You have already verified your email as #{validated_email}.
    - If you want, you can just go ahead and create another secret with this address." - end - end - - def create - auth_token = AuthTokenService.generate(auth_token_params) - if auth_token.valid? - flash.now[:message] = "A token has been generated and sent to #{auth_token_params['email']}" - else - # TODO: Remove the HTML formatting and let the view handle it. - flash.now[:message] = auth_token.errors.full_messages.join("
    ".html_safe) - end - render :new - end - - private - - def auth_token_params - params.require(:auth_token).permit(:email) - end - - def check_recaptcha - unless verify_recaptcha - flash[:error] = flash[:recaptcha_error] - render :new - end - end -end diff --git a/config/routes.rb b/config/routes.rb index 3a6489b..c223ea0 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,10 +1,11 @@ Rails.application.routes.draw do + root 'pages#home' + devise_for :users, controllers: { confirmations: 'users/confirmations', passwords: 'users/passwords' } - resources :auth_tokens, only: [:show, :new, :create] resources :secrets, only: [:show, :new, :create, :edit, :update] resources :decrypted_secrets, only: :create @@ -14,9 +15,6 @@ get '/auth/failure', to: 'oauth_callbacks#auth_failure' - get '/auth/new', to: 'auth_tokens#new' - root 'pages#home' - get '/copyright', to: 'pages#copyright' get '/privacy_policy', to: 'pages#privacy_policy' get '/terms_and_conditions', to: 'pages#terms_and_conditions' diff --git a/spec/features/auth_token_spec.rb b/spec/features/auth_token_spec.rb deleted file mode 100644 index 8d0cc7c..0000000 --- a/spec/features/auth_token_spec.rb +++ /dev/null @@ -1,75 +0,0 @@ -require "rails_helper" - -describe AuthToken do - - let(:from_email) { "from@example.com" } - - it "allows sending a token without javascript support" do - visit new_auth_token_path - expect(page).to have_content("Share a secret now...") - fill_in "auth_token[email]", with: from_email - expect { - click_button "Send SecretLink.org Token" - }.to change(AuthToken, :count).by(1) - end - - it "generates an auth token", js: true do - visit new_auth_token_path - expect(page).to have_content("Share a secret now...") - fill_in "auth_token[email]", with: from_email - page.driver.scroll_to(0, 500) - expect { - click_button "Send SecretLink.org Token" - }.to change(AuthToken, :count).by(1) - end - - it "provides a message if a token is invalid" do - visit "/auth_tokens/ijustmadethisup" - expect(page).to have_content("Sorry, we don't know who you are, try sending a new token!") - end - - describe "with an existing auth token saved to the database" do - - let!(:auth_token) { - AuthToken.create( - email: from_email - ) - } - - it "finds the token and deletes it" do - expect { - visit auth_token_path(auth_token.hashed_token) - }.to change(AuthToken.where(hashed_token: auth_token.hashed_token), :count).by(-1) - end - - it "redirects to the new secret page with the sender's address filled in" do - visit auth_token_path(auth_token.hashed_token) - expect(current_path).to eq(new_secret_path) - expect(find("#secret_from_email").value).to eq(from_email) - end - - end - - describe "trying to create an auth token from a non approved domain" do - - let!(:auth_token) { - AuthToken.create( - email: from_email - ) - } - - it "finds the token and deletes it" do - expect { - visit auth_token_path(auth_token.hashed_token) - }.to change(AuthToken.where(hashed_token: auth_token.hashed_token), :count).by(-1) - end - - it "redirects to the new secret page with the sender's address filled in" do - visit auth_token_path(auth_token.hashed_token) - expect(current_path).to eq(new_secret_path) - expect(find("#secret_from_email").value).to eq(from_email) - end - - end - -end From e96ef93d213f94c69eab1621090eed8c7e255584 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Tue, 25 Jun 2019 14:06:14 +0800 Subject: [PATCH 017/152] Fixes failing specs Removes unneeded tests --- app/controllers/concerns/retrieve_secret.rb | 4 +- app/controllers/oauth_callbacks_controller.rb | 6 +-- spec/features/limited_system_spec.rb | 51 ++----------------- spec/features/oauth_feature_spec.rb | 6 +-- 4 files changed, 12 insertions(+), 55 deletions(-) diff --git a/app/controllers/concerns/retrieve_secret.rb b/app/controllers/concerns/retrieve_secret.rb index bb51290..ccb9eee 100644 --- a/app/controllers/concerns/retrieve_secret.rb +++ b/app/controllers/concerns/retrieve_secret.rb @@ -7,12 +7,12 @@ def retrieve_secret case when @secret.expired? flash[:error] = "Sorry, that secret has expired, please ask the person who sent it to you to send it again." - redirect_to(new_auth_token_path) + redirect_to(root_path) when @secret.present? && SecretService.correct_key?(@secret, params[:key]) @secret else flash[:error] = "Sorry, we couldn't find that secret" - redirect_to(new_auth_token_path) + redirect_to(root_path) end end end diff --git a/app/controllers/oauth_callbacks_controller.rb b/app/controllers/oauth_callbacks_controller.rb index c360865..74a5ed5 100644 --- a/app/controllers/oauth_callbacks_controller.rb +++ b/app/controllers/oauth_callbacks_controller.rb @@ -9,13 +9,13 @@ def google redirect_to new_secret_path else flash[:error] = 'Authentication via google failed' - redirect_to new_auth_token_path + redirect_to root_path end end def auth_failure flash[:error] = 'Authentication failed' - redirect_to new_auth_token_path + redirect_to root_path end -end \ No newline at end of file +end diff --git a/spec/features/limited_system_spec.rb b/spec/features/limited_system_spec.rb index e5390c3..9fccec9 100644 --- a/spec/features/limited_system_spec.rb +++ b/spec/features/limited_system_spec.rb @@ -1,8 +1,8 @@ require "rails_helper" -describe "Generating auth tokens on a limited system" do +describe "Registering on a limited system" do - let(:from_email) { "from@example.com" } + let(:user) { create :user, email: "from@example.com" } let(:disapproved_email) { "from@example.org" } let(:authorised_domain) { "example.com" } @@ -12,56 +12,13 @@ allow(Rails.configuration).to \ receive(:topsekrit_authorised_domain).and_return(authorised_domain) - - allow_any_instance_of(AuthToken).to receive(:notify).and_return(true) - - visit new_auth_token_path end context "using an approved email domain" do - - it "generates an auth token without javascript" do - visit new_auth_token_path - expect(page).to have_content("Share a secret now...") - fill_in "auth_token[email]", with: from_email - expect { - click_button "Send SecretLink.org Token" - }.to change(AuthToken, :count).by(1) - end - - it "generates an auth token with javascript", js: true do - visit new_auth_token_path - expect(page).to have_content("Share a secret now...") - fill_in "auth_token[email]", with: from_email - page.driver.scroll_to(0, 500) - expect { - click_button "Send SecretLink.org Token" - }.to change(AuthToken, :count).by(1) - end + it "allows the user to register" end context "trying to use a disapproved email domain" do - - it "returns an error without javascript" do - visit new_auth_token_path - expect(page).to have_content("Share a secret now...") - fill_in "auth_token[email]", with: disapproved_email - expect { - click_button "Send SecretLink.org Token" - }.to_not change(AuthToken, :count) - expect(page).to have_content("Only email addresses from #{authorised_domain} are authorised to create secrets") - end - - it "returns an error with javascript", js: true do - visit new_auth_token_path - expect(page).to have_content("Share a secret now...") - fill_in "auth_token[email]", with: disapproved_email - page.driver.scroll_to(0, 500) - expect { - click_button "Send SecretLink.org Token" - }.to_not change(AuthToken, :count) - expect(page).to have_content("Only email addresses from #{authorised_domain} are authorised to create secrets") - end + it "doesn't allow the user to register" end - end diff --git a/spec/features/oauth_feature_spec.rb b/spec/features/oauth_feature_spec.rb index 0d2bd6b..714b0fe 100644 --- a/spec/features/oauth_feature_spec.rb +++ b/spec/features/oauth_feature_spec.rb @@ -19,7 +19,7 @@ end it 'signs me in' do - visit new_auth_token_path + visit root_path find('a#oauth-google').click expect(page).to have_content('Authenticated as "a@google.com" via google') end @@ -36,7 +36,7 @@ end it 'does not sign me in' do - visit new_auth_token_path + visit root_path find('a#oauth-google').click expect(page).to have_content('Authentication failed') end @@ -47,4 +47,4 @@ end -end \ No newline at end of file +end From 73497caf2c5ff8748bae81bc891126d93bfb3789 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Tue, 25 Jun 2019 14:09:37 +0800 Subject: [PATCH 018/152] Removes unneeded AuthTokenService --- app/services/auth_token_service.rb | 10 --------- .../auth_token_mailer/auth_token.html.erb | 21 ------------------- .../auth_token_mailer/auth_token.text.erb | 11 ---------- 3 files changed, 42 deletions(-) delete mode 100644 app/services/auth_token_service.rb delete mode 100644 app/views/auth_token_mailer/auth_token.html.erb delete mode 100644 app/views/auth_token_mailer/auth_token.text.erb diff --git a/app/services/auth_token_service.rb b/app/services/auth_token_service.rb deleted file mode 100644 index e0980d8..0000000 --- a/app/services/auth_token_service.rb +++ /dev/null @@ -1,10 +0,0 @@ -class AuthTokenService - - def self.generate(auth_hash) - auth_token = AuthToken.create(auth_hash) - # TODO: Model shouldn't be sending the email - auth_token.notify if auth_token.persisted? - auth_token - end - -end diff --git a/app/views/auth_token_mailer/auth_token.html.erb b/app/views/auth_token_mailer/auth_token.html.erb deleted file mode 100644 index 74a44a6..0000000 --- a/app/views/auth_token_mailer/auth_token.html.erb +++ /dev/null @@ -1,21 +0,0 @@ -

    - Hello <%= @email %> -

    - -

    - Here is the requested authentication token that will allow you to access <%= link_to("SecretLink.org", "https://secretlink.org") %>: -

    -

    - <%= link_to auth_token_url(@token), auth_token_url(@token) %> -

    - -

    - Thank you for using <%= link_to("SecretLink.org", "https://secretlink.org") %>! -

    - - - -

    -

    - If you didn't expect to receive this message, please contact <%= mail_to "info@secretlink.org" %>. -

    diff --git a/app/views/auth_token_mailer/auth_token.text.erb b/app/views/auth_token_mailer/auth_token.text.erb deleted file mode 100644 index 0d874ab..0000000 --- a/app/views/auth_token_mailer/auth_token.text.erb +++ /dev/null @@ -1,11 +0,0 @@ -Hello <%= @email %> - -Here is the requested authentication token that will allow you to access https://SecretLink.org/ - -<%= "#{@request_host}/auth_tokens/#{@token}" %> - -Thank you for using <%= link_to("SecretLink.org", "https://secretlink.org") %>! - - - -If you didn't expect to receive this message, please contact info@secretlink.org From 05a9fedc908f0f6ace5380320cd7e6e7dbd2965c Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Tue, 25 Jun 2019 14:22:27 +0800 Subject: [PATCH 019/152] Removes unneeded AuthTokenService spec --- spec/services/auth_token_service_spec.rb | 38 ------------------------ 1 file changed, 38 deletions(-) delete mode 100644 spec/services/auth_token_service_spec.rb diff --git a/spec/services/auth_token_service_spec.rb b/spec/services/auth_token_service_spec.rb deleted file mode 100644 index 2fc97f2..0000000 --- a/spec/services/auth_token_service_spec.rb +++ /dev/null @@ -1,38 +0,0 @@ -require "rails_helper" - -describe AuthTokenService do - let(:sender) { "sender@email.com" } - let(:hash) { { email: sender }} - let!(:auth_token) { AuthToken.new(hash) } - - describe "#generate" do - let(:params) { { email: "superman@gmail.com" } } - let(:request_host) { "http://localhost:3000" } - - it "creates a token" do - expect { - AuthTokenService.generate(params) - }.to change(AuthToken, :count).by(1) - end - - context "valid auth_token" do - - it "tells the auth_token to notify if persisted" do - expect_any_instance_of(AuthToken).to receive(:notify).once - AuthTokenService.generate(params) - end - - end - - context "invalid auth_token" do - - it "does not tell the auth_token to notify" do - expect_any_instance_of(AuthToken).to_not receive(:notify) - AuthTokenService.generate(params.merge!(email: '')) - end - - end - - end - -end From cf5a75213dd0041d2191b4ab6fc4885011d5b959 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Tue, 25 Jun 2019 14:31:46 +0800 Subject: [PATCH 020/152] Removes unneeded AuthToken notify method --- app/models/auth_token.rb | 6 ------ spec/features/sending_secret_spec.rb | 4 ---- spec/models/auth_token_spec.rb | 16 ---------------- 3 files changed, 26 deletions(-) diff --git a/app/models/auth_token.rb b/app/models/auth_token.rb index a339305..3d99fe3 100644 --- a/app/models/auth_token.rb +++ b/app/models/auth_token.rb @@ -4,12 +4,6 @@ class AuthToken < ActiveRecord::Base before_validation :set_defaults - # TODO: Model shouldn't be sending the email. - # TODO: Emails should be in background worker. - def notify - AuthTokenMailer.auth_token(email, hashed_token).deliver_now - end - private def set_defaults diff --git a/spec/features/sending_secret_spec.rb b/spec/features/sending_secret_spec.rb index 9219f5f..4966f80 100644 --- a/spec/features/sending_secret_spec.rb +++ b/spec/features/sending_secret_spec.rb @@ -5,10 +5,6 @@ let(:user) { create :user } let(:to_email) { "to@example.com" } - before(:each) do - allow_any_instance_of(AuthToken).to receive(:notify).and_return(true) - end - describe "creating a secret" do let(:secret) { Secret.last } diff --git a/spec/models/auth_token_spec.rb b/spec/models/auth_token_spec.rb index ff054ff..f050bb1 100644 --- a/spec/models/auth_token_spec.rb +++ b/spec/models/auth_token_spec.rb @@ -24,22 +24,6 @@ end - describe '#notify' do - - let!(:auth_token) { AuthToken.create!(email: from_email) } - - before do - auth_token.notify - end - - let(:email) { ActionMailer::Base.deliveries.last } - - it 'sends an email to the recipient with a link auth link' do - expect(email.to).to eq([from_email]) - expect(email.to_s).to match(/http:\/\/localhost:3000\/auth_tokens\/\S+/) - end - end - describe '#email_domain_authorised' do let(:auth_token) { AuthToken.new(email: from_email) } From 918655c154d32c827cbc6b77c9798b6d706b9935 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Tue, 25 Jun 2019 14:42:21 +0800 Subject: [PATCH 021/152] Removes unneeded auth_tokens view --- app/views/auth_tokens/new.html.erb | 138 ----------------------------- 1 file changed, 138 deletions(-) delete mode 100644 app/views/auth_tokens/new.html.erb diff --git a/app/views/auth_tokens/new.html.erb b/app/views/auth_tokens/new.html.erb deleted file mode 100644 index 4ed8a2f..0000000 --- a/app/views/auth_tokens/new.html.erb +++ /dev/null @@ -1,138 +0,0 @@ -
    -

    Share secrets such as passwords, API keys, and SSL certificates simply and securely.

    - <%= simple_form_for :auth_token, url: auth_tokens_url, html: { class: '' } do |f| %> -

    Share a secret now...

    - <%= f.input :email, label: false, placeholder: 'To send a secret, enter your email address...', input_html: { class: 'form-control center-block' } %> - <%= invisible_recaptcha_tags text: 'Send SecretLink.org Token', class: 'button white' %> - <%= link_to "Send using Google", '/auth/google_oauth2', id: 'oauth-google', class: "google-link" %> - <% end %> - -
    - -
    -
      -
    • - <%= image_tag "homepage-icons/your-secret.svg" %> -

      Your secret is yours to keep and share

      -

      SecretLink.org ecrypts your data and sends the only key to decrypt it to your receipient. Once they view the secret we delete the encrypted version from our database.

      -
    • -
    • - <%= image_tag "homepage-icons/fast-and-forgetful.svg" %> -

      It works fast and is conveniently forgetful

      -

      Because SecretLink.org does not keep the decryption keys, we can't decrypt your data, also your data has an expiry, once expired, no one can decrypt and we delete it from the system.

      -
    • -
    • - <%= image_tag "homepage-icons/simple-and-efficient.svg" %> -

      It's simple & efficient

      -

      All you need is a valid email or sign in via Google. No new passwords to remember, no accounts to worry about.

      -
    • -
    -
    - -
    - -
    -
    -

    01

    -

    Authenticate Yourself

    -
    -
    - <%= image_tag "homepage-icons/step02.svg" %> -

    Either enter your email and click on the link we send you or use Google OAuth so we can get to know you, it's a trust thing :)

    -
    -
    - -
    -
    -

    02

    -

    You add the secret sauce

    -
    -
    - <%= image_tag "homepage-icons/step03.svg" %> -

    Then you enter your secret, ensure the recipient is correct, add comments and expiry and hit send to mail them the only copy of the decryption key.

    -
    -
    - -
    -
    -

    03

    -

    Share the love

    -
    -
    - <%= image_tag "homepage-icons/step04.svg" %> -

    Once they view the secret, the encrypted copy is deleted from the system, never to be seen again. No data is even better than encrypted data!

    -
    -
    - -
    - -
    -

    What goes on behind the scenes?

    -

    Shh... it's a secret! But you look trustworthy... read on :)

    -
    - -
    -
    -
    -

    Why is this useful?

    -
    -

    Instead of secrets being sent by email, in support systems, via instant messaging services or the like, a unique link is sent instead, which only works once.

    -

    This way, only an unusable link will remain protecting the secret from further prying eyes.

    -
    -
    -
    -

    Why should we trust you?

    -
    -

    We built this service to solve our own problem of sharing secrets with customers. We know trust is a thing, so we open sourced the whole project for any peer review.

    -

    If you find something, please let us know or send a pull request and we'll get it fixed.

    -
    -
    -
    -

    Are secrets stored?

    -
    -

    Yes, but only encrypted with a one way cipher that we don't store the key for. The only copy of the key is sent to the receipient you specify.

    -

    Once the secret is read by the recipient, we even delete the encrypted version from the database, just leaving the meta data behind so in future versions you can have a dashboard to see what you sent to whom (coming soon).

    -
    -
    -
    -

    How much does this cost?

    -
    -

    It's free for you to use to send secrets to whomever you want - we just ask that you don't do anything that could be against the law or harrass anyone with this service.

    -

    There is a paid version on the horizon that handles files as well, stay tuned :)

    -
    -
    -
    -

    Can we run our own copy?

    -
    -

    Of course, there is a GPL licensed version, we just ask you don't compete with this service in doing so by only use it internally for your staff and clients.

    -

    We trust you to do the right thing :)

    -
    -
    -
    -

    Can you help us set this up?

    -
    -

    Sure, <%= link_to "contact us", "https://reinteractive.net/enquiries/new?message=I%27d+like+to+get+some+more+information+to+setup+SecretLink.org..." %> to get more information about our Ruby on Rails <%= link_to "OpsCare", "https://reinteractive.net/service/ops-care/" %> and <%= link_to "CodeCare", "https://reinteractive.net/service/code-care/" %> services.

    -

    We are experts at keeping critical Rails applications online.

    -
    -
    -
    -
    - -
    -
    -

    - About SecretLink.org -

    -
    -

    SecretLink.org is available for anyone to use, it is a Ruby on Rails application created and built by <%= link_to "reinteractive", "https://reinteractive.net" %> and hosted through reinteractive's <%= link_to "OpsCare", "https://reinteractive.net/service/ops-care/" %> service. It has been made open source to ensure transparency on the service and to encourage contribution to improve the security of the application.

    -

    If you do not want to (or can not) use our hosted version, you are welcome to run your own version for your own company or organisation, we only

    -
    -
    -

    stipulate that you may not run it as a service for third parties in competition to https://SecretLink.org/

    -

    If you would like assistance getting SecretLink.org (or any other Rails application) setup, hosted and maintained on AWS, please consider <%= link_to "contacting us", "https://reinteractive.net/enquiries/new?message=I%27d+like+to+get+some+more+information+to+setup+SecretLink.org..." %> to get more information about our Ruby on Rails <%= link_to "OpsCare", "https://reinteractive.net/service/ops-care/" %> and <%= link_to "CodeCare", "https://reinteractive.net/service/code-care/" %> services.

    -

    It is free to use and is governed by our <%= link_to "Terms & Conditions", "/terms_and_conditions" %>.

    -
    -
    -
    - -<%= render partial: 'shared/ga' %> From f7984410e77a39654f44ecce35509ac9ffedf76b Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Tue, 25 Jun 2019 15:05:33 +0800 Subject: [PATCH 022/152] Routing fixes --- config/routes.rb | 10 +++++++--- spec/features/user_confirmation_spec.rb | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/config/routes.rb b/config/routes.rb index c223ea0..6d41bb5 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,11 +1,15 @@ Rails.application.routes.draw do - root 'pages#home' - devise_for :users, controllers: { confirmations: 'users/confirmations', passwords: 'users/passwords' } + get '/', to: 'secrets#new', constraints: lambda { |request| + request.env['warden'].user.present? + } + + get '/', to: 'pages#home' + resources :secrets, only: [:show, :new, :create, :edit, :update] resources :decrypted_secrets, only: :create @@ -19,5 +23,5 @@ get '/privacy_policy', to: 'pages#privacy_policy' get '/terms_and_conditions', to: 'pages#terms_and_conditions' - get 'dashboard' , to: 'dashboard#show' + get 'dashboard' , to: 'secrets#new' end diff --git a/spec/features/user_confirmation_spec.rb b/spec/features/user_confirmation_spec.rb index d5c3564..336087d 100644 --- a/spec/features/user_confirmation_spec.rb +++ b/spec/features/user_confirmation_spec.rb @@ -22,7 +22,7 @@ click_on 'Set my password' expect(page).to have_content I18n.t('devise.passwords.updated') - expect(page).to have_content 'Dashboard' + expect(page).to have_content 'Create a new secret to send' expect(user.reload.encrypted_password).to_not be_blank end From 1af295a4f72b04ed2eb946553662b624ffc96756 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Tue, 25 Jun 2019 17:05:49 +0800 Subject: [PATCH 023/152] Adds devise layout --- app/assets/stylesheets/application.sass | 7 ++++++- app/assets/stylesheets/layouts/devise.sass | 11 +++++++++++ app/controllers/application_controller.rb | 10 ++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 app/assets/stylesheets/layouts/devise.sass diff --git a/app/assets/stylesheets/application.sass b/app/assets/stylesheets/application.sass index 0460441..fb0c9c0 100644 --- a/app/assets/stylesheets/application.sass +++ b/app/assets/stylesheets/application.sass @@ -8,6 +8,12 @@ @import "home" @import "secrets" +// Layouts +@import "layouts/devise" + +// Components +@import "components/devise-form" + body min-height: 100vh display: flex @@ -54,4 +60,3 @@ ul.nostyle &:hover background-color: $green3 border-color: $green3 - \ No newline at end of file diff --git a/app/assets/stylesheets/layouts/devise.sass b/app/assets/stylesheets/layouts/devise.sass new file mode 100644 index 0000000..9760b1f --- /dev/null +++ b/app/assets/stylesheets/layouts/devise.sass @@ -0,0 +1,11 @@ +body.devise-layout + min-height: 100vh + display: flex + flex-direction: column + + .container + margin-top: 40px + + .footer + //This makes the footer stay at bottom + margin-top: auto diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index df2af67..639f812 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -1,6 +1,7 @@ class ApplicationController < ActionController::Base protect_from_forgery with: :exception helper_method :validated_email + layout :layout_by_resource def validated_email session[:validated_email] @@ -22,4 +23,13 @@ def notify_exception(exception) end end + private + + def layout_by_resource + if devise_controller? + "devise" + else + "application" + end + end end From 7d7d67931a3a5f7c0bd4536cff5d0c8d91aa4b29 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Tue, 25 Jun 2019 17:06:26 +0800 Subject: [PATCH 024/152] Adds devise layout --- .../stylesheets/components/devise-form.sass | 7 ++++ app/views/devise/passwords/edit.html.erb | 32 +++++++++++-------- app/views/layouts/devise.html.erb | 25 +++++++++++++++ 3 files changed, 51 insertions(+), 13 deletions(-) create mode 100644 app/assets/stylesheets/components/devise-form.sass create mode 100644 app/views/layouts/devise.html.erb diff --git a/app/assets/stylesheets/components/devise-form.sass b/app/assets/stylesheets/components/devise-form.sass new file mode 100644 index 0000000..d44e248 --- /dev/null +++ b/app/assets/stylesheets/components/devise-form.sass @@ -0,0 +1,7 @@ +.devise-form + .heading + margin: 20px 0px + .body + margin: 40px 0px + .shared-links + margin: 20px 0px diff --git a/app/views/devise/passwords/edit.html.erb b/app/views/devise/passwords/edit.html.erb index 5743635..4734c35 100644 --- a/app/views/devise/passwords/edit.html.erb +++ b/app/views/devise/passwords/edit.html.erb @@ -1,19 +1,25 @@ -

    Set your password

    +
    +

    Set your password

    -<%= simple_form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :put }) do |f| %> - <%= f.error_notification %> +
    + <%= simple_form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :put }) do |f| %> + <%= f.error_notification %> - <%= f.input :reset_password_token, as: :hidden %> - <%= f.full_error :reset_password_token %> + <%= f.input :reset_password_token, as: :hidden %> + <%= f.full_error :reset_password_token %> -
    - <%= f.input :password, label: "New password", required: true, autofocus: true, hint: ("#{@minimum_password_length} characters minimum" if @minimum_password_length) %> - <%= f.input :password_confirmation, label: "Confirm your new password", required: true %> -
    +
    + <%= f.input :password, label: "New password", required: true, autofocus: true, hint: ("#{@minimum_password_length} characters minimum" if @minimum_password_length) %> + <%= f.input :password_confirmation, label: "Confirm your new password", required: true %> +
    -
    - <%= f.button :submit, "Set my password" %> +
    + <%= f.button :submit, "Set my password" %> +
    + <% end %>
    -<% end %> -<%= render "devise/shared/links" %> + +
    diff --git a/app/views/layouts/devise.html.erb b/app/views/layouts/devise.html.erb new file mode 100644 index 0000000..2dba5bd --- /dev/null +++ b/app/views/layouts/devise.html.erb @@ -0,0 +1,25 @@ + + + + SecretLink.org + + + <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> + <%= csrf_meta_tags %> + + + + + <%= render partial: 'shared/header' %> + <%= render partial: 'shared/flash_messages' %> +
    +
    +
    + <%= yield %> +
    +
    +
    + <%= render partial: 'shared/footer' %> + <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> + + From c05d7a4eaba7bc51e442e4aca58963f2269c4041 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Tue, 25 Jun 2019 17:26:03 +0800 Subject: [PATCH 025/152] Improves devise forms styles --- app/views/devise/confirmations/new.html.erb | 28 +++++++++++++-------- app/views/devise/passwords/new.html.erb | 26 +++++++++++-------- app/views/devise/registrations/new.html.erb | 26 +++++++++++-------- app/views/devise/sessions/new.html.erb | 28 +++++++++++++-------- 4 files changed, 66 insertions(+), 42 deletions(-) diff --git a/app/views/devise/confirmations/new.html.erb b/app/views/devise/confirmations/new.html.erb index 949b172..e8f4415 100644 --- a/app/views/devise/confirmations/new.html.erb +++ b/app/views/devise/confirmations/new.html.erb @@ -1,16 +1,22 @@ -

    Resend confirmation instructions

    +
    +

    Resend confirmation instructions

    -<%= simple_form_for(resource, as: resource_name, url: confirmation_path(resource_name), html: { method: :post }) do |f| %> - <%= f.error_notification %> - <%= f.full_error :confirmation_token %> +
    + <%= simple_form_for(resource, as: resource_name, url: confirmation_path(resource_name), html: { method: :post }) do |f| %> + <%= f.error_notification %> + <%= f.full_error :confirmation_token %> -
    - <%= f.input :email, required: true, autofocus: true %> -
    +
    + <%= f.input :email, required: true, autofocus: true %> +
    -
    - <%= f.button :submit, "Resend confirmation instructions" %> +
    + <%= f.button :submit, "Resend confirmation instructions" %> +
    + <% end %>
    -<% end %> -<%= render "devise/shared/links" %> + +
    diff --git a/app/views/devise/passwords/new.html.erb b/app/views/devise/passwords/new.html.erb index d1503e7..375bb0e 100644 --- a/app/views/devise/passwords/new.html.erb +++ b/app/views/devise/passwords/new.html.erb @@ -1,15 +1,21 @@ -

    Forgot your password?

    +
    +

    Forgot your password?

    -<%= simple_form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :post }) do |f| %> - <%= f.error_notification %> +
    + <%= simple_form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :post }) do |f| %> + <%= f.error_notification %> -
    - <%= f.input :email, required: true, autofocus: true %> -
    +
    + <%= f.input :email, required: true, autofocus: true %> +
    -
    - <%= f.button :submit, "Send me reset password instructions" %> +
    + <%= f.button :submit, "Send me reset password instructions" %> +
    + <% end %>
    -<% end %> -<%= render "devise/shared/links" %> + +
    diff --git a/app/views/devise/registrations/new.html.erb b/app/views/devise/registrations/new.html.erb index 911a038..4a6009b 100644 --- a/app/views/devise/registrations/new.html.erb +++ b/app/views/devise/registrations/new.html.erb @@ -1,15 +1,21 @@ -

    Sign up

    +
    +

    Sign up

    -<%= simple_form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %> - <%= f.error_notification %> +
    + <%= simple_form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %> + <%= f.error_notification %> -
    - <%= f.input :email, required: true, autofocus: true %> -
    +
    + <%= f.input :email, required: true, autofocus: true %> +
    -
    - <%= f.button :submit, "Sign up" %> +
    + <%= f.button :submit, "Sign up" %> +
    + <% end %>
    -<% end %> -<%= render "devise/shared/links" %> + +
    diff --git a/app/views/devise/sessions/new.html.erb b/app/views/devise/sessions/new.html.erb index 31f8a4d..fe774c1 100644 --- a/app/views/devise/sessions/new.html.erb +++ b/app/views/devise/sessions/new.html.erb @@ -1,15 +1,21 @@ -

    Log in

    +
    +

    Log in

    -<%= simple_form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %> -
    - <%= f.input :email, required: false, autofocus: true %> - <%= f.input :password, required: false %> - <%= f.input :remember_me, as: :boolean if devise_mapping.rememberable? %> -
    +
    + <%= simple_form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %> +
    + <%= f.input :email, required: false, autofocus: true %> + <%= f.input :password, required: false %> + <%= f.input :remember_me, as: :boolean if devise_mapping.rememberable? %> +
    -
    - <%= f.button :submit, "Log in" %> +
    + <%= f.button :submit, "Log in" %> +
    + <% end %>
    -<% end %> -<%= render "devise/shared/links" %> + +
    From ad9e315b8794d23673a8aa843f13ca87318602fb Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Tue, 25 Jun 2019 17:58:36 +0800 Subject: [PATCH 026/152] Removes unneeded application controller methods Fixes routes --- app/controllers/application_controller.rb | 13 ------------- app/controllers/oauth_callbacks_controller.rb | 2 ++ config/routes.rb | 4 ++-- 3 files changed, 4 insertions(+), 15 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 639f812..f0e9d07 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -1,20 +1,7 @@ class ApplicationController < ActionController::Base protect_from_forgery with: :exception - helper_method :validated_email layout :layout_by_resource - def validated_email - session[:validated_email] - end - - def validated_email? - session[:validated_email].present? - end - - def validate_email!(email) - session[:validated_email] = email - end - def notify_exception(exception) if Rails.env.production? Bugsnag.notify(exception) diff --git a/app/controllers/oauth_callbacks_controller.rb b/app/controllers/oauth_callbacks_controller.rb index 74a5ed5..b46a4fb 100644 --- a/app/controllers/oauth_callbacks_controller.rb +++ b/app/controllers/oauth_callbacks_controller.rb @@ -5,6 +5,8 @@ def google request.env['omniauth.auth']['info']['email'] if email flash[:message] = "Authenticated as \"#{email}\" via google" + + # TODDO: Fix this - login with devise validate_email!(email) redirect_to new_secret_path else diff --git a/config/routes.rb b/config/routes.rb index 6d41bb5..81800f9 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -4,11 +4,11 @@ passwords: 'users/passwords' } - get '/', to: 'secrets#new', constraints: lambda { |request| + get '/', to: 'secrets#new', as: 'admin_root', constraints: lambda { |request| request.env['warden'].user.present? } - get '/', to: 'pages#home' + get '/', to: 'pages#home', as: 'root' resources :secrets, only: [:show, :new, :create, :edit, :update] resources :decrypted_secrets, only: :create From a42d77b4a90b1db008fdef2d09ccc5f61701aad6 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Wed, 26 Jun 2019 08:43:58 +0800 Subject: [PATCH 027/152] Adds recaptcha validation in registrations controller --- .../users/registrations_controller.rb | 74 +++++++++++++++++++ config/routes.rb | 1 + 2 files changed, 75 insertions(+) create mode 100644 app/controllers/users/registrations_controller.rb diff --git a/app/controllers/users/registrations_controller.rb b/app/controllers/users/registrations_controller.rb new file mode 100644 index 0000000..19db455 --- /dev/null +++ b/app/controllers/users/registrations_controller.rb @@ -0,0 +1,74 @@ +# frozen_string_literal: true + +class Users::RegistrationsController < Devise::RegistrationsController + before_action :check_recaptcha, only: :create + # before_action :configure_sign_up_params, only: [:create] + # before_action :configure_account_update_params, only: [:update] + + # GET /resource/sign_up + # def new + # super + # end + + # POST /resource + # def create + # super + # end + + # GET /resource/edit + # def edit + # super + # end + + # PUT /resource + # def update + # super + # end + + # DELETE /resource + # def destroy + # super + # end + + # GET /resource/cancel + # Forces the session data which is usually expired after sign + # in to be expired now. This is useful if the user wants to + # cancel oauth signing in/up in the middle of the process, + # removing all OAuth session data. + # def cancel + # super + # end + + # protected + + # If you have extra params to permit, append them to the sanitizer. + # def configure_sign_up_params + # devise_parameter_sanitizer.permit(:sign_up, keys: [:attribute]) + # end + + # If you have extra params to permit, append them to the sanitizer. + # def configure_account_update_params + # devise_parameter_sanitizer.permit(:account_update, keys: [:attribute]) + # end + + # The path used after sign up. + # def after_sign_up_path_for(resource) + # super(resource) + # end + + # The path used after sign up for inactive accounts. + # def after_inactive_sign_up_path_for(resource) + # super(resource) + # end + + private + + def check_recaptcha + unless verify_recaptcha + self.resource = resource_class.new sign_up_params + resource.validate # Look for any other validation errors besides Recaptcha + resource.errors.add(:base, 'reCAPTCHA verification failed, please try again') + respond_with resource + end + end +end diff --git a/config/routes.rb b/config/routes.rb index 81800f9..0fd576b 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,5 +1,6 @@ Rails.application.routes.draw do devise_for :users, controllers: { + registrations: 'users/registrations', confirmations: 'users/confirmations', passwords: 'users/passwords' } From f3daffc54042b766a688be07f842dc148f9bcb6c Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Wed, 26 Jun 2019 10:02:37 +0800 Subject: [PATCH 028/152] Adjusts registration via google account --- app/controllers/oauth_callbacks_controller.rb | 31 ++++++++++++++----- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/app/controllers/oauth_callbacks_controller.rb b/app/controllers/oauth_callbacks_controller.rb index b46a4fb..9b9cd01 100644 --- a/app/controllers/oauth_callbacks_controller.rb +++ b/app/controllers/oauth_callbacks_controller.rb @@ -3,15 +3,15 @@ class OauthCallbacksController < ApplicationController def google email = request.env['omniauth.auth'] && request.env['omniauth.auth']['info'] && request.env['omniauth.auth']['info']['email'] - if email - flash[:message] = "Authenticated as \"#{email}\" via google" - # TODDO: Fix this - login with devise - validate_email!(email) - redirect_to new_secret_path - else - flash[:error] = 'Authentication via google failed' + user = User.new(email: email) + if user.save + flash[:notice] = t('devise.registrations.signed_up_but_unconfirmed') redirect_to root_path + else + handle_email_taken and return if user.errors.added?(:email, :taken) + handle_email_blank and return if user.errors.added?(:email, :blank) + handle_unknown_error(user) end end @@ -20,4 +20,21 @@ def auth_failure redirect_to root_path end + private + + def handle_email_taken + flash[:notice] = "You are already registered with this account. Please login instead." + redirect_to new_user_session_path + end + + def handle_email_blank + flash[:error] = 'Authentication via google failed' + redirect_to root_path + end + + def handle_unknown_error(user) + # We're intentionally raising an error here + # So tests will catch when creation of user with email only fails + raise user.errors.full_messages.to_s + end end From 355a47e3a96994245ed679adf4b709a6527c8b18 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Wed, 26 Jun 2019 12:01:58 +0800 Subject: [PATCH 029/152] Improves Google Auth flow Redirects the user to update password instead of sending an email When registering via a google account --- app/controllers/oauth_callbacks_controller.rb | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/app/controllers/oauth_callbacks_controller.rb b/app/controllers/oauth_callbacks_controller.rb index 9b9cd01..5764a6f 100644 --- a/app/controllers/oauth_callbacks_controller.rb +++ b/app/controllers/oauth_callbacks_controller.rb @@ -5,9 +5,10 @@ def google request.env['omniauth.auth']['info']['email'] user = User.new(email: email) + user.skip_confirmation_notification! + if user.save - flash[:notice] = t('devise.registrations.signed_up_but_unconfirmed') - redirect_to root_path + redirect_to user_confirmation_path(confirmation_token: user.confirmation_token) else handle_email_taken and return if user.errors.added?(:email, :taken) handle_email_blank and return if user.errors.added?(:email, :blank) @@ -23,7 +24,7 @@ def auth_failure private def handle_email_taken - flash[:notice] = "You are already registered with this account. Please login instead." + flash[:notice] = 'You are already registered with this account. Please login instead.' redirect_to new_user_session_path end From 8e60a6722682f5d7fe7aafb134309a301b1e19e6 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Wed, 26 Jun 2019 12:55:03 +0800 Subject: [PATCH 030/152] Adds tests for oauth flow --- app/controllers/oauth_callbacks_controller.rb | 13 ++-- config/locales/en.yml | 4 +- spec/features/oauth_feature_spec.rb | 66 ++++++++++++------- 3 files changed, 49 insertions(+), 34 deletions(-) diff --git a/app/controllers/oauth_callbacks_controller.rb b/app/controllers/oauth_callbacks_controller.rb index 5764a6f..bd131c2 100644 --- a/app/controllers/oauth_callbacks_controller.rb +++ b/app/controllers/oauth_callbacks_controller.rb @@ -11,28 +11,25 @@ def google redirect_to user_confirmation_path(confirmation_token: user.confirmation_token) else handle_email_taken and return if user.errors.added?(:email, :taken) - handle_email_blank and return if user.errors.added?(:email, :blank) + # This may not be necessary because a failed oauth calls directly + # to auth_failure, but keeping this here as a safeguard + auth_failure and return if user.errors.added?(:email, :blank) handle_unknown_error(user) end end def auth_failure - flash[:error] = 'Authentication failed' + flash[:error] = t('oauth.failed') redirect_to root_path end private def handle_email_taken - flash[:notice] = 'You are already registered with this account. Please login instead.' + flash[:notice] = t('oauth.already_registered') redirect_to new_user_session_path end - def handle_email_blank - flash[:error] = 'Authentication via google failed' - redirect_to root_path - end - def handle_unknown_error(user) # We're intentionally raising an error here # So tests will catch when creation of user with email only fails diff --git a/config/locales/en.yml b/config/locales/en.yml index 0653957..c3dc46a 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -20,4 +20,6 @@ # available at http://guides.rubyonrails.org/i18n.html. en: - hello: "Hello world" + oauth: + already_registered: 'You are already registered with this account. Please login instead.' + failed: 'Authentication failed' diff --git a/spec/features/oauth_feature_spec.rb b/spec/features/oauth_feature_spec.rb index 714b0fe..8c49e75 100644 --- a/spec/features/oauth_feature_spec.rb +++ b/spec/features/oauth_feature_spec.rb @@ -2,49 +2,65 @@ describe 'oauth via google' do - before do - OmniAuth.config.test_mode = true - end + before { OmniAuth.config.test_mode = true } + after { OmniAuth.config.mock_auth[:google_oauth2] = nil } - after do - OmniAuth.config.mock_auth[:google_oauth2] = nil - end + let!(:info) { { first_name: 'John', last_name: 'Smith', email: 'a@google.com' } } describe 'successful auth' do - before do - OmniAuth.config.add_mock(:google_oauth2, - info: { first_name: 'John', last_name: 'Smith', email: 'a@google.com' } - ) - end + OmniAuth.config.add_mock(:google_oauth2, info: info) - it 'signs me in' do visit root_path find('a#oauth-google').click - expect(page).to have_content('Authenticated as "a@google.com" via google') end + it 'creates a confirmed user without password' do + user = User.find_by(email: info[:email]) + + expect(user).to_not be_nil + expect(user.encrypted_password).to be_blank + expect(user.confirmed_at).to_not be_nil + end + + it 'redirects to password update page' do + expect(page).to have_content I18n.t('devise.confirmations.confirmed') + expect(page).to have_content 'Set your password' + end end describe 'unsuccessful auth' do - let!(:previous_logger) { OmniAuth.config.logger } - before do - OmniAuth.config.mock_auth[:google_oauth2] = :invalid_credentials - OmniAuth.config.logger = Logger.new("/dev/null") - end + context 'user is already registered' do + let!(:existing_user) { create :user, email: info[:email] } + before { OmniAuth.config.add_mock(:google_oauth2, info: info) } - it 'does not sign me in' do - visit root_path - find('a#oauth-google').click - expect(page).to have_content('Authentication failed') + it 'redirects to login page' do + visit root_path + find('a#oauth-google').click + + expect(page).to have_content I18n.t('oauth.already_registered') + expect(page).to have_current_path(user_session_path) + end end - after do - OmniAuth.config.logger = previous_logger + context 'google failed to authenticate' do + before do + OmniAuth.config.mock_auth[:google_oauth2] = :invalid_credentials + OmniAuth.config.logger = Logger.new("/dev/null") + end + + it 'does not register the user' do + visit root_path + find('a#oauth-google').click + + expect(User.count).to eq 0 + expect(page).to have_content I18n.t('oauth.failed') + end + + after { OmniAuth.config.logger = previous_logger } end end - end From bb3f522888108b3dd4f5d79241f908f09d1a0de6 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Wed, 26 Jun 2019 15:42:43 +0800 Subject: [PATCH 031/152] Adds more methods to authorised_email_service Add authorised_email_service tests --- app/services/authorised_email_service.rb | 44 ++++- .../services/authorised_email_service_spec.rb | 166 ++++++++++++++++++ 2 files changed, 202 insertions(+), 8 deletions(-) create mode 100644 spec/services/authorised_email_service_spec.rb diff --git a/app/services/authorised_email_service.rb b/app/services/authorised_email_service.rb index 9d9328b..eded840 100644 --- a/app/services/authorised_email_service.rb +++ b/app/services/authorised_email_service.rb @@ -1,12 +1,40 @@ -class AuthorisedEmailService +module AuthorisedEmailService + AUTHORISATION = Rails.configuration.topsekrit_authorisation_setting + AUTHORISED_DOMAIN = Rails.configuration.topsekrit_authorised_domain - def self.email_domain_matches?(email) - regexp = Regexp.new(".+#{Rails.configuration.topsekrit_authorised_domain}\\z") - email.to_s.match(regexp) - end + class << self + def closed_system? + AUTHORISATION == :closed + end + + def limited_system? + AUTHORISATION == :limited + end + + def open_system? + AUTHORISATION == :open + end + + def closed_or_limited_system? + closed_system? || limited_system? + end + + def authorised_to_register?(email) + if closed_or_limited_system? + email_domain_matches?(email).present? + else + true + end + end + + def email_domain_matches?(email) + regexp = Regexp.new(".+#{AUTHORISED_DOMAIN}\\z") + email.to_s.match(regexp) + end - def self.email_domain_does_not_match?(email) - !email_domain_matches?(email) + def email_domain_does_not_match?(email) + !email_domain_matches?(email) + end end -end \ No newline at end of file +end diff --git a/spec/services/authorised_email_service_spec.rb b/spec/services/authorised_email_service_spec.rb new file mode 100644 index 0000000..f095fe5 --- /dev/null +++ b/spec/services/authorised_email_service_spec.rb @@ -0,0 +1,166 @@ +require 'rails_helper' + +describe AuthorisedEmailService do + describe 'constants' do + it 'is set based on rails configuration' do + authorisation = Rails.configuration.topsekrit_authorisation_setting + authorised_domain = Rails.configuration.topsekrit_authorised_domain + + expect(authorisation).to eq :open + expect(authorised_domain).to eq 'reinteractive.net' + expect(AuthorisedEmailService::AUTHORISATION).to eq authorisation + expect(AuthorisedEmailService::AUTHORISED_DOMAIN).to eq authorised_domain + end + end + + describe '.closed_system?' do + it 'returns true when system is closed' do + stub_const('AuthorisedEmailService::AUTHORISATION', :closed) + expect(AuthorisedEmailService.closed_system?).to eq(true) + end + + it 'returns false when system is open/limited' do + stub_const('AuthorisedEmailService::AUTHORISATION', :open) + expect(AuthorisedEmailService.closed_system?).to eq(false) + + stub_const('AuthorisedEmailService::AUTHORISATION', :limited) + expect(AuthorisedEmailService.closed_system?).to eq(false) + end + end + + describe '.limited_system?' do + it 'returns true when system is limited' do + stub_const('AuthorisedEmailService::AUTHORISATION', :limited) + expect(AuthorisedEmailService.limited_system?).to eq(true) + end + + it 'returns false when system is open/closed' do + stub_const('AuthorisedEmailService::AUTHORISATION', :open) + expect(AuthorisedEmailService.limited_system?).to eq(false) + + stub_const('AuthorisedEmailService::AUTHORISATION', :closed) + expect(AuthorisedEmailService.limited_system?).to eq(false) + end + end + + describe '.open_system?' do + it 'returns true when system is open' do + stub_const('AuthorisedEmailService::AUTHORISATION', :open) + expect(AuthorisedEmailService.open_system?).to eq(true) + end + + it 'returns false when system is limited/closed' do + stub_const('AuthorisedEmailService::AUTHORISATION', :limited) + expect(AuthorisedEmailService.open_system?).to eq(false) + + stub_const('AuthorisedEmailService::AUTHORISATION', :closed) + expect(AuthorisedEmailService.open_system?).to eq(false) + end + end + + describe '.closed_or_limited_system?' do + it 'returns true when system is closed/limited' do + stub_const('AuthorisedEmailService::AUTHORISATION', :limited) + expect(AuthorisedEmailService.closed_or_limited_system?).to eq(true) + + stub_const('AuthorisedEmailService::AUTHORISATION', :closed) + expect(AuthorisedEmailService.closed_or_limited_system?).to eq(true) + end + + it 'returns false when system is open' do + stub_const('AuthorisedEmailService::AUTHORISATION', :open) + expect(AuthorisedEmailService.closed_or_limited_system?).to eq(false) + end + end + + describe '.authorised_to_register?' do + let!(:domain) { 'example.com' } + let!(:authorised_email) { 'authorised@example.com' } + let!(:unauthorised_email) { 'unauthorised@domain.com' } + + context 'system is closed' do + before do + stub_const('AuthorisedEmailService::AUTHORISATION', :closed) + stub_const('AuthorisedEmailService::AUTHORISED_DOMAIN', domain) + end + + it 'returns true if email belongs to authorised domain' do + expect(AuthorisedEmailService.authorised_to_register?(authorised_email)).to eq(true) + end + + it 'returns false if email does not belong authorised domain' do + expect(AuthorisedEmailService.authorised_to_register?(unauthorised_email)).to eq(false) + end + end + + context 'system is limited' do + before do + stub_const('AuthorisedEmailService::AUTHORISATION', :limited) + stub_const('AuthorisedEmailService::AUTHORISED_DOMAIN', domain) + end + + it 'returns true if email belongs to authorised domain' do + expect(AuthorisedEmailService.authorised_to_register?(authorised_email)).to eq(true) + end + + it 'returns false if email does not belong authorised domain' do + expect(AuthorisedEmailService.authorised_to_register?(unauthorised_email)).to eq(false) + end + end + + context 'system is open' do + before do + stub_const('AuthorisedEmailService::AUTHORISATION', :open) + stub_const('AuthorisedEmailService::AUTHORISED_DOMAIN', domain) + end + + it 'returns true if email belongs to authorised domain' do + expect(AuthorisedEmailService.authorised_to_register?(authorised_email)).to eq(true) + end + + it 'returns true if email does not belong authorised domain' do + expect(AuthorisedEmailService.authorised_to_register?(unauthorised_email)).to eq(true) + end + end + end + + describe '.email_domain_matches?' do + let!(:domain) { 'example.com' } + let!(:authorised_email) { 'authorised@example.com' } + let!(:unauthorised_email) { 'unauthorised@domain.com' } + + before do + stub_const('AuthorisedEmailService::AUTHORISED_DOMAIN', domain) + end + + it 'returns matched emails for authorised domain' do + matches = AuthorisedEmailService.email_domain_matches?(authorised_email) + expect(matches).to be_truthy + end + + it 'returns matched emails for authorised domain' do + matches = AuthorisedEmailService.email_domain_matches?(unauthorised_email) + expect(matches).to be_falsey + end + end + + describe '.email_domain_does_not_match?' do + let!(:domain) { 'example.com' } + let!(:authorised_email) { 'authorised@example.com' } + let!(:unauthorised_email) { 'unauthorised@domain.com' } + + before do + stub_const('AuthorisedEmailService::AUTHORISED_DOMAIN', domain) + end + + it 'returns true if email does not belong to authorised domain' do + matches = AuthorisedEmailService.email_domain_does_not_match?(unauthorised_email) + expect(matches).to be true + end + + it 'returns false if email belongs to authorised domain' do + matches = AuthorisedEmailService.email_domain_does_not_match?(authorised_email) + expect(matches).to be false + end + end +end From f96f169df14f4e48c018f493e2e84f79f81b54be Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Wed, 26 Jun 2019 16:59:54 +0800 Subject: [PATCH 032/152] Cleanups constant based authorisation values --- app/services/authorised_email_service.rb | 19 +++--- spec/rails_helper.rb | 1 + .../services/authorised_email_service_spec.rb | 59 ++++++------------- spec/support/authorisation_helpers.rb | 6 ++ 4 files changed, 36 insertions(+), 49 deletions(-) create mode 100644 spec/support/authorisation_helpers.rb diff --git a/app/services/authorised_email_service.rb b/app/services/authorised_email_service.rb index eded840..104b66e 100644 --- a/app/services/authorised_email_service.rb +++ b/app/services/authorised_email_service.rb @@ -1,18 +1,15 @@ module AuthorisedEmailService - AUTHORISATION = Rails.configuration.topsekrit_authorisation_setting - AUTHORISED_DOMAIN = Rails.configuration.topsekrit_authorised_domain - class << self def closed_system? - AUTHORISATION == :closed + authorisation == :closed end def limited_system? - AUTHORISATION == :limited + authorisation == :limited end def open_system? - AUTHORISATION == :open + authorisation == :open end def closed_or_limited_system? @@ -28,13 +25,21 @@ def authorised_to_register?(email) end def email_domain_matches?(email) - regexp = Regexp.new(".+#{AUTHORISED_DOMAIN}\\z") + regexp = Regexp.new(".+#{authorised_domain}\\z") email.to_s.match(regexp) end def email_domain_does_not_match?(email) !email_domain_matches?(email) end + + def authorisation + Rails.configuration.topsekrit_authorisation_setting + end + + def authorised_domain + Rails.configuration.topsekrit_authorised_domain + end end end diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index d6fb196..48b62fa 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -52,4 +52,5 @@ # Add commands to the rspec DSL for manipulating cookies config.include ShowMeTheCookies, :type => :feature + config.include AuthorisationHelpers end diff --git a/spec/services/authorised_email_service_spec.rb b/spec/services/authorised_email_service_spec.rb index f095fe5..888671c 100644 --- a/spec/services/authorised_email_service_spec.rb +++ b/spec/services/authorised_email_service_spec.rb @@ -1,74 +1,62 @@ require 'rails_helper' describe AuthorisedEmailService do - describe 'constants' do - it 'is set based on rails configuration' do - authorisation = Rails.configuration.topsekrit_authorisation_setting - authorised_domain = Rails.configuration.topsekrit_authorised_domain - - expect(authorisation).to eq :open - expect(authorised_domain).to eq 'reinteractive.net' - expect(AuthorisedEmailService::AUTHORISATION).to eq authorisation - expect(AuthorisedEmailService::AUTHORISED_DOMAIN).to eq authorised_domain - end - end - describe '.closed_system?' do it 'returns true when system is closed' do - stub_const('AuthorisedEmailService::AUTHORISATION', :closed) + configure_authorisation(:closed) expect(AuthorisedEmailService.closed_system?).to eq(true) end it 'returns false when system is open/limited' do - stub_const('AuthorisedEmailService::AUTHORISATION', :open) + configure_authorisation(:open) expect(AuthorisedEmailService.closed_system?).to eq(false) - stub_const('AuthorisedEmailService::AUTHORISATION', :limited) + configure_authorisation(:limited) expect(AuthorisedEmailService.closed_system?).to eq(false) end end describe '.limited_system?' do it 'returns true when system is limited' do - stub_const('AuthorisedEmailService::AUTHORISATION', :limited) + configure_authorisation(:limited) expect(AuthorisedEmailService.limited_system?).to eq(true) end it 'returns false when system is open/closed' do - stub_const('AuthorisedEmailService::AUTHORISATION', :open) + configure_authorisation(:open) expect(AuthorisedEmailService.limited_system?).to eq(false) - stub_const('AuthorisedEmailService::AUTHORISATION', :closed) + configure_authorisation(:closed) expect(AuthorisedEmailService.limited_system?).to eq(false) end end describe '.open_system?' do it 'returns true when system is open' do - stub_const('AuthorisedEmailService::AUTHORISATION', :open) + configure_authorisation(:open) expect(AuthorisedEmailService.open_system?).to eq(true) end it 'returns false when system is limited/closed' do - stub_const('AuthorisedEmailService::AUTHORISATION', :limited) + configure_authorisation(:limited) expect(AuthorisedEmailService.open_system?).to eq(false) - stub_const('AuthorisedEmailService::AUTHORISATION', :closed) + configure_authorisation(:closed) expect(AuthorisedEmailService.open_system?).to eq(false) end end describe '.closed_or_limited_system?' do it 'returns true when system is closed/limited' do - stub_const('AuthorisedEmailService::AUTHORISATION', :limited) + configure_authorisation(:limited) expect(AuthorisedEmailService.closed_or_limited_system?).to eq(true) - stub_const('AuthorisedEmailService::AUTHORISATION', :closed) + configure_authorisation(:closed) expect(AuthorisedEmailService.closed_or_limited_system?).to eq(true) end it 'returns false when system is open' do - stub_const('AuthorisedEmailService::AUTHORISATION', :open) + configure_authorisation(:open) expect(AuthorisedEmailService.closed_or_limited_system?).to eq(false) end end @@ -79,10 +67,7 @@ let!(:unauthorised_email) { 'unauthorised@domain.com' } context 'system is closed' do - before do - stub_const('AuthorisedEmailService::AUTHORISATION', :closed) - stub_const('AuthorisedEmailService::AUTHORISED_DOMAIN', domain) - end + before { configure_authorisation(:closed, domain) } it 'returns true if email belongs to authorised domain' do expect(AuthorisedEmailService.authorised_to_register?(authorised_email)).to eq(true) @@ -94,10 +79,7 @@ end context 'system is limited' do - before do - stub_const('AuthorisedEmailService::AUTHORISATION', :limited) - stub_const('AuthorisedEmailService::AUTHORISED_DOMAIN', domain) - end + before { configure_authorisation(:limited, domain) } it 'returns true if email belongs to authorised domain' do expect(AuthorisedEmailService.authorised_to_register?(authorised_email)).to eq(true) @@ -109,10 +91,7 @@ end context 'system is open' do - before do - stub_const('AuthorisedEmailService::AUTHORISATION', :open) - stub_const('AuthorisedEmailService::AUTHORISED_DOMAIN', domain) - end + before { configure_authorisation(:open, domain) } it 'returns true if email belongs to authorised domain' do expect(AuthorisedEmailService.authorised_to_register?(authorised_email)).to eq(true) @@ -129,9 +108,7 @@ let!(:authorised_email) { 'authorised@example.com' } let!(:unauthorised_email) { 'unauthorised@domain.com' } - before do - stub_const('AuthorisedEmailService::AUTHORISED_DOMAIN', domain) - end + before { configure_authorisation(:open, domain) } it 'returns matched emails for authorised domain' do matches = AuthorisedEmailService.email_domain_matches?(authorised_email) @@ -149,9 +126,7 @@ let!(:authorised_email) { 'authorised@example.com' } let!(:unauthorised_email) { 'unauthorised@domain.com' } - before do - stub_const('AuthorisedEmailService::AUTHORISED_DOMAIN', domain) - end + before { configure_authorisation(:open, domain) } it 'returns true if email does not belong to authorised domain' do matches = AuthorisedEmailService.email_domain_does_not_match?(unauthorised_email) diff --git a/spec/support/authorisation_helpers.rb b/spec/support/authorisation_helpers.rb new file mode 100644 index 0000000..a63b116 --- /dev/null +++ b/spec/support/authorisation_helpers.rb @@ -0,0 +1,6 @@ +module AuthorisationHelpers + def configure_authorisation(system_type, domain = "") + allow(Rails.configuration).to receive(:topsekrit_authorisation_setting).and_return(system_type) + allow(Rails.configuration).to receive(:topsekrit_authorised_domain).and_return(domain) + end +end From 0f42fad8fcacac6c14dec4eb6047b3aedf8c25e0 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Wed, 26 Jun 2019 17:16:15 +0800 Subject: [PATCH 033/152] Prevents user from registering when email is aunauthorised --- .../users/registrations_controller.rb | 12 ++++++--- config/locales/en.yml | 2 ++ spec/features/user_registration_spec.rb | 25 +++++++++++++++++++ 3 files changed, 36 insertions(+), 3 deletions(-) diff --git a/app/controllers/users/registrations_controller.rb b/app/controllers/users/registrations_controller.rb index 19db455..e2e64c2 100644 --- a/app/controllers/users/registrations_controller.rb +++ b/app/controllers/users/registrations_controller.rb @@ -11,9 +11,15 @@ class Users::RegistrationsController < Devise::RegistrationsController # end # POST /resource - # def create - # super - # end + def create + if AuthorisedEmailService.authorised_to_register?(sign_up_params[:email]) + super + else + self.resource = resource_class.new sign_up_params + resource.errors.add(:email, t('registrations.unauthorised_email')) + respond_with resource + end + end # GET /resource/edit # def edit diff --git a/config/locales/en.yml b/config/locales/en.yml index c3dc46a..b08651f 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -23,3 +23,5 @@ en: oauth: already_registered: 'You are already registered with this account. Please login instead.' failed: 'Authentication failed' + registrations: + unauthorised_email: 'You are not allowed to register with this email.' diff --git a/spec/features/user_registration_spec.rb b/spec/features/user_registration_spec.rb index 48bc335..df64f2d 100644 --- a/spec/features/user_registration_spec.rb +++ b/spec/features/user_registration_spec.rb @@ -1,6 +1,8 @@ require 'rails_helper' describe 'User registration with email' do + before { configure_authorisation(:open) } + describe 'successful' do let(:email) { "user@secretlink.org" } @@ -49,4 +51,27 @@ expect { click_on "Register" }.to_not change { User.count } end end + + context 'system is limited/closed' do + let!(:authorised_email) { 'authorised@secretlink.org' } + let!(:unauthorised_email) { 'unauthorised@domain.com' } + let!(:domain) { "secretlink.org" } + + before do + configure_authorisation(:closed, domain) + visit root_path + end + + it 'allows emails with authorised domain' do + fill_in "user[email]", with: authorised_email + expect { click_on "Register" }.to change { User.count }.by(1) + end + + it 'does not allow emails with unauthorised domains' do + fill_in "user[email]", with: unauthorised_email + expect { click_on "Register" }.to_not change { User.count } + expect(page).to have_content I18n.t('registrations.unauthorised_email') + end + end + end From e138ecd7f7cf6cf90eafd2e5c64148e606babe9e Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Wed, 26 Jun 2019 17:20:20 +0800 Subject: [PATCH 034/152] Test cleanups --- spec/features/limited_system_spec.rb | 24 ------------------------ spec/features/user_registration_spec.rb | 13 ++++--------- 2 files changed, 4 insertions(+), 33 deletions(-) delete mode 100644 spec/features/limited_system_spec.rb diff --git a/spec/features/limited_system_spec.rb b/spec/features/limited_system_spec.rb deleted file mode 100644 index 9fccec9..0000000 --- a/spec/features/limited_system_spec.rb +++ /dev/null @@ -1,24 +0,0 @@ -require "rails_helper" - -describe "Registering on a limited system" do - - let(:user) { create :user, email: "from@example.com" } - let(:disapproved_email) { "from@example.org" } - let(:authorised_domain) { "example.com" } - - before(:each) do - allow(Rails.configuration).to \ - receive(:topsekrit_authorisation_setting).and_return(:limited) - - allow(Rails.configuration).to \ - receive(:topsekrit_authorised_domain).and_return(authorised_domain) - end - - context "using an approved email domain" do - it "allows the user to register" - end - - context "trying to use a disapproved email domain" do - it "doesn't allow the user to register" - end -end diff --git a/spec/features/user_registration_spec.rb b/spec/features/user_registration_spec.rb index df64f2d..b212dda 100644 --- a/spec/features/user_registration_spec.rb +++ b/spec/features/user_registration_spec.rb @@ -6,10 +6,12 @@ describe 'successful' do let(:email) { "user@secretlink.org" } - it 'creates an unconfirmed user' do + before do visit root_path - fill_in "user[email]", with: email + end + + it 'creates an unconfirmed user' do expect { click_on "Register" }.to change { User.count }.by(1) user = User.last @@ -19,21 +21,14 @@ end it 'shows a confirmation message' do - visit root_path - - fill_in "user[email]", with: email click_on "Register" expect(page).to have_content I18n.t('devise.registrations.signed_up_but_unconfirmed') end it 'sends a confirmation email' do - visit root_path - - fill_in "user[email]", with: email click_on "Register" mail = ActionMailer::Base.deliveries.last - expect(mail.to).to match_array([email]) expect(mail.subject).to eq "Confirmation instructions" end From f2da7dd4563d598fbb5b4933f5e2dbc0758522cb Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Wed, 26 Jun 2019 17:38:44 +0800 Subject: [PATCH 035/152] Prevents user from registering via oauth if domain is not authorised --- app/controllers/oauth_callbacks_controller.rb | 12 ++++++++++++ spec/features/oauth_feature_spec.rb | 15 +++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/app/controllers/oauth_callbacks_controller.rb b/app/controllers/oauth_callbacks_controller.rb index bd131c2..8ce9365 100644 --- a/app/controllers/oauth_callbacks_controller.rb +++ b/app/controllers/oauth_callbacks_controller.rb @@ -4,6 +4,9 @@ def google email = request.env['omniauth.auth'] && request.env['omniauth.auth']['info'] && request.env['omniauth.auth']['info']['email'] + # Handling for closed/limited systems + handle_not_allowed and return if not_allowed?(email) + user = User.new(email: email) user.skip_confirmation_notification! @@ -35,4 +38,13 @@ def handle_unknown_error(user) # So tests will catch when creation of user with email only fails raise user.errors.full_messages.to_s end + + def not_allowed?(email) + !AuthorisedEmailService.authorised_to_register?(email) + end + + def handle_not_allowed + flash[:notice] = t('registrations.unauthorised_email') + redirect_to root_path + end end diff --git a/spec/features/oauth_feature_spec.rb b/spec/features/oauth_feature_spec.rb index 8c49e75..edf1626 100644 --- a/spec/features/oauth_feature_spec.rb +++ b/spec/features/oauth_feature_spec.rb @@ -62,5 +62,20 @@ after { OmniAuth.config.logger = previous_logger } end + context 'system is closed and user is not authorised' do + before do + configure_authorisation(:closed, 'strict.com') + OmniAuth.config.add_mock(:google_oauth2, info: info) + end + + it 'does not register the user' do + visit root_path + find('a#oauth-google').click + + expect(User.count).to eq 0 + expect(page).to have_content I18n.t('registrations.unauthorised_email') + end + end + end end From ae61e6ddbd623fa5d55c90f2d1cb711013ef7d46 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Wed, 26 Jun 2019 17:51:40 +0800 Subject: [PATCH 036/152] User feedback improvements --- app/controllers/oauth_callbacks_controller.rb | 4 ++-- app/controllers/users/registrations_controller.rb | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/controllers/oauth_callbacks_controller.rb b/app/controllers/oauth_callbacks_controller.rb index 8ce9365..f1c43bd 100644 --- a/app/controllers/oauth_callbacks_controller.rb +++ b/app/controllers/oauth_callbacks_controller.rb @@ -29,7 +29,7 @@ def auth_failure private def handle_email_taken - flash[:notice] = t('oauth.already_registered') + flash[:error] = t('oauth.already_registered') redirect_to new_user_session_path end @@ -44,7 +44,7 @@ def not_allowed?(email) end def handle_not_allowed - flash[:notice] = t('registrations.unauthorised_email') + flash[:error] = t('registrations.unauthorised_email') redirect_to root_path end end diff --git a/app/controllers/users/registrations_controller.rb b/app/controllers/users/registrations_controller.rb index e2e64c2..f97449e 100644 --- a/app/controllers/users/registrations_controller.rb +++ b/app/controllers/users/registrations_controller.rb @@ -16,6 +16,7 @@ def create super else self.resource = resource_class.new sign_up_params + resource.validate # Look for any other validation errors resource.errors.add(:email, t('registrations.unauthorised_email')) respond_with resource end From 7ef0b9de5201269fb1064730debe3f26d1eb33a9 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Wed, 26 Jun 2019 18:03:11 +0800 Subject: [PATCH 037/152] Adds recaptcha tags in registration form --- app/views/devise/registrations/new.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/devise/registrations/new.html.erb b/app/views/devise/registrations/new.html.erb index 4a6009b..55a4fde 100644 --- a/app/views/devise/registrations/new.html.erb +++ b/app/views/devise/registrations/new.html.erb @@ -10,7 +10,7 @@
    - <%= f.button :submit, "Sign up" %> + <%= invisible_recaptcha_tags text: 'Sign Up', class: 'btn btn-default' %>
    <% end %>
    From a39188fe047757890ca1d8518d5bdaf8ba0d5196 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Wed, 26 Jun 2019 21:19:49 +0800 Subject: [PATCH 038/152] Moves authorised email validation to model --- app/controllers/oauth_callbacks_controller.rb | 8 ++--- .../users/registrations_controller.rb | 13 ++----- app/models/user.rb | 8 +++++ config/locales/en.yml | 4 +-- spec/features/oauth_feature_spec.rb | 2 +- spec/features/user_registration_spec.rb | 2 +- spec/models/user_spec.rb | 35 +++++++++++++++++++ 7 files changed, 53 insertions(+), 19 deletions(-) diff --git a/app/controllers/oauth_callbacks_controller.rb b/app/controllers/oauth_callbacks_controller.rb index f1c43bd..b87e933 100644 --- a/app/controllers/oauth_callbacks_controller.rb +++ b/app/controllers/oauth_callbacks_controller.rb @@ -4,9 +4,6 @@ def google email = request.env['omniauth.auth'] && request.env['omniauth.auth']['info'] && request.env['omniauth.auth']['info']['email'] - # Handling for closed/limited systems - handle_not_allowed and return if not_allowed?(email) - user = User.new(email: email) user.skip_confirmation_notification! @@ -14,6 +11,7 @@ def google redirect_to user_confirmation_path(confirmation_token: user.confirmation_token) else handle_email_taken and return if user.errors.added?(:email, :taken) + handle_unauthorised and return if user.errors.added?(:email, t('field_errors.unauthorised')) # This may not be necessary because a failed oauth calls directly # to auth_failure, but keeping this here as a safeguard auth_failure and return if user.errors.added?(:email, :blank) @@ -43,8 +41,8 @@ def not_allowed?(email) !AuthorisedEmailService.authorised_to_register?(email) end - def handle_not_allowed - flash[:error] = t('registrations.unauthorised_email') + def handle_unauthorised + flash[:error] = "Email #{t('field_errors.unauthorised')}" redirect_to root_path end end diff --git a/app/controllers/users/registrations_controller.rb b/app/controllers/users/registrations_controller.rb index f97449e..19db455 100644 --- a/app/controllers/users/registrations_controller.rb +++ b/app/controllers/users/registrations_controller.rb @@ -11,16 +11,9 @@ class Users::RegistrationsController < Devise::RegistrationsController # end # POST /resource - def create - if AuthorisedEmailService.authorised_to_register?(sign_up_params[:email]) - super - else - self.resource = resource_class.new sign_up_params - resource.validate # Look for any other validation errors - resource.errors.add(:email, t('registrations.unauthorised_email')) - respond_with resource - end - end + # def create + # super + # end # GET /resource/edit # def edit diff --git a/app/models/user.rb b/app/models/user.rb index fb86846..b997977 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -4,9 +4,17 @@ class User < ActiveRecord::Base devise :database_authenticatable, :registerable, :confirmable, :recoverable, :rememberable, :trackable, :validatable + validate :email_authorised?, on: :create + protected def password_required? confirmed? ? super : false end + + def email_authorised? + unless AuthorisedEmailService.authorised_to_register?(email) + errors.add(:email, I18n.t('field_errors.unauthorised')) + end + end end diff --git a/config/locales/en.yml b/config/locales/en.yml index b08651f..0e79e0d 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -23,5 +23,5 @@ en: oauth: already_registered: 'You are already registered with this account. Please login instead.' failed: 'Authentication failed' - registrations: - unauthorised_email: 'You are not allowed to register with this email.' + field_errors: + unauthorised: 'is unauthorised' diff --git a/spec/features/oauth_feature_spec.rb b/spec/features/oauth_feature_spec.rb index edf1626..feb6b6d 100644 --- a/spec/features/oauth_feature_spec.rb +++ b/spec/features/oauth_feature_spec.rb @@ -73,7 +73,7 @@ find('a#oauth-google').click expect(User.count).to eq 0 - expect(page).to have_content I18n.t('registrations.unauthorised_email') + expect(page).to have_content I18n.t('field_errors.unauthorised') end end diff --git a/spec/features/user_registration_spec.rb b/spec/features/user_registration_spec.rb index b212dda..01e4cbd 100644 --- a/spec/features/user_registration_spec.rb +++ b/spec/features/user_registration_spec.rb @@ -65,7 +65,7 @@ it 'does not allow emails with unauthorised domains' do fill_in "user[email]", with: unauthorised_email expect { click_on "Register" }.to_not change { User.count } - expect(page).to have_content I18n.t('registrations.unauthorised_email') + expect(page).to have_content I18n.t('field_errors.unauthorised') end end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 5ccb642..0c388e4 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -1,6 +1,41 @@ require 'rails_helper' describe User do + describe 'validations' do + let!(:domain) { 'reinteractive.net' } + let!(:authorised_user) { build :user, email: 'authorised@reinteractive.net' } + let!(:unauthorised_user) { build :user, email: 'unauthorised@example.com' } + + context 'system is closed' do + before { configure_authorisation(:closed, domain) } + + it 'validates if email is allowed for the system' do + expect(authorised_user).to be_valid + expect(unauthorised_user).to_not be_valid + expect(unauthorised_user.errors.messages[:email]).to include I18n.t('field_errors.unauthorised') + end + end + + context 'system is limited' do + before { configure_authorisation(:limited, domain) } + + it 'validates if email is allowed for the system' do + expect(authorised_user).to be_valid + expect(unauthorised_user).to_not be_valid + expect(unauthorised_user.errors.messages[:email]).to include I18n.t('field_errors.unauthorised') + end + end + + context 'system is open' do + before { configure_authorisation(:open, domain) } + + it 'does not validate if email is allowed for the system' do + expect(authorised_user).to be_valid + expect(unauthorised_user).to be_valid + end + end + end + describe '#set_reset_password_token' do it 'returns the plaintext token' do potential_token = subject.send(:set_reset_password_token) From b5b98aa8185f52eaaa6d21e9b69ba613e2044134 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Wed, 26 Jun 2019 21:19:57 +0800 Subject: [PATCH 039/152] Form style fixes --- app/assets/stylesheets/components/devise-form.sass | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/assets/stylesheets/components/devise-form.sass b/app/assets/stylesheets/components/devise-form.sass index d44e248..3c341c6 100644 --- a/app/assets/stylesheets/components/devise-form.sass +++ b/app/assets/stylesheets/components/devise-form.sass @@ -3,5 +3,9 @@ margin: 20px 0px .body margin: 40px 0px + label + margin-right: 5px + .help-block + display: inline-block .shared-links margin: 20px 0px From 8dd765787f371296bcfefca103cd9eafa4afd9c2 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Thu, 27 Jun 2019 07:41:49 +0800 Subject: [PATCH 040/152] Refactors to only use 1 type of flash --- app/controllers/secrets_controller.rb | 2 +- app/helpers/application_helper.rb | 3 +++ app/views/shared/_flash_messages.html.erb | 23 +++-------------------- 3 files changed, 7 insertions(+), 21 deletions(-) diff --git a/app/controllers/secrets_controller.rb b/app/controllers/secrets_controller.rb index 8d029b8..45fb932 100644 --- a/app/controllers/secrets_controller.rb +++ b/app/controllers/secrets_controller.rb @@ -17,7 +17,7 @@ def create flash[:message] = "The secret has been encrypted and an email sent to the recipient, feel free to send another secret!" redirect_to new_secret_path else - flash.now[:message] = @secret.errors.full_messages.join("
    ".html_safe) + flash.now[:error] = @secret.errors.full_messages.join("
    ".html_safe) render :new end end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 7060e3c..fd74c1d 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -32,4 +32,7 @@ def auth_new_page? request.path == '/auth_tokens/new' end + def flash_display_type(key) + HashWithIndifferentAccess.new(alert: 'danger', error: 'danger')[key] || 'success' + end end diff --git a/app/views/shared/_flash_messages.html.erb b/app/views/shared/_flash_messages.html.erb index e1ff36a..7fb9e9f 100644 --- a/app/views/shared/_flash_messages.html.erb +++ b/app/views/shared/_flash_messages.html.erb @@ -1,26 +1,9 @@ -<% if flash[:error] %> -
    - <%= flash[:error] %> -
    -<% end %> -<% if flash[:message] %> -
    -
    - -
    -
    -<% end %> - - -<% if flash[:notice] %> +<% flash.each do |type, message| %>
    -
    From d49790b453c826bdbfefa1a223921c1eb8ca8197 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Thu, 27 Jun 2019 08:07:58 +0800 Subject: [PATCH 041/152] Fixes header links --- app/views/shared/_header.html.erb | 6 +++--- config/routes.rb | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/views/shared/_header.html.erb b/app/views/shared/_header.html.erb index 0f079e4..4d2bc74 100644 --- a/app/views/shared/_header.html.erb +++ b/app/views/shared/_header.html.erb @@ -1,9 +1,9 @@
    + + <% @secrets.each do |secret| %> + <%= secret.title %> + <% end %>
    From ef1a068d94ee4fdec671242443cf4d3a817c9b1f Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Thu, 27 Jun 2019 10:57:41 +0800 Subject: [PATCH 047/152] Adds secret_item component --- app/helpers/dashboard_helper.rb | 13 +++++++++++++ app/views/dashboard/_secret_item.erb | 18 ++++++++++++++++++ app/views/dashboard/index.html.erb | 2 +- 3 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 app/helpers/dashboard_helper.rb create mode 100644 app/views/dashboard/_secret_item.erb diff --git a/app/helpers/dashboard_helper.rb b/app/helpers/dashboard_helper.rb new file mode 100644 index 0000000..5e4a028 --- /dev/null +++ b/app/helpers/dashboard_helper.rb @@ -0,0 +1,13 @@ +module DashboardHelper + def dashboard_time_display(time) + time.in_time_zone.strftime("%m/%d/%y, %l.%M%P") + end + + def viewed_status(secret) + if secret.consumed_at? + "Viewed: #{dashboard_time_display(secret.consumed_at)}" + else + "not viewed, expiry: #{dashboard_time_display(secret.expire_at)}" + end + end +end diff --git a/app/views/dashboard/_secret_item.erb b/app/views/dashboard/_secret_item.erb new file mode 100644 index 0000000..25ab01f --- /dev/null +++ b/app/views/dashboard/_secret_item.erb @@ -0,0 +1,18 @@ +<% secret %> + +
    +
    +
    <%= secret.title %>
    +
    +
    +
    +
    +
    From: <%= secret.from_email %>
    +
    To: <%= secret.to_email %>
    +
    + +
    +
    diff --git a/app/views/dashboard/index.html.erb b/app/views/dashboard/index.html.erb index c764392..62b5b91 100644 --- a/app/views/dashboard/index.html.erb +++ b/app/views/dashboard/index.html.erb @@ -5,6 +5,6 @@
    <% @secrets.each do |secret| %> - <%= secret.title %> + <%= render 'secret_item', secret: secret %> <% end %>
    From e4a5e44412029b558a06d180ac2adbfe0d310f55 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Thu, 27 Jun 2019 12:51:19 +0800 Subject: [PATCH 048/152] Styles secret-item --- app/assets/stylesheets/application.sass | 1 + .../stylesheets/components/secret-item.sass | 33 +++++++++++++++++++ app/assets/stylesheets/variables.sass | 4 +-- app/controllers/dashboard_controller.rb | 2 +- app/views/dashboard/_secret_item.erb | 14 ++++++-- 5 files changed, 48 insertions(+), 6 deletions(-) create mode 100644 app/assets/stylesheets/components/secret-item.sass diff --git a/app/assets/stylesheets/application.sass b/app/assets/stylesheets/application.sass index fb0c9c0..1e45704 100644 --- a/app/assets/stylesheets/application.sass +++ b/app/assets/stylesheets/application.sass @@ -13,6 +13,7 @@ // Components @import "components/devise-form" +@import "components/secret-item" body min-height: 100vh diff --git a/app/assets/stylesheets/components/secret-item.sass b/app/assets/stylesheets/components/secret-item.sass new file mode 100644 index 0000000..eaf5251 --- /dev/null +++ b/app/assets/stylesheets/components/secret-item.sass @@ -0,0 +1,33 @@ +.secret-item + display: flex + flex-direction: column + padding: 10px + border: $default_border + + .header + display: flex + padding: 0 10px + .title + font-size: 1.8rem + font-weight: 700px + margin-right: 10px + .viewed-status + padding: 3px 5px + border: $default_border + font-size: 1.3rem + + .body + display: flex + align-items: center + padding: 10px + justify-content: space-evenly + .emails + display: flex + align-items: center + flex-basis: 40% + .mail-icon + font-size: 40px + .metadata + flex-basis: 40% + .actions + flex-basis: 20% diff --git a/app/assets/stylesheets/variables.sass b/app/assets/stylesheets/variables.sass index 82f7978..717e5b3 100644 --- a/app/assets/stylesheets/variables.sass +++ b/app/assets/stylesheets/variables.sass @@ -6,11 +6,11 @@ $green3: #1C5050 $green4: #132D2D $text-grey: #666666 - +$default_border: thin solid #797979 //Sizing $mobile-switch: 675px =mobile-media-query @media(max-width:675px) - @content \ No newline at end of file + @content diff --git a/app/controllers/dashboard_controller.rb b/app/controllers/dashboard_controller.rb index 931b61d..840800c 100644 --- a/app/controllers/dashboard_controller.rb +++ b/app/controllers/dashboard_controller.rb @@ -1,5 +1,5 @@ class DashboardController < AuthenticatedController def index - @secrets = current_user.secrets + @secrets = current_user.secrets.order(created_at: :desc).last(10) end end diff --git a/app/views/dashboard/_secret_item.erb b/app/views/dashboard/_secret_item.erb index 25ab01f..114e4de 100644 --- a/app/views/dashboard/_secret_item.erb +++ b/app/views/dashboard/_secret_item.erb @@ -3,16 +3,24 @@
    <%= secret.title %>
    + <% if secret.consumed_at.blank? %> +
    Not Viewed
    + <% end %>
    -
    -
    From: <%= secret.from_email %>
    -
    To: <%= secret.to_email %>
    + +
    +
    +
    See notes here
    +
    From dc8f0b38b62bbe99ad6ebe5cf788e47a974a7f7e Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Thu, 27 Jun 2019 13:21:02 +0800 Subject: [PATCH 049/152] Styles dashboard --- app/assets/stylesheets/application.sass | 7 +++++++ app/assets/stylesheets/dashboard.sass | 14 ++++++++++++++ app/assets/stylesheets/secrets.sass | 6 +++--- app/assets/stylesheets/topsekrit.scss | 2 +- app/views/dashboard/index.html.erb | 17 +++++++++-------- 5 files changed, 34 insertions(+), 12 deletions(-) create mode 100644 app/assets/stylesheets/dashboard.sass diff --git a/app/assets/stylesheets/application.sass b/app/assets/stylesheets/application.sass index 1e45704..ddf819a 100644 --- a/app/assets/stylesheets/application.sass +++ b/app/assets/stylesheets/application.sass @@ -5,8 +5,11 @@ @import "bootstrap" @import "topsekrit" @import "header-and-footer" + +// Pages @import "home" @import "secrets" +@import "dashboard" // Layouts @import "layouts/devise" @@ -61,3 +64,7 @@ ul.nostyle &:hover background-color: $green3 border-color: $green3 + +footer + // Keeps footer at the bottom at all times (even if content is short) + margin-top: auto diff --git a/app/assets/stylesheets/dashboard.sass b/app/assets/stylesheets/dashboard.sass new file mode 100644 index 0000000..5f5cbae --- /dev/null +++ b/app/assets/stylesheets/dashboard.sass @@ -0,0 +1,14 @@ +.dashboard + // TODO: Refactor this to be shared + // background-color: #F2F2F2 + + > .header + display: flex + align-items: center + padding: 20px 0 + h2 + display: inline-block + margin: 0 20px 0 0 + .secrets-list + .secret-item + margin: 20px 0 diff --git a/app/assets/stylesheets/secrets.sass b/app/assets/stylesheets/secrets.sass index 59ae768..aa6bd3f 100644 --- a/app/assets/stylesheets/secrets.sass +++ b/app/assets/stylesheets/secrets.sass @@ -12,7 +12,7 @@ margin-bottom: 20px h2 font-size: 1.7em - + .secret__flex-container display: flex +mobile-media-query @@ -43,9 +43,9 @@ background-image: image-url("ol-numbers/2.svg") li.three background-image: image-url("ol-numbers/3.svg") - + li margin-bottom: 10px font-size: 1.1em - line-height: 1.5 \ No newline at end of file + line-height: 1.5 diff --git a/app/assets/stylesheets/topsekrit.scss b/app/assets/stylesheets/topsekrit.scss index 37bde57..9d1a0c8 100644 --- a/app/assets/stylesheets/topsekrit.scss +++ b/app/assets/stylesheets/topsekrit.scss @@ -31,7 +31,7 @@ form.send-secret-form { } .flash { - margin-bottom: 20px; + margin-bottom: 5px; span { margin-left: 15px; padding: 10px; diff --git a/app/views/dashboard/index.html.erb b/app/views/dashboard/index.html.erb index 62b5b91..32567b2 100644 --- a/app/views/dashboard/index.html.erb +++ b/app/views/dashboard/index.html.erb @@ -1,10 +1,11 @@ -
    -
    -

    All Secrets

    - <%= link_to 'Create New', new_secret_path, class: 'btn' %> +
    +
    +

    All Secrets

    + <%= link_to 'Create New', new_secret_path, class: 'button green' %> +
    +
    + <% @secrets.each do |secret| %> + <%= render 'secret_item', secret: secret %> + <% end %>
    - - <% @secrets.each do |secret| %> - <%= render 'secret_item', secret: secret %> - <% end %>
    From 586b5c70dcae022153f8053c187c61258da133f2 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Thu, 27 Jun 2019 14:03:33 +0800 Subject: [PATCH 050/152] Adds a way to toggle notes --- app/assets/javascripts/application.js | 3 +++ .../javascripts/components/secret-item.js | 22 +++++++++++++++++++ .../stylesheets/components/secret-item.sass | 10 +++++++++ app/views/dashboard/_secret_item.erb | 3 ++- 4 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 app/assets/javascripts/components/secret-item.js diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index 1ac51c7..ed1450f 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -15,3 +15,6 @@ //= require bootstrap-sprockets //= require topsekrit //= require ui-functions + +// Components +//= require components/secret-item diff --git a/app/assets/javascripts/components/secret-item.js b/app/assets/javascripts/components/secret-item.js new file mode 100644 index 0000000..6bbb5d7 --- /dev/null +++ b/app/assets/javascripts/components/secret-item.js @@ -0,0 +1,22 @@ +$(document).ready(function() { + function SecretItem(rootDom) { + this.$root = $(rootDom); + this.$notes = this.$root.find('.notes'); + this.init(); + } + + SecretItem.prototype.init = function () { + this.$seeNoteBtn = this.$root.find('.notes-trigger'); + this.$seeNoteBtn.on('click', this.toggleNote.bind(this)); + } + + SecretItem.prototype.toggleNote = function () { + this.$notes.toggle('fast'); + } + + //Intialization code + const $secretItems = $(this).find(".secret-item"); + $secretItems.each(function () { + new SecretItem(this) + }) +}); diff --git a/app/assets/stylesheets/components/secret-item.sass b/app/assets/stylesheets/components/secret-item.sass index eaf5251..706cccc 100644 --- a/app/assets/stylesheets/components/secret-item.sass +++ b/app/assets/stylesheets/components/secret-item.sass @@ -15,6 +15,7 @@ padding: 3px 5px border: $default_border font-size: 1.3rem + text-transform: uppercase .body display: flex @@ -31,3 +32,12 @@ flex-basis: 40% .actions flex-basis: 20% + .notes-trigger + text-decoration: underline + cursor: pointer + text-align: center + .notes + display: none + background-color: #F2F2F2 + padding: 10px + margin-top: 5px diff --git a/app/views/dashboard/_secret_item.erb b/app/views/dashboard/_secret_item.erb index 114e4de..8abbc0a 100644 --- a/app/views/dashboard/_secret_item.erb +++ b/app/views/dashboard/_secret_item.erb @@ -20,7 +20,8 @@
    <%= viewed_status(secret) %>
    -
    See notes here
    +
    See Notes
    +
    <%= secret.comments %>
    From 607a1f62fca1f111742dea91629490bc8fd2bcde Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Thu, 27 Jun 2019 15:14:31 +0800 Subject: [PATCH 051/152] Adds locked/unlocked icons style fixes --- app/assets/images/locked-icon.svg | 32 +++++++++++++++ app/assets/images/unlocked-icon.svg | 41 +++++++++++++++++++ .../stylesheets/components/secret-item.sass | 11 ++++- app/controllers/secrets_controller.rb | 2 +- app/views/dashboard/_secret_item.erb | 6 ++- 5 files changed, 89 insertions(+), 3 deletions(-) create mode 100644 app/assets/images/locked-icon.svg create mode 100644 app/assets/images/unlocked-icon.svg diff --git a/app/assets/images/locked-icon.svg b/app/assets/images/locked-icon.svg new file mode 100644 index 0000000..e55bf0d --- /dev/null +++ b/app/assets/images/locked-icon.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + diff --git a/app/assets/images/unlocked-icon.svg b/app/assets/images/unlocked-icon.svg new file mode 100644 index 0000000..88d1343 --- /dev/null +++ b/app/assets/images/unlocked-icon.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + diff --git a/app/assets/stylesheets/components/secret-item.sass b/app/assets/stylesheets/components/secret-item.sass index 706cccc..837c8c9 100644 --- a/app/assets/stylesheets/components/secret-item.sass +++ b/app/assets/stylesheets/components/secret-item.sass @@ -7,6 +7,7 @@ .header display: flex padding: 0 10px + margin-bottom: 5px .title font-size: 1.8rem font-weight: 700px @@ -26,12 +27,20 @@ display: flex align-items: center flex-basis: 40% + padding: 0 5px .mail-icon - font-size: 40px + margin-right: 20px + .email-group + div + padding: 3px 0 .metadata flex-basis: 40% + padding: 0 5px + div + padding: 3px 0 .actions flex-basis: 20% + padding: 0 5px .notes-trigger text-decoration: underline cursor: pointer diff --git a/app/controllers/secrets_controller.rb b/app/controllers/secrets_controller.rb index 45fb932..4aa861a 100644 --- a/app/controllers/secrets_controller.rb +++ b/app/controllers/secrets_controller.rb @@ -15,7 +15,7 @@ def create @secret = SecretService.encrypt_new_secret(secret_params) if @secret.persisted? flash[:message] = "The secret has been encrypted and an email sent to the recipient, feel free to send another secret!" - redirect_to new_secret_path + redirect_to dashboard_path else flash.now[:error] = @secret.errors.full_messages.join("
    ".html_safe) render :new diff --git a/app/views/dashboard/_secret_item.erb b/app/views/dashboard/_secret_item.erb index 8abbc0a..80bd749 100644 --- a/app/views/dashboard/_secret_item.erb +++ b/app/views/dashboard/_secret_item.erb @@ -9,7 +9,11 @@
    - + <% if secret.consumed_at? %> + <%= image_tag 'unlocked-icon.svg', class: 'mail-icon' %> + <% else %> + <%= image_tag 'locked-icon.svg', class: 'mail-icon' %> + <% end %>
    See Notes
    diff --git a/vendor/cache/local_time-2.1.0.gem b/vendor/cache/local_time-2.1.0.gem new file mode 100644 index 0000000000000000000000000000000000000000..9dd2c47a4a1e1d8dbc9eb48fb9273b6c9e681881 GIT binary patch literal 26624 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

    9r(M+Rapblj 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 Date: Thu, 27 Jun 2019 17:48:10 +0800 Subject: [PATCH 053/152] Redirects to new_secret_path when user has no secret --- app/controllers/dashboard_controller.rb | 7 ++++++- config/locales/en.yml | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/app/controllers/dashboard_controller.rb b/app/controllers/dashboard_controller.rb index 840800c..f206f1f 100644 --- a/app/controllers/dashboard_controller.rb +++ b/app/controllers/dashboard_controller.rb @@ -1,5 +1,10 @@ class DashboardController < AuthenticatedController def index - @secrets = current_user.secrets.order(created_at: :desc).last(10) + @secrets = current_user.secrets.order(created_at: :desc).first(10) + + if @secrets.empty? + flash[:notice] = t('welcome') + redirect_to new_secret_path + end end end diff --git a/config/locales/en.yml b/config/locales/en.yml index 0e79e0d..f6428cf 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -20,6 +20,7 @@ # available at http://guides.rubyonrails.org/i18n.html. en: + welcome: "Welcome! Start sending your first secret." oauth: already_registered: 'You are already registered with this account. Please login instead.' failed: 'Authentication failed' From e7ed36fd0aa0f3cea7bc9081c327ced35001cd32 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Fri, 28 Jun 2019 07:47:17 +0800 Subject: [PATCH 054/152] Fixes failing tests --- spec/features/sending_secret_spec.rb | 2 +- spec/features/user_confirmation_spec.rb | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/spec/features/sending_secret_spec.rb b/spec/features/sending_secret_spec.rb index 4966f80..066a192 100644 --- a/spec/features/sending_secret_spec.rb +++ b/spec/features/sending_secret_spec.rb @@ -17,7 +17,7 @@ fill_in "Comments", with: "Some super secret info" fill_in "Expire at", with: (Time.current + 1.day).strftime("%d %B, %Y") click_button "Send your Secret" - expect(current_path).to eql(new_secret_path) + expect(current_path).to eql(dashboard_path) end it "allows a secret to be created" do diff --git a/spec/features/user_confirmation_spec.rb b/spec/features/user_confirmation_spec.rb index 336087d..c2b0583 100644 --- a/spec/features/user_confirmation_spec.rb +++ b/spec/features/user_confirmation_spec.rb @@ -11,7 +11,7 @@ expect(user.reload.confirmed_at).to_not be_nil end - it 'asks the user to set the password and redirects to dashboard' do + it 'asks the user to set the password' do visit user_confirmation_path(confirmation_token: user.confirmation_token) expect(page).to have_content('Set your password') @@ -21,7 +21,7 @@ fill_in 'user[password_confirmation]', with: 'password' click_on 'Set my password' - expect(page).to have_content I18n.t('devise.passwords.updated') + expect(page).to have_content I18n.t('welcome') expect(page).to have_content 'Create a new secret to send' expect(user.reload.encrypted_password).to_not be_blank From 39991dc00b8c62346f1743c7fe89157d13822cb5 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Fri, 28 Jun 2019 09:49:58 +0800 Subject: [PATCH 055/152] Adds tests for dashboard --- Gemfile | 1 + Gemfile.lock | 2 + app/views/dashboard/_secret_item.erb | 6 +-- spec/factories/secret.rb | 16 ++++++ spec/features/viewing_dashboard_spec.rb | 69 ++++++++++++++++++++++++ spec/support/capybara.rb | 1 + vendor/cache/timecop-0.9.1.gem | Bin 0 -> 16896 bytes 7 files changed, 92 insertions(+), 3 deletions(-) create mode 100644 spec/factories/secret.rb create mode 100644 spec/features/viewing_dashboard_spec.rb create mode 100644 vendor/cache/timecop-0.9.1.gem diff --git a/Gemfile b/Gemfile index efc07af..20fe67c 100644 --- a/Gemfile +++ b/Gemfile @@ -48,6 +48,7 @@ group :test do gem "faker" gem "launchy" gem "show_me_the_cookies", "~> 3.1.0" + gem "timecop" end group :development, :test do diff --git a/Gemfile.lock b/Gemfile.lock index 677d350..9ce4a16 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -261,6 +261,7 @@ GEM thor (0.19.4) thread_safe (0.3.6) tilt (2.0.7) + timecop (0.9.1) tzinfo (1.2.3) thread_safe (~> 0.1) uglifier (3.2.0) @@ -325,6 +326,7 @@ DEPENDENCIES show_me_the_cookies (~> 3.1.0) simple_form skylight + timecop uglifier (>= 1.3.0) unicorn unicorn-rails diff --git a/app/views/dashboard/_secret_item.erb b/app/views/dashboard/_secret_item.erb index c5e4649..cf60a9a 100644 --- a/app/views/dashboard/_secret_item.erb +++ b/app/views/dashboard/_secret_item.erb @@ -1,6 +1,6 @@ <% secret %> -

    +
    ">
    <%= secret.title %>
    <% if secret.consumed_at.blank? %> @@ -23,9 +23,9 @@
    Sent: <%= local_time(secret.created_at, dashboard_time_format) %>
    <% if secret.consumed_at? %> -
    Viewed: <%= local_time(secret.consumed_at) %>
    +
    Viewed: <%= local_time(secret.consumed_at, dashboard_time_format) %>
    <% else %> -
    not viewed, expiry: <%= local_time(secret.expire_at) %>
    +
    not viewed, expiry: <%= local_time(secret.expire_at, dashboard_time_format) %>
    <% end %>
    diff --git a/spec/factories/secret.rb b/spec/factories/secret.rb new file mode 100644 index 0000000..336518b --- /dev/null +++ b/spec/factories/secret.rb @@ -0,0 +1,16 @@ +FactoryBot.define do + factory :secret do + uuid { SecureRandom.uuid } + secret_key { SecureRandom.hex(16) } + title { 'Sample Secret' } + from_email { 'user@secretlink.org' } + to_email { 'user@random.com' } + secret { 'abc' } + comments { 'This is a sample secret' } + expire_at { Time.current + 10.days } + + trait :consumed do + consumed_at { Time.current } + end + end +end diff --git a/spec/features/viewing_dashboard_spec.rb b/spec/features/viewing_dashboard_spec.rb new file mode 100644 index 0000000..5a062f3 --- /dev/null +++ b/spec/features/viewing_dashboard_spec.rb @@ -0,0 +1,69 @@ +require 'rails_helper' + +describe 'Viewing Dashboard' do + let!(:user) { create :user } + let!(:dashboard_time_format) { "%m/%d/%y, %l.%M%P" } + + before do + login_as(user) + Timecop.freeze + end + + after { Timecop.return } + + context 'user has not sent a secret yet' do + it 'redirects to secrets_new_path' do + visit dashboard_path + expect(page).to have_current_path(new_secret_path) + expect(page).to have_content('Create a new secret') + expect(page).to have_content(I18n.t('welcome')) + end + end + + context 'user has already sent his first secret' do + let!(:secret) { create :secret } + let!(:consumed_secret) { + create :secret, :consumed, + to_email: 'activeuser@random.com', + title: 'Consumed Secret', + comments: 'This is a consumed secret' + } + + before do + visit dashboard_path + end + + it 'displays the unconsumed secret' do + within(:css, '.secret-item.not-viewed') do + expect(page).to have_content('Sample Secret') + expect(page).to have_content(user.email) + expect(page).to have_content('user@random.com') + expect(page).to have_content("Sent: #{secret.created_at.strftime(dashboard_time_format)}") + expect(page).to have_content('not viewed') + expect(page).to have_content("expiry: #{secret.expire_at.strftime(dashboard_time_format)}") + + find('.notes-trigger').click + expect(page).to have_content('This is a sample secret') + end + end + + it 'displays the consumed secret' do + within(:css, '.secret-item.viewed') do + expect(page).to have_content('Consumed Secret') + expect(page).to have_content(user.email) + expect(page).to have_content('activeuser@random.com') + expect(page).to have_content("Sent: #{consumed_secret.created_at.strftime(dashboard_time_format)}") + expect(page).to have_content("Viewed: #{consumed_secret.consumed_at.strftime(dashboard_time_format)}") + + find('.notes-trigger').click + expect(page).to have_content('This is a consumed secret') + end + end + + it 'has a link to create new secret' do + click_on 'Create New' + expect(page).to have_current_path(new_secret_path) + expect(page).to have_content('Create a new secret') + end + end +end diff --git a/spec/support/capybara.rb b/spec/support/capybara.rb index fb506ab..a92c826 100644 --- a/spec/support/capybara.rb +++ b/spec/support/capybara.rb @@ -3,6 +3,7 @@ require 'capybara/poltergeist' Capybara.default_max_wait_time = 15 +Capybara.ignore_hidden_elements = true Capybara.register_driver :poltergeist do |app| Capybara::Poltergeist::Driver.new(app, debug: false) diff --git a/vendor/cache/timecop-0.9.1.gem b/vendor/cache/timecop-0.9.1.gem new file mode 100644 index 0000000000000000000000000000000000000000..7c3eb5ec2534f63d074b501123e0cf3c2275bf02 GIT binary patch literal 16896 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 Date: Fri, 28 Jun 2019 10:52:53 +0800 Subject: [PATCH 056/152] Cleanups --- app/assets/stylesheets/application.sass | 4 ++++ app/assets/stylesheets/dashboard.sass | 3 --- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/assets/stylesheets/application.sass b/app/assets/stylesheets/application.sass index ddf819a..5610722 100644 --- a/app/assets/stylesheets/application.sass +++ b/app/assets/stylesheets/application.sass @@ -23,6 +23,10 @@ body display: flex flex-direction: column + // We still need to do other adjustments + // To change the background color + // background-color: #F2F2F2 + * font-family: "Open Sans", sans-serif diff --git a/app/assets/stylesheets/dashboard.sass b/app/assets/stylesheets/dashboard.sass index 5f5cbae..fc6e4b4 100644 --- a/app/assets/stylesheets/dashboard.sass +++ b/app/assets/stylesheets/dashboard.sass @@ -1,7 +1,4 @@ .dashboard - // TODO: Refactor this to be shared - // background-color: #F2F2F2 - > .header display: flex align-items: center From 8395145755ce027ba0d62bb06380d3a73a1d09bf Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Fri, 28 Jun 2019 11:31:56 +0800 Subject: [PATCH 057/152] Adds a link to registration when the user views the secret --- app/views/secrets/show.html.erb | 8 +++++++- spec/features/sending_secret_spec.rb | 7 +++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/app/views/secrets/show.html.erb b/app/views/secrets/show.html.erb index df6302f..ebca175 100644 --- a/app/views/secrets/show.html.erb +++ b/app/views/secrets/show.html.erb @@ -43,7 +43,13 @@ <% end %> <% end %>

    - +
    + <% unless current_user.present? %> +
    + Start sending your secret. + <%= link_to 'Register Here', new_user_registration_path %> +
    + <% end %>
    diff --git a/spec/features/sending_secret_spec.rb b/spec/features/sending_secret_spec.rb index 066a192..8c12820 100644 --- a/spec/features/sending_secret_spec.rb +++ b/spec/features/sending_secret_spec.rb @@ -79,6 +79,13 @@ expect(Secret.find(secret.id).encrypted_secret).to_not be_nil end + it "shows the user a link to registration" do + expect(page).to have_content("Start sending your secret. Register Here") + + click_on "Register Here" + expect(page).to have_current_path(new_user_registration_path) + end + it "retrieves and decrypts the secret" do click_button "Click here to show the secret" expect(page).to have_content("Super Secret Message") From 1a44ea85d8930069161e10a6d22011b498a2f401 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Fri, 28 Jun 2019 14:18:00 +0800 Subject: [PATCH 058/152] Adds resend secret function in dashboard --- .../stylesheets/components/secret-item.sass | 14 +++++++++++++- app/controllers/secrets_controller.rb | 15 +++++++++++++++ app/models/secret.rb | 7 +++++++ app/services/secret_service.rb | 6 ++++++ app/views/dashboard/_secret_item.erb | 7 ++++++- config/routes.rb | 5 ++++- 6 files changed, 51 insertions(+), 3 deletions(-) diff --git a/app/assets/stylesheets/components/secret-item.sass b/app/assets/stylesheets/components/secret-item.sass index 085cb06..8f4072e 100644 --- a/app/assets/stylesheets/components/secret-item.sass +++ b/app/assets/stylesheets/components/secret-item.sass @@ -39,12 +39,24 @@ div padding: 3px 0 .actions + display: flex + flex-direction: column + justify-content: space-around flex-basis: 20% padding: 0 5px + text-align: center + .viewed-and-deleted + border: thin dotted + padding: 5px + font-style: italic + .resend-btn + border: thin solid + padding: 5px + font-style: italic .notes-trigger + margin: 10px text-decoration: underline cursor: pointer - text-align: center .notes display: none background-color: #F2F2F2 diff --git a/app/controllers/secrets_controller.rb b/app/controllers/secrets_controller.rb index 4aa861a..f07e3dc 100644 --- a/app/controllers/secrets_controller.rb +++ b/app/controllers/secrets_controller.rb @@ -11,6 +11,21 @@ def new @secret = Secret.new(from_email: current_user.email) end + def resend + secret = current_user.secrets.find(params[:id]) + + unless secret.expired? + SecretService.resend_notification(secret) + + flash[:notice] = "The secret was resent to: #{secret.to_email}" + redirect_to dashboard_path + else + flash[:error] = "This secret is expired. Please create a new one." + redirect_to dashboard_path + end + + end + def create @secret = SecretService.encrypt_new_secret(secret_params) if @secret.persisted? diff --git a/app/models/secret.rb b/app/models/secret.rb index 807d7fe..01d6d81 100644 --- a/app/models/secret.rb +++ b/app/models/secret.rb @@ -25,6 +25,13 @@ class Secret < ActiveRecord::Base belongs_to :user, primary_key: 'email', foreign_key: 'from_email' + def sent_at + # We're using creted_at as the send date for the meantime + # We may need to add a sent_at field if we will be updating + # the sent date whenever we resend + created_at + end + def delete_encrypted_information update_attribute(:secret, nil) end diff --git a/app/services/secret_service.rb b/app/services/secret_service.rb index e345efc..d698e9a 100644 --- a/app/services/secret_service.rb +++ b/app/services/secret_service.rb @@ -9,6 +9,12 @@ def self.encrypt_new_secret(params) secret end + def self.resend_notification(secret) + # TODO: Mailers should be in the background + # Refactor this together with all the other deliver_now calls + SecretMailer.secret_notification(secret).deliver_now + end + def self.correct_key?(secret, password) begin secret.secret_key = password diff --git a/app/views/dashboard/_secret_item.erb b/app/views/dashboard/_secret_item.erb index cf60a9a..e57d157 100644 --- a/app/views/dashboard/_secret_item.erb +++ b/app/views/dashboard/_secret_item.erb @@ -20,7 +20,7 @@
    + <% if secret.consumed_at? %> +
    Viewed and Deleted
    + <% else %> + <%= link_to "Resend Link", resend_secret_path(secret), class: 'resend-btn' %> + <% end %>
    See Notes
    diff --git a/config/routes.rb b/config/routes.rb index dbd6398..9d8b26c 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -11,7 +11,10 @@ get '/', to: 'pages#home', as: 'root' - resources :secrets, only: [:show, :new, :create, :edit, :update] + resources :secrets, only: [:show, :new, :create, :edit, :update] do + member { get 'resend' } + end + resources :decrypted_secrets, only: :create post '/decrypt_secret', to: 'decrypted_secrets#create' From 7773a0174394c31282b11392c201d7a24e212dbf Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Fri, 28 Jun 2019 15:23:38 +0800 Subject: [PATCH 059/152] Adds test for resend function Adds expired state --- .../stylesheets/components/secret-item.sass | 13 ++++-- app/controllers/secrets_controller.rb | 4 +- app/views/dashboard/_secret_item.erb | 8 +++- config/locales/en.yml | 4 ++ spec/factories/secret.rb | 6 ++- spec/features/resending_secret_spec.rb | 46 +++++++++++++++++++ spec/features/viewing_dashboard_spec.rb | 5 +- 7 files changed, 74 insertions(+), 12 deletions(-) create mode 100644 spec/features/resending_secret_spec.rb diff --git a/app/assets/stylesheets/components/secret-item.sass b/app/assets/stylesheets/components/secret-item.sass index 8f4072e..8d3b283 100644 --- a/app/assets/stylesheets/components/secret-item.sass +++ b/app/assets/stylesheets/components/secret-item.sass @@ -45,14 +45,17 @@ flex-basis: 20% padding: 0 5px text-align: center - .viewed-and-deleted - border: thin dotted - padding: 5px - font-style: italic .resend-btn - border: thin solid + border: medium solid padding: 5px font-style: italic + .resend-btn.viewed + border: thin dotted + .resend-btn.expired + border: thin dotted + padding: 5px + color: red + .notes-trigger margin: 10px text-decoration: underline diff --git a/app/controllers/secrets_controller.rb b/app/controllers/secrets_controller.rb index f07e3dc..e985a38 100644 --- a/app/controllers/secrets_controller.rb +++ b/app/controllers/secrets_controller.rb @@ -17,10 +17,10 @@ def resend unless secret.expired? SecretService.resend_notification(secret) - flash[:notice] = "The secret was resent to: #{secret.to_email}" + flash[:notice] = t('secret.resend.success', email: secret.to_email) redirect_to dashboard_path else - flash[:error] = "This secret is expired. Please create a new one." + flash[:error] = t('secret.resend.failed') redirect_to dashboard_path end diff --git a/app/views/dashboard/_secret_item.erb b/app/views/dashboard/_secret_item.erb index e57d157..1384cf5 100644 --- a/app/views/dashboard/_secret_item.erb +++ b/app/views/dashboard/_secret_item.erb @@ -1,6 +1,8 @@ <% secret %> +<% viewed_class = secret.consumed_at? ? "viewed" : "not-viewed" %> +<% expired_class = secret.expired? ? "expired" : "" %> -
    "> +
    <%= secret.title %>
    <% if secret.consumed_at.blank? %> @@ -31,7 +33,9 @@
    <% if secret.consumed_at? %> -
    Viewed and Deleted
    +
    Viewed and Deleted
    + <% elsif secret.expired? %> +
    Expired
    <% else %> <%= link_to "Resend Link", resend_secret_path(secret), class: 'resend-btn' %> <% end %> diff --git a/config/locales/en.yml b/config/locales/en.yml index f6428cf..4ef8ee0 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -26,3 +26,7 @@ en: failed: 'Authentication failed' field_errors: unauthorised: 'is unauthorised' + secret: + resend: + success: "Secret resent to: %{email}" + failed: "This secret is expired. Please create a new one." diff --git a/spec/factories/secret.rb b/spec/factories/secret.rb index 336518b..3394e35 100644 --- a/spec/factories/secret.rb +++ b/spec/factories/secret.rb @@ -3,7 +3,7 @@ uuid { SecureRandom.uuid } secret_key { SecureRandom.hex(16) } title { 'Sample Secret' } - from_email { 'user@secretlink.org' } + from_email { 'someone@secretlink.org' } to_email { 'user@random.com' } secret { 'abc' } comments { 'This is a sample secret' } @@ -12,5 +12,9 @@ trait :consumed do consumed_at { Time.current } end + + trait :expired do + expire_at { Time.current - 10.days } + end end end diff --git a/spec/features/resending_secret_spec.rb b/spec/features/resending_secret_spec.rb new file mode 100644 index 0000000..cae8028 --- /dev/null +++ b/spec/features/resending_secret_spec.rb @@ -0,0 +1,46 @@ +require 'rails_helper' + +describe 'Resending secret' do + let!(:user) { create :user } + let!(:secret) { create :secret, user: user } + let!(:consumed_secret) { create :secret, :consumed, title: 'Consumed Secret', user: user } + let!(:expired_secret) { create :secret, :expired, title: 'Expired Secret', user: user } + + before do + login_as(user) + Timecop.freeze + end + + after { Timecop.return } + + before do + visit dashboard_path + end + + it 'shows the correct label for consumed secrets' do + within(:css, '.secret-item.viewed') do + expect(page).to have_content("Viewed and Deleted") + end + end + + it 'shows the correct label for expired secrets' do + within(:css, '.secret-item.not-viewed.expired') do + expect(page).to have_content("Expired") + end + end + + it 'allows to resend unconsumed and unexpired secrets' do + within(:css, '.secret-item.not-viewed:not(.expired)') do + click_on "Resend Link" + end + + expect(page).to have_content(I18n.t('secret.resend.success', email: secret.to_email)) + email = ActionMailer::Base.deliveries.last + expect(email.to).to eq([secret.to_email]) + expect(email.reply_to).to eq([user.email]) + expect(email.subject).to eq("SecretLink.org: A secret has been shared with you - Reference #{secret.uuid}") + expect(email.from).to eq(["info@SecretLink.org"]) + expect(email.to_s).to match("This link will show you the secret:") + expect(email.to_s).to match(/\/secrets\/#{secret.uuid}\?key=\w+/) + end +end diff --git a/spec/features/viewing_dashboard_spec.rb b/spec/features/viewing_dashboard_spec.rb index 5a062f3..058692a 100644 --- a/spec/features/viewing_dashboard_spec.rb +++ b/spec/features/viewing_dashboard_spec.rb @@ -21,12 +21,13 @@ end context 'user has already sent his first secret' do - let!(:secret) { create :secret } + let!(:secret) { create :secret, user: user } let!(:consumed_secret) { create :secret, :consumed, to_email: 'activeuser@random.com', title: 'Consumed Secret', - comments: 'This is a consumed secret' + comments: 'This is a consumed secret', + user: user } before do From 62be7e7ccfa33b327b0927656e1159fc51e6c8ae Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Fri, 28 Jun 2019 15:59:52 +0800 Subject: [PATCH 060/152] Responsiveness fixes --- app/assets/stylesheets/components/secret-item.sass | 6 ++++++ app/assets/stylesheets/header-and-footer.sass | 10 +++++++++- app/assets/stylesheets/topsekrit.scss | 4 ---- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/app/assets/stylesheets/components/secret-item.sass b/app/assets/stylesheets/components/secret-item.sass index 085cb06..8269cac 100644 --- a/app/assets/stylesheets/components/secret-item.sass +++ b/app/assets/stylesheets/components/secret-item.sass @@ -50,3 +50,9 @@ background-color: #F2F2F2 padding: 10px margin-top: 5px + +@media screen and (max-width: 576px) + .body + flex-direction: column + align-items: flex-start !important + min-height: 230px diff --git a/app/assets/stylesheets/header-and-footer.sass b/app/assets/stylesheets/header-and-footer.sass index a9ef4ed..16b416b 100644 --- a/app/assets/stylesheets/header-and-footer.sass +++ b/app/assets/stylesheets/header-and-footer.sass @@ -20,4 +20,12 @@ header.main-nav li:first-child margin-left: 0 +mobile-media-query - font-size: .9em \ No newline at end of file + font-size: .9em + +@media screen and (max-width: 576px) + .main-nav + flex-direction: column + align-items: flex-start !important + .main-nav__links + padding: 10px 0 + margin: 0px diff --git a/app/assets/stylesheets/topsekrit.scss b/app/assets/stylesheets/topsekrit.scss index 9d1a0c8..98d8b97 100644 --- a/app/assets/stylesheets/topsekrit.scss +++ b/app/assets/stylesheets/topsekrit.scss @@ -32,10 +32,6 @@ form.send-secret-form { .flash { margin-bottom: 5px; - span { - margin-left: 15px; - padding: 10px; - } } .field_with_errors .error { From 7793b0deb904c88b623fa9dccee7a39cb8c95cfb Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Fri, 28 Jun 2019 16:05:06 +0800 Subject: [PATCH 061/152] Style fixes --- app/assets/stylesheets/layouts/devise.sass | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/stylesheets/layouts/devise.sass b/app/assets/stylesheets/layouts/devise.sass index 9760b1f..459440e 100644 --- a/app/assets/stylesheets/layouts/devise.sass +++ b/app/assets/stylesheets/layouts/devise.sass @@ -4,7 +4,7 @@ body.devise-layout flex-direction: column .container - margin-top: 40px + margin-top: 20px .footer //This makes the footer stay at bottom From c068abdd1d5b6ce37fb17815dfcefaca5f6a1b57 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Mon, 1 Jul 2019 10:08:39 +0800 Subject: [PATCH 062/152] Converts resend to send another secret --- app/controllers/secrets_controller.rb | 25 ++++++++++++------------- app/views/dashboard/_secret_item.erb | 7 ++++--- config/routes.rb | 4 +++- 3 files changed, 19 insertions(+), 17 deletions(-) diff --git a/app/controllers/secrets_controller.rb b/app/controllers/secrets_controller.rb index e985a38..183bb09 100644 --- a/app/controllers/secrets_controller.rb +++ b/app/controllers/secrets_controller.rb @@ -8,22 +8,21 @@ def show end def new - @secret = Secret.new(from_email: current_user.email) - end - - def resend - secret = current_user.secrets.find(params[:id]) - - unless secret.expired? - SecretService.resend_notification(secret) - - flash[:notice] = t('secret.resend.success', email: secret.to_email) - redirect_to dashboard_path + base_secret = current_user.secrets.find_by(uuid: params[:base_id]) + + if base_secret.present? + @secret = Secret.new( + title: base_secret.title, + from_email: base_secret.from_email, + to_email: base_secret.to_email, + comments: base_secret.comments + ) else - flash[:error] = t('secret.resend.failed') - redirect_to dashboard_path + @secret = Secret.new(from_email: current_user.email) end + end + def extend_expiry end def create diff --git a/app/views/dashboard/_secret_item.erb b/app/views/dashboard/_secret_item.erb index 1384cf5..1ca7bb5 100644 --- a/app/views/dashboard/_secret_item.erb +++ b/app/views/dashboard/_secret_item.erb @@ -34,12 +34,13 @@
    <% if secret.consumed_at? %>
    Viewed and Deleted
    - <% elsif secret.expired? %> -
    Expired
    <% else %> - <%= link_to "Resend Link", resend_secret_path(secret), class: 'resend-btn' %> + <%= link_to "Extend", extend_secret_path(secret), class: 'resend-btn' %> <% end %>
    See Notes
    +
    + <%= link_to "Send Another", new_secret_path(base_id: secret.uuid) %> +
    <%= secret.comments %>
    diff --git a/config/routes.rb b/config/routes.rb index 9d8b26c..3509da2 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -12,7 +12,9 @@ get '/', to: 'pages#home', as: 'root' resources :secrets, only: [:show, :new, :create, :edit, :update] do - member { get 'resend' } + member do + post 'extend' + end end resources :decrypted_secrets, only: :create From 4b36011354aeb15e0baffdf6f80b75e988dde872 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Mon, 1 Jul 2019 10:16:50 +0800 Subject: [PATCH 063/152] Styles send another button --- .../stylesheets/components/secret-item.sass | 21 ++++++++++--------- app/views/dashboard/_secret_item.erb | 13 +++++++----- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/app/assets/stylesheets/components/secret-item.sass b/app/assets/stylesheets/components/secret-item.sass index 8d3b283..e685346 100644 --- a/app/assets/stylesheets/components/secret-item.sass +++ b/app/assets/stylesheets/components/secret-item.sass @@ -45,21 +45,22 @@ flex-basis: 20% padding: 0 5px text-align: center - .resend-btn + .extend-btn border: medium solid padding: 5px font-style: italic - .resend-btn.viewed + .extend-btn.viewed border: thin dotted - .resend-btn.expired - border: thin dotted - padding: 5px - color: red - - .notes-trigger + .grouped-actions + display: flex margin: 10px - text-decoration: underline - cursor: pointer + justify-content: space-around + .notes-trigger + text-decoration: underline + cursor: pointer + .send-another + text-decoration: underline + .notes display: none background-color: #F2F2F2 diff --git a/app/views/dashboard/_secret_item.erb b/app/views/dashboard/_secret_item.erb index 1ca7bb5..5bab2b2 100644 --- a/app/views/dashboard/_secret_item.erb +++ b/app/views/dashboard/_secret_item.erb @@ -33,13 +33,16 @@
    <% if secret.consumed_at? %> -
    Viewed and Deleted
    +
    Viewed and Deleted
    <% else %> - <%= link_to "Extend", extend_secret_path(secret), class: 'resend-btn' %> + <%= link_to "Extend", extend_secret_path(secret), class: 'extend-btn' %> <% end %> -
    See Notes
    -
    - <%= link_to "Send Another", new_secret_path(base_id: secret.uuid) %> +
    +
    See Notes
    +
    |
    +
    + <%= link_to "Send Another", new_secret_path(base_id: secret.uuid) %> +
    From f62664cceb8ed77842d984186f5c85dbe04fd62f Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Mon, 1 Jul 2019 11:46:54 +0800 Subject: [PATCH 064/152] Adds extend function --- app/controllers/secrets_controller.rb | 4 ++++ app/models/secret.rb | 4 ++++ app/views/dashboard/_secret_item.erb | 2 +- config/locales/en.yml | 6 ++---- config/routes.rb | 2 +- 5 files changed, 12 insertions(+), 6 deletions(-) diff --git a/app/controllers/secrets_controller.rb b/app/controllers/secrets_controller.rb index 183bb09..f81912c 100644 --- a/app/controllers/secrets_controller.rb +++ b/app/controllers/secrets_controller.rb @@ -23,6 +23,10 @@ def new end def extend_expiry + @secret = current_user.secrets.find(params[:id]) + @secret.extend_expiry + + redirect_to dashboard_path, notice: t('secrets.extended_expiry', title: @secret.title) end def create diff --git a/app/models/secret.rb b/app/models/secret.rb index 01d6d81..4d77e2d 100644 --- a/app/models/secret.rb +++ b/app/models/secret.rb @@ -44,6 +44,10 @@ def expired? expire_at.present? && expire_at < Time.now end + def extend_expiry + update_attribute(:expire_at, Time.current + 1.week) + end + def expire_at_within_limit if Rails.application.config.topsekrit_maximum_expiry_time max_expiry_in_config = (Time.now + Rails.application.config.topsekrit_maximum_expiry_time).to_i diff --git a/app/views/dashboard/_secret_item.erb b/app/views/dashboard/_secret_item.erb index 5bab2b2..ae28ce5 100644 --- a/app/views/dashboard/_secret_item.erb +++ b/app/views/dashboard/_secret_item.erb @@ -35,7 +35,7 @@ <% if secret.consumed_at? %>
    Viewed and Deleted
    <% else %> - <%= link_to "Extend", extend_secret_path(secret), class: 'extend-btn' %> + <%= link_to "Extend", extend_expiry_secret_path(secret), class: 'extend-btn' %> <% end %>
    See Notes
    diff --git a/config/locales/en.yml b/config/locales/en.yml index 4ef8ee0..f51e01b 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -26,7 +26,5 @@ en: failed: 'Authentication failed' field_errors: unauthorised: 'is unauthorised' - secret: - resend: - success: "Secret resent to: %{email}" - failed: "This secret is expired. Please create a new one." + secrets: + extended_expiry: 'Extended %{title} expiry for 1 week' diff --git a/config/routes.rb b/config/routes.rb index 3509da2..71bbd14 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -13,7 +13,7 @@ resources :secrets, only: [:show, :new, :create, :edit, :update] do member do - post 'extend' + get 'extend_expiry' end end From 9e61da32ab353d2cc90ecc17cde7b90cd829f9d3 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Mon, 1 Jul 2019 12:16:26 +0800 Subject: [PATCH 065/152] Adds tests for extending secret --- .../stylesheets/components/secret-item.sass | 2 +- app/controllers/secrets_controller.rb | 9 ++++- app/views/dashboard/_secret_item.erb | 2 +- spec/features/extending_secret_spec.rb | 40 +++++++++++++++++++ 4 files changed, 49 insertions(+), 4 deletions(-) create mode 100644 spec/features/extending_secret_spec.rb diff --git a/app/assets/stylesheets/components/secret-item.sass b/app/assets/stylesheets/components/secret-item.sass index e685346..d3a1b43 100644 --- a/app/assets/stylesheets/components/secret-item.sass +++ b/app/assets/stylesheets/components/secret-item.sass @@ -50,7 +50,7 @@ padding: 5px font-style: italic .extend-btn.viewed - border: thin dotted + border: none .grouped-actions display: flex margin: 10px diff --git a/app/controllers/secrets_controller.rb b/app/controllers/secrets_controller.rb index f81912c..98dad64 100644 --- a/app/controllers/secrets_controller.rb +++ b/app/controllers/secrets_controller.rb @@ -24,9 +24,14 @@ def new def extend_expiry @secret = current_user.secrets.find(params[:id]) - @secret.extend_expiry - redirect_to dashboard_path, notice: t('secrets.extended_expiry', title: @secret.title) + if @secret.expired? + @secret.extend_expiry + redirect_to dashboard_path, notice: t('secrets.extended_expiry', title: @secret.title) + else + # This case should not happen base on UI + redirect_to dashboard_path + end end def create diff --git a/app/views/dashboard/_secret_item.erb b/app/views/dashboard/_secret_item.erb index ae28ce5..f532666 100644 --- a/app/views/dashboard/_secret_item.erb +++ b/app/views/dashboard/_secret_item.erb @@ -34,7 +34,7 @@
    <% if secret.consumed_at? %>
    Viewed and Deleted
    - <% else %> + <% elsif secret.expired? %> <%= link_to "Extend", extend_expiry_secret_path(secret), class: 'extend-btn' %> <% end %>
    diff --git a/spec/features/extending_secret_spec.rb b/spec/features/extending_secret_spec.rb new file mode 100644 index 0000000..e9b617e --- /dev/null +++ b/spec/features/extending_secret_spec.rb @@ -0,0 +1,40 @@ +require 'rails_helper' + +describe 'Extending secret' do + let!(:user) { create :user } + let!(:secret) { create :secret, user: user } + let!(:consumed_secret) { create :secret, :consumed, title: 'Consumed Secret', user: user } + let!(:expired_secret) { create :secret, :expired, user: user } + + before do + login_as(user) + Timecop.freeze + end + + after { Timecop.return } + + before do + visit dashboard_path + end + + it 'shows the correct label for consumed secrets' do + within(:css, '.secret-item.viewed') do + expect(page).to have_content("Viewed and Deleted") + end + end + + it 'does not allow to extend unexpired secrets' do + within(:css, '.secret-item.not-viewed:not(.expired)') do + expect(page).to_not have_content 'Extend' + end + end + + it 'allows to extend expiry of unconsumed and expired secret' do + within(:css, '.secret-item.not-viewed.expired') do + click_on "Extend" + end + + expect(page).to have_content(I18n.t('secrets.extended_expiry', title: secret.title)) + expect(expired_secret.reload.expire_at).to eq Time.current + 1.week + end +end From 97f3365ba05cb9d5c37335852f7a5154749301d3 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Mon, 1 Jul 2019 12:30:33 +0800 Subject: [PATCH 066/152] Adds test for sending another secret --- spec/features/resending_secret_spec.rb | 46 -------------------- spec/features/sending_another_secret_spec.rb | 26 +++++++++++ 2 files changed, 26 insertions(+), 46 deletions(-) delete mode 100644 spec/features/resending_secret_spec.rb create mode 100644 spec/features/sending_another_secret_spec.rb diff --git a/spec/features/resending_secret_spec.rb b/spec/features/resending_secret_spec.rb deleted file mode 100644 index cae8028..0000000 --- a/spec/features/resending_secret_spec.rb +++ /dev/null @@ -1,46 +0,0 @@ -require 'rails_helper' - -describe 'Resending secret' do - let!(:user) { create :user } - let!(:secret) { create :secret, user: user } - let!(:consumed_secret) { create :secret, :consumed, title: 'Consumed Secret', user: user } - let!(:expired_secret) { create :secret, :expired, title: 'Expired Secret', user: user } - - before do - login_as(user) - Timecop.freeze - end - - after { Timecop.return } - - before do - visit dashboard_path - end - - it 'shows the correct label for consumed secrets' do - within(:css, '.secret-item.viewed') do - expect(page).to have_content("Viewed and Deleted") - end - end - - it 'shows the correct label for expired secrets' do - within(:css, '.secret-item.not-viewed.expired') do - expect(page).to have_content("Expired") - end - end - - it 'allows to resend unconsumed and unexpired secrets' do - within(:css, '.secret-item.not-viewed:not(.expired)') do - click_on "Resend Link" - end - - expect(page).to have_content(I18n.t('secret.resend.success', email: secret.to_email)) - email = ActionMailer::Base.deliveries.last - expect(email.to).to eq([secret.to_email]) - expect(email.reply_to).to eq([user.email]) - expect(email.subject).to eq("SecretLink.org: A secret has been shared with you - Reference #{secret.uuid}") - expect(email.from).to eq(["info@SecretLink.org"]) - expect(email.to_s).to match("This link will show you the secret:") - expect(email.to_s).to match(/\/secrets\/#{secret.uuid}\?key=\w+/) - end -end diff --git a/spec/features/sending_another_secret_spec.rb b/spec/features/sending_another_secret_spec.rb new file mode 100644 index 0000000..ff7348f --- /dev/null +++ b/spec/features/sending_another_secret_spec.rb @@ -0,0 +1,26 @@ +require 'rails_helper' + +describe 'Sending another secret' do + let!(:user) { create :user } + let!(:secret) { create :secret, user: user } + + before do + login_as(user) + end + + before do + visit dashboard_path + click_on 'Send Another' + end + + it 'navigates to new secret page' do + expect(page).to have_current_path(new_secret_path(base_id: secret.uuid)) + end + + it 'copies details of old secrets' do + expect(page).to have_selector("input[value='#{secret.title}']") + expect(page).to have_selector("input[value='#{secret.from_email}']") + expect(page).to have_selector("input[value='#{secret.to_email}']") + expect(page).to have_content(secret.comments) + end +end From 42c1afd74f2a79d188d17e59c981e73b26bdf5b3 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Mon, 1 Jul 2019 12:45:48 +0800 Subject: [PATCH 067/152] User feedback improvements for expired secret --- app/controllers/concerns/retrieve_secret.rb | 2 +- app/views/dashboard/_secret_item.erb | 2 ++ config/locales/en.yml | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/app/controllers/concerns/retrieve_secret.rb b/app/controllers/concerns/retrieve_secret.rb index ccb9eee..2700bd8 100644 --- a/app/controllers/concerns/retrieve_secret.rb +++ b/app/controllers/concerns/retrieve_secret.rb @@ -6,7 +6,7 @@ def retrieve_secret @secret = Secret.find_by(uuid: params[:id]) case when @secret.expired? - flash[:error] = "Sorry, that secret has expired, please ask the person who sent it to you to send it again." + flash[:error] = t('secrets.expired_error') redirect_to(root_path) when @secret.present? && SecretService.correct_key?(@secret, params[:key]) @secret diff --git a/app/views/dashboard/_secret_item.erb b/app/views/dashboard/_secret_item.erb index f532666..2a36ba8 100644 --- a/app/views/dashboard/_secret_item.erb +++ b/app/views/dashboard/_secret_item.erb @@ -26,6 +26,8 @@
    <% if secret.consumed_at? %>
    Viewed: <%= local_time(secret.consumed_at, dashboard_time_format) %>
    + <% elsif secret.expired? %> +
    not viewed, expired: <%= local_time(secret.expire_at, dashboard_time_format) %>
    <% else %>
    not viewed, expiry: <%= local_time(secret.expire_at, dashboard_time_format) %>
    <% end %> diff --git a/config/locales/en.yml b/config/locales/en.yml index f51e01b..fc125dd 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -28,3 +28,4 @@ en: unauthorised: 'is unauthorised' secrets: extended_expiry: 'Extended %{title} expiry for 1 week' + expired_error: 'Sorry, that secret has expired, please ask the person who sent it to you to extend the expiry.' From 415a71fb1a6664e917ca0e8d39b6395c1673b851 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Mon, 1 Jul 2019 12:57:28 +0800 Subject: [PATCH 068/152] Test fixes and cleanups --- app/models/secret.rb | 4 +--- app/services/secret_service.rb | 6 ------ spec/features/extending_secret_spec.rb | 9 ++++++--- spec/features/sending_secret_spec.rb | 2 +- 4 files changed, 8 insertions(+), 13 deletions(-) diff --git a/app/models/secret.rb b/app/models/secret.rb index 4d77e2d..740d4a3 100644 --- a/app/models/secret.rb +++ b/app/models/secret.rb @@ -26,9 +26,7 @@ class Secret < ActiveRecord::Base belongs_to :user, primary_key: 'email', foreign_key: 'from_email' def sent_at - # We're using creted_at as the send date for the meantime - # We may need to add a sent_at field if we will be updating - # the sent date whenever we resend + # We're using creted_at as the send date created_at end diff --git a/app/services/secret_service.rb b/app/services/secret_service.rb index d698e9a..e345efc 100644 --- a/app/services/secret_service.rb +++ b/app/services/secret_service.rb @@ -9,12 +9,6 @@ def self.encrypt_new_secret(params) secret end - def self.resend_notification(secret) - # TODO: Mailers should be in the background - # Refactor this together with all the other deliver_now calls - SecretMailer.secret_notification(secret).deliver_now - end - def self.correct_key?(secret, password) begin secret.secret_key = password diff --git a/spec/features/extending_secret_spec.rb b/spec/features/extending_secret_spec.rb index e9b617e..efb87d7 100644 --- a/spec/features/extending_secret_spec.rb +++ b/spec/features/extending_secret_spec.rb @@ -2,9 +2,9 @@ describe 'Extending secret' do let!(:user) { create :user } - let!(:secret) { create :secret, user: user } + let!(:secret) { create :secret, title: 'Valid Secret', user: user } let!(:consumed_secret) { create :secret, :consumed, title: 'Consumed Secret', user: user } - let!(:expired_secret) { create :secret, :expired, user: user } + let!(:expired_secret) { create :secret, :expired, title: 'Expired Secret', user: user } before do login_as(user) @@ -19,22 +19,25 @@ it 'shows the correct label for consumed secrets' do within(:css, '.secret-item.viewed') do + expect(page).to have_content("Consumed Secret") expect(page).to have_content("Viewed and Deleted") end end it 'does not allow to extend unexpired secrets' do within(:css, '.secret-item.not-viewed:not(.expired)') do + expect(page).to have_content("Valid Secret") expect(page).to_not have_content 'Extend' end end it 'allows to extend expiry of unconsumed and expired secret' do within(:css, '.secret-item.not-viewed.expired') do + expect(page).to have_content("Expired Secret") click_on "Extend" end - expect(page).to have_content(I18n.t('secrets.extended_expiry', title: secret.title)) + expect(page).to have_content(I18n.t('secrets.extended_expiry', title: expired_secret.title)) expect(expired_secret.reload.expire_at).to eq Time.current + 1.week end end diff --git a/spec/features/sending_secret_spec.rb b/spec/features/sending_secret_spec.rb index 066a192..60058a8 100644 --- a/spec/features/sending_secret_spec.rb +++ b/spec/features/sending_secret_spec.rb @@ -123,7 +123,7 @@ # Even if the expired secret worker isn't working the secret shouldn't be accessible it "informs the secret is expired and ensures the encrypted secret is removed" do visit link_to_secret - expect(page).to have_content("Sorry, that secret has expired, please ask the person who sent it to you to send it again.") + expect(page).to have_content I18n.t('secrets.expired_error') expect(page).to_not have_content("Super Secret Message") end From 6b7f127cbe3fc70672cc00cd7277a771ee663e0c Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Mon, 1 Jul 2019 13:54:41 +0800 Subject: [PATCH 069/152] Adds seed for different secret states --- db/seeds.rb | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/db/seeds.rb b/db/seeds.rb index 4edb1e8..1f0a505 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -5,3 +5,63 @@ # # cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }]) # Mayor.create(name: 'Emanuel', city: cities.first) + +if Rails.env.development? + puts "Seeding user with secrets" + user = User.find_or_initialize_by(email: 'user@secretlink.org').tap do |u| + u.password = 'password' + u.password_confirmation = 'password' + u.confirmed_at = Time.current + u.save + end + + secret_key = '3d000ea44a98b640028d6e446ad6e98b' + secrets = [ + { + title: 'Sample Secret', + uuid: '123', + secret_key: secret_key, + from_email: user.email, + to_email: 'recipient@secretlink.org', + secret: 'abc', + comments:'This is a sample secret', + expire_at: Time.current + 10.days + }, + { + title: 'Consumed Secret', + uuid: '456', + secret_key: secret_key, + from_email: user.email, + to_email: 'recipient@secretlink.org', + secret: 'abc', + comments:'This is a consumed secret', + expire_at: Time.current + 10.days, + consumed_at: Time.current + }, + { + title: 'Expired Secret', + uuid: '789', + secret_key: secret_key, + from_email: user.email, + to_email: 'recipient@secretlink.org', + secret: 'abc', + comments:'This is an expired secret', + expire_at: Time.current - 10.days + } + ] + + secrets.each do |secret| + Secret.find_or_initialize_by(uuid: secret[:uuid]) do |s| + s.title = secret[:title] + s.uuid = secret[:uuid] + s.secret_key = secret[:secret_key] + s.from_email = secret[:from_email] + s.to_email = secret[:to_email] + s.secret = secret[:secret] + s.comments = secret[:comments] + s.expire_at = secret[:expire_at] + s.consumed_at = secret[:consumed_at] + s.save! + end + end +end From 3d82d757a573e912cd0acefdbdc89094b426f982 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Mon, 1 Jul 2019 13:56:14 +0800 Subject: [PATCH 070/152] Replaces Time.now with Time.current calls --- app/models/auth_token.rb | 2 +- app/models/secret.rb | 10 +++++----- spec/factories/users.rb | 2 +- spec/features/sending_secret_spec.rb | 2 +- spec/models/secret_spec.rb | 12 ++++++------ spec/services/secret_service_spec.rb | 2 +- 6 files changed, 15 insertions(+), 15 deletions(-) diff --git a/app/models/auth_token.rb b/app/models/auth_token.rb index 3d99fe3..dfd0939 100644 --- a/app/models/auth_token.rb +++ b/app/models/auth_token.rb @@ -8,7 +8,7 @@ class AuthToken < ActiveRecord::Base def set_defaults self.hashed_token = SecureRandom.hex - self.expire_at = Time.now + 7.days + self.expire_at = Time.current + 7.days end def email_domain_authorised diff --git a/app/models/secret.rb b/app/models/secret.rb index 740d4a3..b0edc77 100644 --- a/app/models/secret.rb +++ b/app/models/secret.rb @@ -35,11 +35,11 @@ def delete_encrypted_information end def mark_as_consumed - update_attribute(:consumed_at, Time.now) + update_attribute(:consumed_at, Time.current) end def expired? - expire_at.present? && expire_at < Time.now + expire_at.present? && expire_at < Time.current end def extend_expiry @@ -48,10 +48,10 @@ def extend_expiry def expire_at_within_limit if Rails.application.config.topsekrit_maximum_expiry_time - max_expiry_in_config = (Time.now + Rails.application.config.topsekrit_maximum_expiry_time).to_i + max_expiry_in_config = (Time.current + Rails.application.config.topsekrit_maximum_expiry_time).to_i if expire_at.blank? || (expire_at && expire_at.to_i > max_expiry_in_config) errors.add(:expire_at, "Maximum expiry allowed is " + - (Time.now + Rails.application.config.topsekrit_maximum_expiry_time).strftime('%d %B %Y')) + (Time.current + Rails.application.config.topsekrit_maximum_expiry_time).strftime('%d %B %Y')) end end end @@ -77,7 +77,7 @@ def email_domain_does_not_match? def self.expire_at_hint if Rails.application.config.topsekrit_maximum_expiry_time (Date.today + 1).strftime('%d %B %Y') + ' - ' + - (Time.now + Rails.application.config.topsekrit_maximum_expiry_time).strftime('%d %B %Y') + (Time.current + Rails.application.config.topsekrit_maximum_expiry_time).strftime('%d %B %Y') end end end diff --git a/spec/factories/users.rb b/spec/factories/users.rb index 67ac751..cbe57a2 100644 --- a/spec/factories/users.rb +++ b/spec/factories/users.rb @@ -3,7 +3,7 @@ email { 'user@secretlink.org' } password { 'password' } password_confirmation { 'password' } - confirmed_at { Time.now } + confirmed_at { Time.current } trait :unconfirmed do password { nil } diff --git a/spec/features/sending_secret_spec.rb b/spec/features/sending_secret_spec.rb index 60058a8..ddebc7b 100644 --- a/spec/features/sending_secret_spec.rb +++ b/spec/features/sending_secret_spec.rb @@ -116,7 +116,7 @@ SecretService.encrypt_new_secret({from_email: user.email, to_email: to_email, secret: "Super Secret Message", - expire_at: Time.now - 1}) + expire_at: Time.current - 1}) } let!(:link_to_secret) { ActionMailer::Base.deliveries.last.text_part.to_s.match(/http[\S]+/)} diff --git a/spec/models/secret_spec.rb b/spec/models/secret_spec.rb index c3f18af..a06b793 100644 --- a/spec/models/secret_spec.rb +++ b/spec/models/secret_spec.rb @@ -5,7 +5,7 @@ describe "#expired?" do let!(:secret) { SecretService.encrypt_new_secret({from_email: 'a@a.com', to_email: 'b@b.com', - secret: 'cdefg', expire_at: Time.now - 7.days}) + secret: 'cdefg', expire_at: Time.current - 7.days}) } it 'is true if the expiry date is in the past' do @@ -13,7 +13,7 @@ end it 'is false if the expiry is in the future' do - secret.update_attributes(expire_at: Time.now + 2.days) + secret.update_attributes(expire_at: Time.current + 2.days) expect(secret.expired?).to be(false) end @@ -27,7 +27,7 @@ describe '#expire_at_within_limit' do let(:secret) { SecretService.encrypt_new_secret({from_email: 'a@a.com', to_email: 'b@b.com', - secret: 'cdefg', expire_at: Time.now + 7.days}) + secret: 'cdefg', expire_at: Time.current + 7.days}) } before do @@ -38,7 +38,7 @@ it 'does not allow secrets with a longer expiry than specified in the config' do expect(secret).to_not be_valid expect(secret.errors[:expire_at]).to eq([ - "Maximum expiry allowed is #{(Time.now + 6.days).strftime('%d %B %Y')}" + "Maximum expiry allowed is #{(Time.current + 6.days).strftime('%d %B %Y')}" ]) end @@ -51,7 +51,7 @@ secret.expire_at = nil expect(secret).to_not be_valid expect(secret.errors[:expire_at]).to eq([ - "Maximum expiry allowed is #{(Time.now + 6.days).strftime('%d %B %Y')}" + "Maximum expiry allowed is #{(Time.current + 6.days).strftime('%d %B %Y')}" ]) end @@ -60,7 +60,7 @@ describe 'email_domain_authorised' do let(:secret) { SecretService.encrypt_new_secret({from_email: 'a@a.com', to_email: 'b@b.com', - secret: 'cdefg', expire_at: Time.now + 7.days}) + secret: 'cdefg', expire_at: Time.current + 7.days}) } before do diff --git a/spec/services/secret_service_spec.rb b/spec/services/secret_service_spec.rb index 7fd4f3c..484665d 100644 --- a/spec/services/secret_service_spec.rb +++ b/spec/services/secret_service_spec.rb @@ -38,7 +38,7 @@ SecretService.encrypt_new_secret( { secret: secret_info, to_email: to_email, from_email: from_email, - expire_at: Time.now + 7.days}) + expire_at: Time.current + 7.days}) } let!(:retrieved_secret) { Secret.find(secret.id) } let(:secret_key) { ActionMailer::Base.deliveries.last.to_s.match(/\?key=(\w+)/)[1] } From 3ad48d8dd341a6ee2c4bba799c2e816d95ad07e4 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Mon, 1 Jul 2019 14:25:20 +0800 Subject: [PATCH 071/152] Adds email reference on expired error --- app/controllers/concerns/retrieve_secret.rb | 2 +- config/locales/en.yml | 2 +- spec/features/sending_secret_spec.rb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/controllers/concerns/retrieve_secret.rb b/app/controllers/concerns/retrieve_secret.rb index 2700bd8..f1587fe 100644 --- a/app/controllers/concerns/retrieve_secret.rb +++ b/app/controllers/concerns/retrieve_secret.rb @@ -6,7 +6,7 @@ def retrieve_secret @secret = Secret.find_by(uuid: params[:id]) case when @secret.expired? - flash[:error] = t('secrets.expired_error') + flash[:error] = t('secrets.expired_error', from_email: @secret.from_email) redirect_to(root_path) when @secret.present? && SecretService.correct_key?(@secret, params[:key]) @secret diff --git a/config/locales/en.yml b/config/locales/en.yml index fc125dd..b354a00 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -28,4 +28,4 @@ en: unauthorised: 'is unauthorised' secrets: extended_expiry: 'Extended %{title} expiry for 1 week' - expired_error: 'Sorry, that secret has expired, please ask the person who sent it to you to extend the expiry.' + expired_error: 'Sorry, this secret has expired, please contact %{from_email} to extend it for you.' diff --git a/spec/features/sending_secret_spec.rb b/spec/features/sending_secret_spec.rb index ddebc7b..4df842c 100644 --- a/spec/features/sending_secret_spec.rb +++ b/spec/features/sending_secret_spec.rb @@ -123,7 +123,7 @@ # Even if the expired secret worker isn't working the secret shouldn't be accessible it "informs the secret is expired and ensures the encrypted secret is removed" do visit link_to_secret - expect(page).to have_content I18n.t('secrets.expired_error') + expect(page).to have_content I18n.t('secrets.expired_error', from_email: secret.from_email) expect(page).to_not have_content("Super Secret Message") end From 57a9e24f3fde636a2f484490a1b7e0c10b074e3d Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Mon, 1 Jul 2019 15:58:51 +0800 Subject: [PATCH 072/152] Improves registration handling for one-off users --- .../users/registrations_controller.rb | 16 ++++++-- config/locales/devise.en.yml | 1 + spec/factories/users.rb | 11 ++++++ spec/features/user_registration_spec.rb | 38 +++++++++++++++++++ 4 files changed, 63 insertions(+), 3 deletions(-) diff --git a/app/controllers/users/registrations_controller.rb b/app/controllers/users/registrations_controller.rb index 19db455..e195e2e 100644 --- a/app/controllers/users/registrations_controller.rb +++ b/app/controllers/users/registrations_controller.rb @@ -11,9 +11,19 @@ class Users::RegistrationsController < Devise::RegistrationsController # end # POST /resource - # def create - # super - # end + def create + user = User.find_by(email: params[:user][:email]) + + if user.present? && !user.confirmed? + user.send_confirmation_instructions + redirect_to root_path, notice: t('devise.registrations.signed_up_but_unconfirmed') + elsif user.present? && user.confirmed? && user.encrypted_password.blank? + user.send_reset_password_instructions + redirect_to root_path, notice: t('devise.registrations.signed_up_confirmed_without_password') + else + super + end + end # GET /resource/edit # def edit diff --git a/config/locales/devise.en.yml b/config/locales/devise.en.yml index 0b8f130..917156e 100644 --- a/config/locales/devise.en.yml +++ b/config/locales/devise.en.yml @@ -42,6 +42,7 @@ en: signed_up_but_inactive: "You have signed up successfully. However, we could not sign you in because your account is not yet activated." signed_up_but_locked: "You have signed up successfully. However, we could not sign you in because your account is locked." signed_up_but_unconfirmed: "A message with a confirmation link has been sent to your email address. Please follow the link to activate your account." + signed_up_confirmed_without_password: "You appear to have registered with us but failed to set your password. We will email you a password reset link shortly." update_needs_confirmation: "You updated your account successfully, but we need to verify your new email address. Please check your email and follow the confirm link to confirm your new email address." updated: "Your account has been updated successfully." sessions: diff --git a/spec/factories/users.rb b/spec/factories/users.rb index 67ac751..ea056fe 100644 --- a/spec/factories/users.rb +++ b/spec/factories/users.rb @@ -11,5 +11,16 @@ confirmation_token { 'token' } confirmed_at { nil } end + + trait :confirmed_without_password do + password { nil } + password_confirmation { nil } + confirmation_token { 'token' } + confirmed_at { nil } + + after :create do |user| + user.update(confirmed_at: Time.current) + end + end end end diff --git a/spec/features/user_registration_spec.rb b/spec/features/user_registration_spec.rb index 01e4cbd..c77a019 100644 --- a/spec/features/user_registration_spec.rb +++ b/spec/features/user_registration_spec.rb @@ -34,6 +34,44 @@ end end + describe 'user is already in the system but unconfirmed' do + let!(:email) { 'user@secretlink.org' } + let!(:user) { create :user, :unconfirmed, email: email } + + before do + visit root_path + fill_in 'user[email]', with: email + end + + it 'resends a confirmation email' do + expect { click_on 'Register' }.to_not change { User.count } + expect(page).to have_content I18n.t('devise.registrations.signed_up_but_unconfirmed') + + mail = ActionMailer::Base.deliveries.last + expect(mail.to).to match_array([email]) + expect(mail.subject).to eq 'Confirmation instructions' + end + end + + describe 'user is already in the system but failed to set password' do + let!(:email) { 'user@secretlink.org' } + let!(:user) { create :user, :confirmed_without_password, email: email } + + before do + visit root_path + fill_in 'user[email]', with: email + end + + it 'resends a password reset email' do + expect { click_on 'Register' }.to_not change { User.count } + expect(page).to have_content I18n.t('devise.registrations.signed_up_confirmed_without_password') + + mail = ActionMailer::Base.deliveries.last + expect(mail.to).to match_array([email]) + expect(mail.subject).to eq 'Reset password instructions' + end + end + describe 'unsuccessful' do let (:invalid_email) { "invalidemail" } From c4fac7941c4e38fd43baa82e8ef628daabd53255 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Mon, 1 Jul 2019 17:03:48 +0800 Subject: [PATCH 073/152] Improves handling of one-off users in oaauth controller --- app/controllers/oauth_callbacks_controller.rb | 52 ++++++++++++++----- 1 file changed, 38 insertions(+), 14 deletions(-) diff --git a/app/controllers/oauth_callbacks_controller.rb b/app/controllers/oauth_callbacks_controller.rb index a953d4e..0cbeb7a 100644 --- a/app/controllers/oauth_callbacks_controller.rb +++ b/app/controllers/oauth_callbacks_controller.rb @@ -4,18 +4,11 @@ def google email = request.env['omniauth.auth'] && request.env['omniauth.auth']['info'] && request.env['omniauth.auth']['info']['email'] - user = User.new(email: email) - user.skip_confirmation_notification! - - if user.save - redirect_to user_confirmation_path(confirmation_token: user.confirmation_token) + user = User.find_or_initialize_by(email: email) + if user.persisted? + handle_persisted_user(user) else - handle_email_taken and return if user.errors.added?(:email, :taken) - handle_unauthorised and return if user.errors.added?(:email, t('field_errors.unauthorised')) - # This may not be necessary because a failed oauth calls directly - # to auth_failure, but keeping this here as a safeguard - auth_failure and return if user.errors.added?(:email, :blank) - handle_unknown_error(user) + handle_new_user(user) end end @@ -26,9 +19,29 @@ def auth_failure private - def handle_email_taken - flash[:error] = t('oauth.already_registered') - redirect_to new_user_session_path + def handle_persisted_user(user) + if !user.confirmed? + redirect_to user_confirmation_path(confirmation_token: user.confirmation_token) + elsif user.confirmed? && user.encrypted_password.blank? + token = update_password_token(user) + redirect_to edit_password_url(user, reset_password_token: token) + else + flash[:error] = t('oauth.already_registered') + redirect_to new_user_session_path + end + end + + def handle_new_user(user) + user.skip_confirmation_notification! + if user.save + redirect_to user_confirmation_path(confirmation_token: user.confirmation_token) + else + handle_unauthorised and return if user.errors.added?(:email, t('field_errors.unauthorised')) + # This may not be necessary because a failed oauth calls directly + # to auth_failure, but keeping this here as a safeguard + auth_failure and return if user.errors.added?(:email, :blank) + handle_unknown_error(user) + end end def handle_unknown_error(user) @@ -41,4 +54,15 @@ def handle_unauthorised flash[:error] = "Email #{t('field_errors.unauthorised')}" redirect_to root_path end + + def update_password_token(user) + raw, enc = Devise.token_generator.generate(User, :reset_password_token) + + user.reset_password_token = enc + user.reset_password_sent_at = Time.current.utc + user.save(validate: false) + user.reload + raw + end + end From ab34f089176331addbbcbf936aeb369f2a8902c0 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Mon, 1 Jul 2019 17:15:56 +0800 Subject: [PATCH 074/152] Adds tests for oauth one-off user handling --- spec/features/oauth_feature_spec.rb | 48 +++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/spec/features/oauth_feature_spec.rb b/spec/features/oauth_feature_spec.rb index feb6b6d..d5fe737 100644 --- a/spec/features/oauth_feature_spec.rb +++ b/spec/features/oauth_feature_spec.rb @@ -29,6 +29,54 @@ end end + describe 'user is already in the system but unconfirmed' do + let!(:user) { create :user, :unconfirmed, email: info[:email] } + + before do + OmniAuth.config.add_mock(:google_oauth2, info: info) + visit root_path + find('a#oauth-google').click + end + + it 'confirms the user' do + expect(user.reload.confirmed_at).to_not be_nil + end + + it 'redirects user to enter password' do + expect(page).to have_content('Set your password') + + fill_in 'user[password]', with: 'password' + fill_in 'user[password_confirmation]', with: 'password' + click_on 'Set my password' + + expect(page).to have_content I18n.t('welcome') + expect(page).to have_content 'Create a new secret to send' + expect(user.reload.encrypted_password).to_not be_blank + end + end + + describe 'user is already in the system but failed to set password' do + let!(:user) { create :user, :confirmed_without_password, email: info[:email] } + + before do + OmniAuth.config.add_mock(:google_oauth2, info: info) + visit root_path + find('a#oauth-google').click + end + + it 'redirects user to enter password' do + expect(page).to have_content('Set your password') + + fill_in 'user[password]', with: 'password' + fill_in 'user[password_confirmation]', with: 'password' + click_on 'Set my password' + + expect(page).to have_content I18n.t('welcome') + expect(page).to have_content 'Create a new secret to send' + expect(user.reload.encrypted_password).to_not be_blank + end + end + describe 'unsuccessful auth' do let!(:previous_logger) { OmniAuth.config.logger } From 8d920be26c20c00f707af8a50efd3d8c8c4d7ae9 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Tue, 2 Jul 2019 09:42:39 +0800 Subject: [PATCH 075/152] Limits extending of secret to just once Adds tests / cleanups --- .../stylesheets/components/secret-item.sass | 8 +-- app/models/secret.rb | 10 ++- app/views/dashboard/_secret_item.erb | 12 ++-- ...0190701235914_add_extended_at_to_secret.rb | 5 ++ db/schema.rb | 3 +- db/seeds.rb | 12 ++++ spec/factories/secret.rb | 4 ++ spec/features/extending_secret_spec.rb | 66 ++++++++++++++----- 8 files changed, 90 insertions(+), 30 deletions(-) create mode 100644 db/migrate/20190701235914_add_extended_at_to_secret.rb diff --git a/app/assets/stylesheets/components/secret-item.sass b/app/assets/stylesheets/components/secret-item.sass index d3a1b43..6a1113f 100644 --- a/app/assets/stylesheets/components/secret-item.sass +++ b/app/assets/stylesheets/components/secret-item.sass @@ -45,12 +45,12 @@ flex-basis: 20% padding: 0 5px text-align: center - .extend-btn - border: medium solid + .extend-label + border: none padding: 5px font-style: italic - .extend-btn.viewed - border: none + .extend-label.extend-btn + border: medium solid .grouped-actions display: flex margin: 10px diff --git a/app/models/secret.rb b/app/models/secret.rb index b0edc77..ca1a84b 100644 --- a/app/models/secret.rb +++ b/app/models/secret.rb @@ -43,7 +43,15 @@ def expired? end def extend_expiry - update_attribute(:expire_at, Time.current + 1.week) + # We need to use update_columns to bypass reencryption + update_columns( + expire_at: Time.current + 1.week, + extended_at: Time.current + ) + end + + def extended? + extended_at.present? end def expire_at_within_limit diff --git a/app/views/dashboard/_secret_item.erb b/app/views/dashboard/_secret_item.erb index 2a36ba8..b717c44 100644 --- a/app/views/dashboard/_secret_item.erb +++ b/app/views/dashboard/_secret_item.erb @@ -1,8 +1,6 @@ <% secret %> -<% viewed_class = secret.consumed_at? ? "viewed" : "not-viewed" %> -<% expired_class = secret.expired? ? "expired" : "" %> -
    +
    <%= secret.title %>
    <% if secret.consumed_at.blank? %> @@ -35,9 +33,11 @@
    <% if secret.consumed_at? %> -
    Viewed and Deleted
    - <% elsif secret.expired? %> - <%= link_to "Extend", extend_expiry_secret_path(secret), class: 'extend-btn' %> +
    Viewed and Deleted
    + <% elsif secret.expired? && !secret.extended?%> + <%= link_to "Extend", extend_expiry_secret_path(secret), class: 'extend-label extend-btn' %> + <% elsif secret.extended? %> +
    Extended
    <% end %>
    See Notes
    diff --git a/db/migrate/20190701235914_add_extended_at_to_secret.rb b/db/migrate/20190701235914_add_extended_at_to_secret.rb new file mode 100644 index 0000000..9c73592 --- /dev/null +++ b/db/migrate/20190701235914_add_extended_at_to_secret.rb @@ -0,0 +1,5 @@ +class AddExtendedAtToSecret < ActiveRecord::Migration + def change + add_column :secrets, :extended_at, :datetime + end +end diff --git a/db/schema.rb b/db/schema.rb index 5853dd5..2e81410 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20190611063450) do +ActiveRecord::Schema.define(version: 20190701235914) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -39,6 +39,7 @@ t.datetime "created_at", null: false t.datetime "updated_at", null: false t.string "access_key" + t.datetime "extended_at" end create_table "users", force: :cascade do |t| diff --git a/db/seeds.rb b/db/seeds.rb index 1f0a505..9e6eac5 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -47,6 +47,17 @@ secret: 'abc', comments:'This is an expired secret', expire_at: Time.current - 10.days + }, + { + title: 'Expired and Extended Secret', + uuid: '101112', + secret_key: secret_key, + from_email: user.email, + to_email: 'recipient@secretlink.org', + secret: 'abc', + comments:'This is an expired secret', + expire_at: Time.current - 10.days, + extended_at: Time.current - 10.days } ] @@ -61,6 +72,7 @@ s.comments = secret[:comments] s.expire_at = secret[:expire_at] s.consumed_at = secret[:consumed_at] + s.extended_at = secret[:extended_at] s.save! end end diff --git a/spec/factories/secret.rb b/spec/factories/secret.rb index 3394e35..4794107 100644 --- a/spec/factories/secret.rb +++ b/spec/factories/secret.rb @@ -16,5 +16,9 @@ trait :expired do expire_at { Time.current - 10.days } end + + trait :extended do + extended_at { Time.current } + end end end diff --git a/spec/features/extending_secret_spec.rb b/spec/features/extending_secret_spec.rb index efb87d7..cb9e714 100644 --- a/spec/features/extending_secret_spec.rb +++ b/spec/features/extending_secret_spec.rb @@ -3,41 +3,71 @@ describe 'Extending secret' do let!(:user) { create :user } let!(:secret) { create :secret, title: 'Valid Secret', user: user } + let!(:extended_secret) { create :secret, :extended, title: 'Extended Secret', user: user } let!(:consumed_secret) { create :secret, :consumed, title: 'Consumed Secret', user: user } let!(:expired_secret) { create :secret, :expired, title: 'Expired Secret', user: user } + let!(:expired_and_extended) { create :secret, :expired, :extended, title: 'Expired and Extended', user: user } before do login_as(user) - Timecop.freeze + visit dashboard_path end - after { Timecop.return } - - before do - visit dashboard_path + it 'shows the correct label for secrets' do + within(:css, "##{secret.id}.secret-item") do + expect(page).to have_content(secret.title) + expect(page).to_not have_content('Extended') + expect(page).to_not have_content('Viewed and Deleted') + expect(page).to_not have_css('.extend-btn') + end end it 'shows the correct label for consumed secrets' do - within(:css, '.secret-item.viewed') do - expect(page).to have_content("Consumed Secret") - expect(page).to have_content("Viewed and Deleted") + within(:css, "##{consumed_secret.id}.secret-item") do + expect(page).to have_content(consumed_secret.title) + expect(page).to have_content('Viewed and Deleted') + expect(page).to_not have_content('Extended') + expect(page).to_not have_css('.extend-btn') end end - it 'does not allow to extend unexpired secrets' do - within(:css, '.secret-item.not-viewed:not(.expired)') do - expect(page).to have_content("Valid Secret") - expect(page).to_not have_content 'Extend' + it 'shows the extend button for expired secrets' do + within(:css, "##{expired_secret.id}.secret-item") do + expect(page).to have_content(expired_secret.title) + expect(page).to have_css('.extend-btn') + expect(page).to_not have_content('Viewed and Deleted') + expect(page).to_not have_content('Extended') end end - it 'allows to extend expiry of unconsumed and expired secret' do - within(:css, '.secret-item.not-viewed.expired') do - expect(page).to have_content("Expired Secret") - click_on "Extend" + it 'shows the correct label for expired and extended secrets' do + within(:css, "##{expired_and_extended.id}.secret-item") do + expect(page).to have_content(expired_and_extended.title) + expect(page).to have_content('Extended') + expect(page).to_not have_content('Viewed and Deleted') + expect(page).to_not have_css('.extend-btn') end + end + + describe 'successful' do + before do + Timecop.freeze - expect(page).to have_content(I18n.t('secrets.extended_expiry', title: expired_secret.title)) - expect(expired_secret.reload.expire_at).to eq Time.current + 1.week + within(:css, "##{expired_secret.id}.secret-item") do + expect(page).to have_content('Expired Secret') + click_on 'Extend' + end + end + + after { Timecop.return } + + it 'allows to extend expiry of unconsumed and expired secret' do + expect(page).to have_content(I18n.t('secrets.extended_expiry', title: expired_secret.title)) + expect(expired_secret.reload.expire_at).to eq Time.current + 1.week + end + + it 'sets the extended_at column' do + expect(expired_secret.reload.extended_at).to eq Time.current + end end end From c3eeeb445da126f369c25f0ad4ec01acb80009ca Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Tue, 2 Jul 2019 10:21:51 +0800 Subject: [PATCH 076/152] Cleanups --- app/controllers/secrets_controller.rb | 2 +- spec/features/sending_another_secret_spec.rb | 3 --- spec/features/viewing_dashboard_spec.rb | 4 ++-- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/app/controllers/secrets_controller.rb b/app/controllers/secrets_controller.rb index 98dad64..997796b 100644 --- a/app/controllers/secrets_controller.rb +++ b/app/controllers/secrets_controller.rb @@ -25,7 +25,7 @@ def new def extend_expiry @secret = current_user.secrets.find(params[:id]) - if @secret.expired? + if @secret.expired? && !@secret.extended? @secret.extend_expiry redirect_to dashboard_path, notice: t('secrets.extended_expiry', title: @secret.title) else diff --git a/spec/features/sending_another_secret_spec.rb b/spec/features/sending_another_secret_spec.rb index ff7348f..602c65a 100644 --- a/spec/features/sending_another_secret_spec.rb +++ b/spec/features/sending_another_secret_spec.rb @@ -6,9 +6,6 @@ before do login_as(user) - end - - before do visit dashboard_path click_on 'Send Another' end diff --git a/spec/features/viewing_dashboard_spec.rb b/spec/features/viewing_dashboard_spec.rb index 058692a..3549236 100644 --- a/spec/features/viewing_dashboard_spec.rb +++ b/spec/features/viewing_dashboard_spec.rb @@ -35,7 +35,7 @@ end it 'displays the unconsumed secret' do - within(:css, '.secret-item.not-viewed') do + within(:css, "##{secret.id}.secret-item") do expect(page).to have_content('Sample Secret') expect(page).to have_content(user.email) expect(page).to have_content('user@random.com') @@ -49,7 +49,7 @@ end it 'displays the consumed secret' do - within(:css, '.secret-item.viewed') do + within(:css, "##{consumed_secret.id}.secret-item") do expect(page).to have_content('Consumed Secret') expect(page).to have_content(user.email) expect(page).to have_content('activeuser@random.com') From 9590173c8bce65122029ba4083d532791d44fac2 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Thu, 4 Jul 2019 12:42:07 +0800 Subject: [PATCH 077/152] Removes dashboard time format from helper to i18n --- app/helpers/dashboard_helper.rb | 5 ----- app/views/dashboard/_secret_item.erb | 6 +++--- config/locales/en.yml | 3 +++ spec/features/viewing_dashboard_spec.rb | 2 +- 4 files changed, 7 insertions(+), 9 deletions(-) delete mode 100644 app/helpers/dashboard_helper.rb diff --git a/app/helpers/dashboard_helper.rb b/app/helpers/dashboard_helper.rb deleted file mode 100644 index a996cdc..0000000 --- a/app/helpers/dashboard_helper.rb +++ /dev/null @@ -1,5 +0,0 @@ -module DashboardHelper - def dashboard_time_format - "%m/%d/%y, %l.%M%P" - end -end diff --git a/app/views/dashboard/_secret_item.erb b/app/views/dashboard/_secret_item.erb index cf60a9a..2672071 100644 --- a/app/views/dashboard/_secret_item.erb +++ b/app/views/dashboard/_secret_item.erb @@ -20,12 +20,12 @@
    diff --git a/config/locales/en.yml b/config/locales/en.yml index f6428cf..3b3ebf7 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -26,3 +26,6 @@ en: failed: 'Authentication failed' field_errors: unauthorised: 'is unauthorised' + date: + formats: + dashboard_time: "%m/%d/%y, %l.%M%P" diff --git a/spec/features/viewing_dashboard_spec.rb b/spec/features/viewing_dashboard_spec.rb index 5a062f3..82cfb18 100644 --- a/spec/features/viewing_dashboard_spec.rb +++ b/spec/features/viewing_dashboard_spec.rb @@ -2,7 +2,7 @@ describe 'Viewing Dashboard' do let!(:user) { create :user } - let!(:dashboard_time_format) { "%m/%d/%y, %l.%M%P" } + let!(:dashboard_time_format) { I18n.t('date.formats.dashboard_time') } before do login_as(user) From 569cdfd452a59a14061fc05aaf11fab2f651c772 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Thu, 4 Jul 2019 13:54:54 +0800 Subject: [PATCH 078/152] Renames method to extend_expiry! Adds extend_expiry! tests --- app/controllers/secrets_controller.rb | 2 +- app/models/secret.rb | 2 +- spec/models/secret_spec.rb | 22 ++++++++++++++++++++++ 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/app/controllers/secrets_controller.rb b/app/controllers/secrets_controller.rb index 997796b..82859b8 100644 --- a/app/controllers/secrets_controller.rb +++ b/app/controllers/secrets_controller.rb @@ -26,7 +26,7 @@ def extend_expiry @secret = current_user.secrets.find(params[:id]) if @secret.expired? && !@secret.extended? - @secret.extend_expiry + @secret.extend_expiry! redirect_to dashboard_path, notice: t('secrets.extended_expiry', title: @secret.title) else # This case should not happen base on UI diff --git a/app/models/secret.rb b/app/models/secret.rb index ca1a84b..fe8a89e 100644 --- a/app/models/secret.rb +++ b/app/models/secret.rb @@ -42,7 +42,7 @@ def expired? expire_at.present? && expire_at < Time.current end - def extend_expiry + def extend_expiry! # We need to use update_columns to bypass reencryption update_columns( expire_at: Time.current + 1.week, diff --git a/spec/models/secret_spec.rb b/spec/models/secret_spec.rb index a06b793..48c92cb 100644 --- a/spec/models/secret_spec.rb +++ b/spec/models/secret_spec.rb @@ -97,4 +97,26 @@ end end + + describe '#extend_expiry!' do + let!(:secret) { + SecretService.encrypt_new_secret({from_email: 'a@a.com', to_email: 'b@b.com', + secret: 'cdefg', expire_at: Time.current - 7.days}) + } + + before do + Timecop.freeze + secret.extend_expiry! + end + + after { Timecop.return } + + it 'extends the expire_at for 1 week' do + expect(secret.reload.expire_at).to eq Time.current + 1.week + end + + it 'sets the extended_at to today' do + expect(secret.reload.extended_at).to eq Time.current + end + end end From 2a1a69a9c36b6ae631f4be4061b9d0511932dd8f Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Thu, 4 Jul 2019 14:24:08 +0800 Subject: [PATCH 079/152] Enables ujs --- app/assets/javascripts/application.js | 1 + config/initializers/devise.rb | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index 8c5648c..9adb845 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -10,6 +10,7 @@ // Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details // about supported directives. //= require jquery +//= require jquery_ujs //= require pickadate/picker //= require pickadate/picker.date //= require bootstrap-sprockets diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb index e1cc2a1..a872cb7 100644 --- a/config/initializers/devise.rb +++ b/config/initializers/devise.rb @@ -247,7 +247,7 @@ # config.navigational_formats = ['*/*', :html] # The default HTTP method used to sign out a resource. Default is :delete. - config.sign_out_via = :get + config.sign_out_via = :delete # ==> OmniAuth # Add a new OmniAuth provider. Check the wiki for more information on setting From b7f621200193cb98d16a771bf810cc28c30134d4 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Thu, 4 Jul 2019 14:25:21 +0800 Subject: [PATCH 080/152] Moves secret extend_expiry action to a separate controller --- app/controllers/extended_secrets_controller.rb | 13 +++++++++++++ app/controllers/secrets_controller.rb | 12 ------------ app/views/dashboard/_secret_item.erb | 2 +- config/routes.rb | 8 ++------ 4 files changed, 16 insertions(+), 19 deletions(-) create mode 100644 app/controllers/extended_secrets_controller.rb diff --git a/app/controllers/extended_secrets_controller.rb b/app/controllers/extended_secrets_controller.rb new file mode 100644 index 0000000..a7fae31 --- /dev/null +++ b/app/controllers/extended_secrets_controller.rb @@ -0,0 +1,13 @@ +class ExtendedSecretsController < AuthenticatedController + def update + @secret = current_user.secrets.find(params[:id]) + + if @secret.expired? && !@secret.extended? + @secret.extend_expiry! + redirect_to dashboard_path, notice: t('secrets.extended_expiry', title: @secret.title) + else + # This case should not happen base on UI + redirect_to dashboard_path + end + end +end diff --git a/app/controllers/secrets_controller.rb b/app/controllers/secrets_controller.rb index 82859b8..4f1b634 100644 --- a/app/controllers/secrets_controller.rb +++ b/app/controllers/secrets_controller.rb @@ -22,18 +22,6 @@ def new end end - def extend_expiry - @secret = current_user.secrets.find(params[:id]) - - if @secret.expired? && !@secret.extended? - @secret.extend_expiry! - redirect_to dashboard_path, notice: t('secrets.extended_expiry', title: @secret.title) - else - # This case should not happen base on UI - redirect_to dashboard_path - end - end - def create @secret = SecretService.encrypt_new_secret(secret_params) if @secret.persisted? diff --git a/app/views/dashboard/_secret_item.erb b/app/views/dashboard/_secret_item.erb index 383072c..41a09e8 100644 --- a/app/views/dashboard/_secret_item.erb +++ b/app/views/dashboard/_secret_item.erb @@ -35,7 +35,7 @@ <% if secret.consumed_at? %>
    Viewed and Deleted
    <% elsif secret.expired? && !secret.extended?%> - <%= link_to "Extend", extend_expiry_secret_path(secret), class: 'extend-label extend-btn' %> + <%= link_to "Extend", extended_secret_path(secret), class: 'extend-label extend-btn', method: :put %> <% elsif secret.extended? %>
    Extended
    <% end %> diff --git a/config/routes.rb b/config/routes.rb index 71bbd14..bfa9a66 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -11,13 +11,9 @@ get '/', to: 'pages#home', as: 'root' - resources :secrets, only: [:show, :new, :create, :edit, :update] do - member do - get 'extend_expiry' - end - end - + resources :secrets, only: [:show, :new, :create, :edit, :update] resources :decrypted_secrets, only: :create + resources :extended_secrets, only: :update post '/decrypt_secret', to: 'decrypted_secrets#create' From df8adec085c172da3f4532f7e6d2a86addbbc7c0 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Tue, 2 Jul 2019 12:47:07 +0800 Subject: [PATCH 081/152] Setups devise-two-factor --- Gemfile | 1 + Gemfile.lock | 8 ++++++++ app/models/user.rb | 6 ++++-- config/initializers/devise.rb | 4 ++++ config/initializers/topsekrit.rb | 4 ++++ ...02044234_add_devise_two_factor_to_users.rb | 9 +++++++++ db/schema.rb | 18 ++++++++++++------ vendor/cache/devise-two-factor-3.0.3.gem | Bin 0 -> 28672 bytes vendor/cache/rotp-2.1.2.gem | Bin 0 -> 59904 bytes 9 files changed, 42 insertions(+), 8 deletions(-) create mode 100644 db/migrate/20190702044234_add_devise_two_factor_to_users.rb create mode 100644 vendor/cache/devise-two-factor-3.0.3.gem create mode 100644 vendor/cache/rotp-2.1.2.gem diff --git a/Gemfile b/Gemfile index 20fe67c..0174ed6 100644 --- a/Gemfile +++ b/Gemfile @@ -26,6 +26,7 @@ gem "okcomputer" gem "skylight" gem 'rails_12factor', group: :production gem "devise" +gem "devise-two-factor" gem "local_time" gem 'sdoc', '~> 0.4.0', group: :doc diff --git a/Gemfile.lock b/Gemfile.lock index 9ce4a16..3544e6b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -78,6 +78,12 @@ GEM railties (>= 4.1.0, < 5.2) responders warden (~> 1.2.3) + devise-two-factor (3.0.3) + activesupport (< 5.3) + attr_encrypted (>= 1.3, < 4, != 2) + devise (~> 4.0) + railties (< 5.3) + rotp (~> 2.0) diff-lcs (1.3) dotenv (2.2.0) dotenv-rails (2.2.0) @@ -210,6 +216,7 @@ GEM responders (2.4.0) actionpack (>= 4.2.0, < 5.3) railties (>= 4.2.0, < 5.3) + rotp (2.1.2) rspec-core (3.5.4) rspec-support (~> 3.5.0) rspec-expectations (3.5.0) @@ -300,6 +307,7 @@ DEPENDENCIES carrierwave database_cleaner devise + devise-two-factor dotenv-rails email_validator factory_bot_rails diff --git a/app/models/user.rb b/app/models/user.rb index 8869b3a..045b0c7 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,8 +1,10 @@ class User < ActiveRecord::Base # Include default devise modules. Others available are: # :lockable, :timeoutable and :omniauthable - devise :database_authenticatable, :registerable, :confirmable, - :recoverable, :rememberable, :trackable, :validatable + devise :registerable, :confirmable, + :recoverable, :rememberable, :trackable, :validatable, + :two_factor_authenticatable, + otp_secret_encryption_key: Rails.configuration.topsekrit_2fa_key validate :email_authorised?, on: :create diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb index e1cc2a1..50a6ba0 100644 --- a/config/initializers/devise.rb +++ b/config/initializers/devise.rb @@ -3,6 +3,10 @@ # Use this hook to configure devise mailer, warden hooks and so forth. # Many of these configuration options can be set straight in your model. Devise.setup do |config| + config.warden do |manager| + manager.default_strategies(:scope => :user).unshift :two_factor_authenticatable + end + # The secret key used by Devise. Devise uses this key to generate # random tokens. Changing this key will render invalid all existing # confirmation, reset password and unlock tokens in the database. diff --git a/config/initializers/topsekrit.rb b/config/initializers/topsekrit.rb index 0ea6990..fddbf08 100644 --- a/config/initializers/topsekrit.rb +++ b/config/initializers/topsekrit.rb @@ -33,4 +33,8 @@ # Base URL for the running site. For the production site at https://SecretLink.org/ the # Base URL would be: https://SecretLink.org/, for development this might be http://lvh.me:3000/ Rails.configuration.topsekrit_base_url = ENV['BASE_URL'] + + # 2FA Encryption key used by devise-two-factor gem + # https://github.com/tinfoil/devise-two-factor + Rails.configuration.topsekrit_2fa_key = ENV['2FA_KEY'] end diff --git a/db/migrate/20190702044234_add_devise_two_factor_to_users.rb b/db/migrate/20190702044234_add_devise_two_factor_to_users.rb new file mode 100644 index 0000000..61fe494 --- /dev/null +++ b/db/migrate/20190702044234_add_devise_two_factor_to_users.rb @@ -0,0 +1,9 @@ +class AddDeviseTwoFactorToUsers < ActiveRecord::Migration + def change + add_column :users, :encrypted_otp_secret, :string + add_column :users, :encrypted_otp_secret_iv, :string + add_column :users, :encrypted_otp_secret_salt, :string + add_column :users, :consumed_timestep, :integer + add_column :users, :otp_required_for_login, :boolean + end +end diff --git a/db/schema.rb b/db/schema.rb index 5853dd5..807cb68 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20190611063450) do +ActiveRecord::Schema.define(version: 20190702044234) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -39,15 +39,16 @@ t.datetime "created_at", null: false t.datetime "updated_at", null: false t.string "access_key" + t.datetime "extended_at" end create_table "users", force: :cascade do |t| - t.string "email", default: "", null: false - t.string "encrypted_password", default: "", null: false + t.string "email", default: "", null: false + t.string "encrypted_password", default: "", null: false t.string "reset_password_token" t.datetime "reset_password_sent_at" t.datetime "remember_created_at" - t.integer "sign_in_count", default: 0, null: false + t.integer "sign_in_count", default: 0, null: false t.datetime "current_sign_in_at" t.datetime "last_sign_in_at" t.inet "current_sign_in_ip" @@ -56,8 +57,13 @@ t.datetime "confirmed_at" t.datetime "confirmation_sent_at" t.string "unconfirmed_email" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.string "encrypted_otp_secret" + t.string "encrypted_otp_secret_iv" + t.string "encrypted_otp_secret_salt" + t.integer "consumed_timestep" + t.boolean "otp_required_for_login" end add_index "users", ["confirmation_token"], name: "index_users_on_confirmation_token", unique: true, using: :btree diff --git a/vendor/cache/devise-two-factor-3.0.3.gem b/vendor/cache/devise-two-factor-3.0.3.gem new file mode 100644 index 0000000000000000000000000000000000000000..0bb89b26aa7f796c1ecb0102a04b24b0d5226f30 GIT binary patch literal 28672 zcmeF2Q;@FTvzW)WZQJG^+p~vzY}>YN+qP|fW80oRc77*G)k*#9q;ip@l8e(f3%%a1 zUg)Z>=UvOj#M!{uz}bMo%oFJUmN5MzY;0^m|5pAZ|57slqvQl)W@X`E99TZ>qc*%Q*Q?{g&sm_pyk0bLo7lVu29t0rXzir=tS1`^%|DPxohar z-P5%4_xR$aBw$Ix$}$J5fR%}qq{Gk)i|oudXdy+#&~_MG=E4LN*c zlP7y8w<-wri|yROc8D(_A9YVL)YQFMPS^BKgExCvUpu_IYQmg;n8k`kzd+tCIl@3w z?)%hY^cW*9l-08`t$7;zE%g}5#QA4|9S5)*CtmM3Hl#c;5bAdjgoa|RdK$B$WLeZ; z?_uy*7qE^C$@P4oV1_BW?d!)w$p;W$6NgvHq+p>*r0qpy2Grhi)b^qT9^|#FjWh** zDYL^-S&j~PZ)OFOD>CMzik!OK`tUe`%)_s=R-gmchhIcrZLzoZ zBlY;Iw|K6s?QFoBlynUV?T$$Nj&ogjLhYMYMnqX!L>Ok$MP9;(5Dvoz0ggn-vqJbU zIubtRm)=d66Ue)AL10K=w&w2DR&|d+wp{)2I1MAzQX{j!4 zKdieTk(})a^l}cdm^l=E>Stj_lZI#IgHK|(pV+m5?jt%fUA(r|u33{{wIqg*X$Qcb z&T=DW#ogk&)f{=5wJ(?A>Y72J6h=sJ19)~%2j^CS5LSSC_arNa%AWai1IWpfLV9dy z*#ldVL}Xb(-ntW%ywcY=ztzZ*CLd*;yfjem0Q}VI^}M$TS+YTgdn7MkJba9Jc?iF| zNNF%$l~qfnj?u(NiR^e84~Fa1am^34(_G{=37}hGHad_lslOYk4B`qGFUR4JvjZK7 z`54>k-GGorEyF6)7Fyhw`j#Z!6`!w`87rF_C!rF?0M4}#1!sh_A-_hLq{L-pn20Dx z&?1y_95#w@2Js@m#oQoaBKBQCPP1Z?bEBjWJdE3hVem4zw=yeyC?a?nhFP9icxmWQ zBfqBCLBi8zjJj9ajH7Phcl@_B{%{u&p~fcSD#a#m7wqW7Td7%Jd1OK31fY(l0?e{= zYpYtpk*Xs+?&zEgJF{tN(~MCUN_0a7FMC|1rt>=xpu4y$uR}LD>2<)W9F?kHRsxDv z&uLPCMH@B6n#Xl$1g|$VJ!RYRwc=)=S-mVmMA*l$Z8=xwnQ6$K>oH(Vt)@G4*3Qjm zzdYElRlhTHVF)QC$pzYF1ZG^G^M!jQ&+X-9pjH4>u{fapXSl2PH3stUV?;4=OgfV7 zphWM(Gzl_9nQFL!7^^v?P{Cd4bZ6rp&UZ{xZrQ6sN<-(>B(PNk(0enjlLf|_Qf#0^ zg);LSHvp|-n?dH>0j#F{Y~0`QO#0%W1~u?ge2}_mNRnsV)25wrmh7FoXH%cyl1b9Y+15 z_8fzS);puQMUp?3Y5VGXt&_!&+G_beryFmvAqu(zZIDQHx-3EPPO&}RDJw5$7fDB- zjm^Chzsrd3;4OUOYUO#Ka2MVyt9t!LWURJNrHs8H8?Iv z)hCy$X_40=wpq@Y?|b?RN$Z)sziwsW7;ARQ_j8E2KY&dIMaUCdzWkLQ%Zg|A;*khY z?J%R)VJd={Qp&&DUPJoqp)MO+&p7ayHE*;xUG|AUr)wc9or$gCPfSUr*k1As$*i)B zASeN&)imFl;d)1_eyW*&?%fDEebORul_OdX!Mp*TRnbHhB63nq7s1GAuw_C4a=G_ zR>hAZ>6M2X_bQ}8m3pWZ>q|e`E7Ybap_x< zV{WlUl?J2&RL?-8)eHq2uF-fn@)r-Dec`Eo!!i;jcR{L!i&SuWkbVNI0$b5^Bp7yV z9rLR=QgNU3~h>N?ToGi91dB?2puxehd^u7nV?eu|0PFkU^aacgqWw7q^h% zlpY2{tL4zlDEqzoHUOoYK_+1*GTgU2-s{+Z4)qthJE#!V*LUzHsP)-~H-2K)HuV*! z$mQ?HhLu-gL(klrFDQPhg6h`Rvzel=!0l{%A_o~0R*!}Zn>dt27kL(@)BW(&Bk%07 z;SiqbcswwfmvUNb>-a!7Iy7@1uG6%YLDND$lDiNcTOcqeMX)A*NLs2Il~JDk5jw3% zW3?IkD&p1I6bg}!1#hpd7G5{0!igJe>pBu@8P&a?&j%}Msi>ti=wn_Ld5l&6%Gt!a z;_Spnk51vQA1Q7n;UQk+;&h^!D=<@O?(-2dmmIs-TUqX1bV!N;PXd2hq~%NZxSOiC zXE_*85Jyi8&)h-S!9I)uc4JO_whDOa#jPFGoBeSpOpuoliKBGrpih zl!y;2Zx-S&{`S&)C4Qwzyu3DEY{cI;iu9g|S`kciQ^+XS7fX3VYr;`L!!E}|X@E(p z#uH`lT0rdR-5Ac_s9Jv8isRG((C{>qs_cyq%Vmoln znse(Y{s#FqL7ZJxvksBWS$MCxioI464`E{6falC2cU{vqnA&6?qpw0&oQCF_4xfg- z*og}-yrAgVI5Z(&ONsRB7YA}27Q5t3Ip+rxt;v@To}3T8ZW4B|bq2n_P=>!izAq`} zNjm0zuicf??OdDoIU1SPY>FrBC6r{&Nukl+@hB6yA>cM`s*u=NE*B)jF9z?YyHpp) z^d-aGvNj@m6iZ#(ICcI+yt5NL4y980!8CrIO~iGCE=0Sxw@}eJ9C%n5F_!qeece|H z!<^))y7dHsbc|I8j}_Trwn~mL4~vVhv-||Zv+6c#2IVmHXer`Kl(KGEs?@Tk5oVSp zaWQb@k3_H*K5@5|lW$v5rVhL%JKl4(RdD!Xhb8sKS1SzJv?Jy5%%OGN?Pg)^*v^qI zsIl{P^zX^1NYU(O+t}!IyaR)noa1rpuO~G?!qihd+>_}Z;FUVa45Ts}fO`q^g0F@y zA7b)RgV6Zt5V7to`gZ!qkw2+i&X0`cEE*HWZi82TUemcXTfMBAE0Jhmz(Ix$>_mj6 zh@X;m_=X!-bI}oO0pIeR@cES`JaBrOCWqB@Q3NQivz%AIuf4_namH56ts%>rB>wY= zBT(0x!&lnAT)~ZCJmXI*evAxd-he>_exq@ zmpUE6a3q2;9rD&hNgb2!oxH0

    0bmn(PJQFUga^s+7-F_}5MH!v7@i|$LoEJM$j+~*M6P)8nwg*%Y#l#tpVT( zI)}@K+&2QWv2z-@GGKdS5QG`Ap<}9nkI^V6GAzZw>uMj397gxM|8`g?$Bpa(Qd$b& zKHU+XA&gQ6_gP$5bWF(iyLBXgKhvr6cz|4rA@F*t$?$3xyj3&b(R1272Ze}0u{?gz zrCS)tDaTGs9Zg;u!f7{aw+n{Mt{jY%LWdsLD@6K~(_UIB;d*0>`$7HmV+8Cy;WxJjC1^u=y1#dY{SjZuTBua|qIREM$HG4&v&ZxP}E z&*LAN#@ab7b6JNEN<)|xa8G%%=c+P;|N8yND9Ep?P-2HqF5oACNA->0CGjJ`e}=$q ze^Fq)z$05~HrxFu&G=jmqpDZk{#SrNM8Nl8AnyJ(hfZ4_zxB`Zk%#(!nh=QS_Bu=Etp{_i6rZ z0U`T(-_-F-Xm$0hAJ^EpAmP}!-QFv=K6%FFh@j4|T@-lNbWF3ishV%hs#Uvuo;hI@ zbxl9yFG^G!&I(+wV?v3Cm(do&sfXLU_Z|@4+2hxdxWdg-}Y<+{$VSI^b!M_Y{c-6?JT zHeC(Kwxx%~$TSUuPy5Rf-*iu)C%sFi9%EvxqQztb{w-cj$HS+5Rc+U+0OIe>z97fz zk|a>V$dV_G&Ws0lXg!Wh8bzYE z_VI=8;T_5w)nrk*{qUmE2u61Q^mBr}$WuuzRSWx)c`ow#xoeoUE=Gtk(5k(qu-wHc zv*k~de79Kklv^jpx9;$}UcIy>1~lK}}hM+nW_X*Q!hfGppsp1LWQpLHBnt z(!WzNYow1g;;-5DFuTS;&QuD9FAyPfQ z<+zLhrvq5$UgHu(EZQc@@Vf5W&yurBPPHU5 zb?(n+drdF>4Z+}6!tUB1$QfmZ^1t-|zru_E^y`0n1#JGE|1mgOnEh|t`;QF#8yfqc z^FOA403g%9@IN*d7WV(-fB(^1{-5sSH-&SSLqOC&2ug{vQ9}V2I(I1+X1Ig_2PIq7 zcaUw^=>K}~Z&e-j;r^Rt2ChBzSDQ*yHSH`unIegDE;woN;zs-$1`1H9bFGFOWvNGz z!5=+jO_b1&wAZQ#x1BaJ%11~0kfLAZAQ5~mK$)D|!qV?Qv*0ouq0^B67D00TD5G`L znUX4hoVSaJLPd(JDF8j!T{5XTy_B-LL(S{b6U>7D^Afqx{T#Z>W@ig;w$BGV-~bp4 zZ|S?VQ#Dk{-89O;t9>^nd;t-7J*%Y^zg-lnsFh!w6qTJxykQ))~K?ez`4 zL?$obHhu!?s37`@4`rpJyvp$>kuYMrxzj?{T^-qz)dtYX%m=EnruzaO1xfC{1=*b( zSYO0J)|soy%W1mN&5S(YV)`D+KLRoj^ZL#IavC5Q!ZEfA79)6aWT)qYQv{PwukTtL@+f`Z*w2GseaftznHP&h7?`pPTyBwrhqcjahi5 zTmem41ImQU|A>o=i+ldYg%GFgG2u@GB~FxhT;hbE=z7zq9Ul(ww*(!spfuiCY%J=S zq5yE;w{YRlD?*&ndLeYaY*=KW4fV^y%kjXMT<*($01L`a*i0^&=wM>O%W?oxLUe>- zBq%wF=p+x3hCvf&$tnQ{#O%6@2bYs1{Of zPtvZ~5~Lyp$57+&v{38ok`T8+UdJLNm4s-3B*26OK@|N?TvSv23AiB)W}r}1y#Q`7 zEM^vdjLg99D`X;rSq(^T9?P3#W!|1GgO3YH;2f8N-i})9$G?@613oHz9&;M|(|`ud zQydEYYzHEJe7gt*_xpTs&nDBK8G|Ee$SJFS3!VW%M$aaqKoTrw_f zex2Bt@6lgS)n${b83<1*V6xK&2WMmeY!u;asDK6U1b#xeUNn+NDj0)$8dMDOy%AWI zXWfFRr^9?Q6bxD%zfM6kXkP(VpeWDEjY-RCJ7+%oRRMqIow zmR`v^60A3!L>BxLNSQZZlCUDEK(3VJ5r}n|0s;W${Ox#(BX{$CLnrSq7w`e@9TQYWgbBNoM~i*uxK(8 z@8a4{{Vt)i#=Cx+e7fs@B=$cRz6lj54(&dEUfdA^0<1#cTJL^-ulCtQqAtVCNo?e` zd>ch*7;1hiP^j2l{&?}FlHyv#L$S#qvndgB5j~YbOXGo{uPy|`D*RFaZjd^!lqHme z4aO_n63u1~--Y4kYd%SZ?;Kw6YU4>e(d1{iZa2vowu`JZbxGPzr+usY!P|Z2UXHQ- z!Q1>^x5GOkhPagH!`pQDiS+U#AC$ViHRi&3#g&c|-BdNx(94j@BwaKx0=8bZLMFtd z--JY|#`$@#tUF_We(D+R?OlCceYyDUV|1c-Z#-($UkrZvGne!e8>@aTIM%@V{lia? zFw^(T^(>G_mSEIX$N=puk(AimqAC)dhp52sCke<2wj)n;LY=bKfczET*+5vshO@V2 z`xW+jl(RXDC)(D66Ft_}Ce3$u-qzZxs{wN(#>V=;k8tGkZhD)`F|jQ9Rq_WW?nuz$ zE9kYY`iI<5@zdtZFYFZmp2~k?t=2^afCf-DerH9F4MiO!o)~AbAOa?Z?rf!~6ZNhT zwJs5blh)xbEPXx|1-VbioSgqFR9#?B&c`dVIs{+GVf){-mJrQ zy`V5=LbWBV*o@|YRI9a^IJ`bm?7ftks~{!>9HP*SvPkYY1)5>T7)yWyO)eW* z6T667Ax&S-&;)2X9R<)j!_dukYSgSrG00k-Af}xoW)rYQ(XEOA1eLU+$c)Z{PEUd& zgMS9alZi_KqX_zQtq0B5qyfR2 z9*gtl<;1|N=;Uz}??!tjjLMtmptdj6!_h}TdY($CdQx|Y;Kxy6UfOEB8vhx1 zshnZ2F)G#9tXRK;@FoG|fvTN2Kudm3ITw#DdgztTFh60VhBhgJ21Og6+CQ9`P-%K- zcidkW;(A5nAfw*K%y>NVq%PDW9S|jUvz{qc1{;k8{~!=<@XftdM0krh?p!V{k_~GP zO9eboU^RvvGtmQ0+JX2uSkLN2Y#d!eBk-#azE?^4g2UMc!TIT^oI;nx83*fOKNozc zxjt*qy1F9KQp90(2f+$Ft39l?tG+N9*1cqE^31v?O6p@R4O~Tdp@#ELqk-gfkq^OXwDQ6h)v+$ zmV5T$HXufO))+RI;D{Rx%IxyGt*8(I;{V0olr^ekIfr?;<#)CLBm zRPdHN=79wHy520^@^%KJi_!E8hxxdOYg6!>0pSuh=li405WNc{B^q?5c%&D)1A&ze z9xXJ4{t*=-M2_AYC=~$7kkIKTRz+graM?&~D7ZkAAf_>>TzZ2gbyy=ar+J3>NRx}F z-VB~F;6URRQi6Ww37Gf|X;m5_U0fOnp_5Mk$TW4ZMbZVd4%~2Rgg)~62F!MXiJU)9 zaP37l3;aC*G!_wSrho*(7hr4!GSOfI&VP?{<=83NqKowhHA+RIWh7j`(z2a6h!2Jr z)~QFtXbE;sa##n5u+4#kPD}tP9?GS2QF%@vWvCuH`bNt zP#@BZ#GB!ADSN6s5O_Xp0nMm=inS1QKLWrm&rIsMJUW^oh4-PC&yN8x;4ZZQ(rwZV z#?Z+Lry|;tSBm4(kJo|(0iJ-_2&~DBZQK1#mi(x%hzEvmoRk|>11fzw4~UMfV`mrA z2QNs9{Hz!E@_%>%3)T}&5I;^WfEgNMF_?D{{X(XalCT(CrCiHgI<2O*-b2B_?Ehyk z6Lx(`sm}IZNkb!cD<85$n*}o6GVHrx{UT2E<64jV$gkMfMJn(9JhZLFOA5pjh|#H| z2|nJL0P;zgU?=7&>7YgpiP>Nly>y-;L#lxWfT<^l7Gbb+e3Rnq^#>*^qopCogGB(! zdBS1-gq{0vp%$OA*yK5Hgx^+2xHl1RPG3J0MJ7K#N(VFFA3mRc)>6S+`pl1?2Ia^Q z5h3#yVH?+3Y(IJ*s*@eRYBXP2SN-@fV(9CBL=R?uesps&tfQ74qf}L;00x*_A%tFm z@vNgxNz$@i3j`4oMp6sPPrbl}@+t{WdXrcOuJ*v|QmP$duk|b0m{zxoLV))05 zNbP8rIN%90c>bS(f2qddspJb<8qK0;SQGnC_;X>GyrE|_#CLO*4REi~Q%xjkT8!x< zujt5}Fx#GUDC!!TBzP0hl~7+>Z+-t3v#AJA#SDuwrbIfc-tFhHqaWF>fT}qoA!5)_ zAi!^daUqV6$1e+fSIz(P*Cn@9YX}sHn2y4IKn7M%xtYM;0*VYp4mBUVnZQA%1{R<5 z1ScFf`2#z$9Nm-WNV$p=Wf|o?wn8M0?n)J+Vm6;&z@I4GuHHQ_QhW))!e2)UoHQQ9 zVRnQ7hBc9MhDfm@aqxPgT>G_YQczQ*dGiG=mWe_wB49s#3C?0@xQIL)qKM>EW(X|O zA_rZv>5uicF%G!0ZQ_)8kM1nyUt`L};9XwGqtY#&D!n$SWOHN78iWc=snQi<%ww%@ ze>7W0+z`{GCEQ;fo|@E{d%7K|RXRnQsm29=Y7o$LA(TVKwOs=7|CUaMP;jWzv(4WE zCXJ_39IKp&(57l|S~aUVB|~*gacUfIIukA8r!GfLdNloS9_FoUbZ9y9(|)xmS_PErMdM@U$g{S(lK`fmy1{SQmrjDeLU9!7-+-C3l_gRrZ-0E69ko~v$%0Z&e- z&GYgB;ZP!T=*UX^$yCW*1_}s=v$QG6PE>5L++lMfc!1o<< zRGF(J>hqaCD_!D~qVhQ~=8k?aw*Z0-7D3Z@NX^7v8o@Z_!rhQ0*x7W??ly#^WRxqs9r)Uk1~SS+0gBZ3lOfaD`N+2MHT=8Lf@ThgEW;*RUBqINls1#8x13U zA8fAoEYSeOeM!Fsnv3s!a3*yUZZvvPMmKCp9m4AeYu?~Y)!E3FX)1|;UJIEFldVHB z2!(A~r95Fq9b&CP?4LBRg_|^k2+ip6GD5aL-*q#juRPWV*MbnIJ0iy7o=Yx6490C%u|Ua`#FTA?G6e0); z$z|7K0#j~cswEHUtOoeXunpx$p;*Mf*Fi?wG_hJ$iVZ=%Bcui~jQQI={#lsVD>?;F49&p?UoQ;bfoJUSLkOUpX0!GfOaV6^zvx%bbPDy? zdZ?VcD|0MET>bayu&jSgsdRZG&J>blk=MF_eL%-TEDe4TjZW|IlSZLXa_gT_*hjKg zFT+DR_^^^n6e6G!sT($EwS%0QD_XEoi=%01mHxWaFkhgc3(jf8&vw&FnrDp<_rs#i zSufF4lbb3H0~KM?aXuGXj5Z7cZ9&`IA0Xrd3v6!q9f>^qDHw=T7Hz=&if00Zo=spv zZ6wz`B0yl(j2>af?Ujv$Eu()A{wpkqaq=(DyX$!pt}C@<|IY30t%af>JiX5P+^<(% zB+LFegjeLTHbC z2m9-}M=$fY$(X=cv3?Fl)1ANe<1P91%8Bfc#d|{Et=iyeNGc2A@^L#|Z!8+TCjW#+ z7q#~@(UG*Pq;S(EfPrdn7s{aZ-jcj^UcC|wRo%R-;qBH18QIkBBs)oz$ymx>Xyn?m zG1liqjR7-rkSp&pIf6~hXCt##DW)O8?ts880+fWuVPnqU7rXaee&<-f8%E%)90+SW zuEO^Rx@k=2tTW`7S78$YL4jPE6`CqFv+!9Li1#8^%Gwr==acTqK&?_BP2-R$={;kS zMmTF+(Y(}UvLQqlZ;N#;q-Zwjx6FRn^Q)MIS}qR^;yyoFp$ij6w^S%Pc6-!(DWjLGZyE7*NB)fv#S^eqYTS({fOIeGO2~TiQ4qg%tZFEbZT#I;-SP&tZ zMdZwqK7X)$e{zra6wTMTy)TKrZG}kBMNX}Xt#MkwaiXNSxz$!11XcCXqu&8&4hORp z)oaQ4_i`JHDNLW{)0!Z&D0|Mu;ho3em-8i{Fy#Y}rjz9s7#MBGmn^ijSy)I%mVfd) z5tOn`Kzcj##p|RGg)zbH{B2#zIbswgPO4CXv?ciA9!wktbdE<1(-(s#Sm+KgxmyYe z7r0zo#~>1$=Yjj-4ue57>djRv#T$Dn<3L!+|EQ&@&0F9rDr2@pr-mC(k7v zJEE+L1{NsAS$k@T{u#l7D~Bnn+mOPb_qb=G-rEsV>H(AvH5S1EeemGN`>R97H_>l= z6%|Hr-_ZdK56T1mV&G}@p$m$1`3C!EaDAd329K>lG78^fHsG&pI7VBZ#a80}M&7q4 zPD$7;wxo|j3o)7-Wx*wEsiHaP-58+l@M>r?TugP|U1;XB%E(Db`rxFTsmZai&-Oqd zeBLFOsRd<~>5;&8haFF;+nHt@zXFcgux1bTy#)@o_87#W3qEXyWmLK`6jHw02Vs9elW82pJQaNg6SuO^B3JVIRnUNqJXK!d!> zH9k`gcD5+fZENzPb5TIN*-FwCD><1AFny%@qvPPN1}cONi`cy7Q~_@K=^HoKHnz>- z#rkIkh+16DGB9_s-psA9V4$gpo3{VO`DkbQ)zzjTQ5m8DR*9OC`v4S$upR}K=h~2U z{|Sfq4d_=)Q8mVKS(Cv0&S32h& zQ;Ezpyh}k=_G2hG9k;0#xedi{g*2@5HtXtemNW-45Ki}4Mm?IS3tQdEy4@u0mZamZ z2nAe#Uv7X~>lMx`O}Oh-1>%uXgjf$9Be@2RcL~(FGG4+Fy$W;4o=e2MI@2%oX69>UD4;CddwN72 zFE-8B55b`_WRskZViF}TqBV+Bre1oI5)ar*tQ~c6olwHUhk$oZkq}#4JOiMjVlc!b z+xtpoH{CpOxeho4Ev$;A`!g?Ae)JfVHiM_qodHlqN-v0UW(_u~7t)LQ7V(^&qPjI?T%)Yv^h zlj~SbV%f_JkAQK|w1yQs*<=BtKea_ssQwX_on7<_@J>Ayy~$Z6v#Jz(4DZT5cDxr^ zXfde;a%cpzqsArtmPRd#&HKJa$PoIZ${A${^bn*&jog{^BQ+MxUsYv5L!}$}h18&D zkjHLUp|v0^8u3U9yxgD6@MTE6RewmUlIWtr+rugs<`eFr#2@XAWah`cf) zXmn}g?FzzPzzn6`Mn+d)tC2SMxfyjNz{vBF^`)Q~v@sQWGNa-f?p)=TO{0TTPxOsH z1{38YuO#~E06ZvG|I{Y~LKgN0s?YgWT(rHME5d+{Ii2?8MXzMf`rLZN^sfMIrgZk* z?7KZ+qyab&ZhxS9QQQ=MREXVfO=I9D4vz$UlCj1tFCr=eBAJC`5#u~q2iRW8t4PNA z!ECKbJX6dy%fW+y)+xH+)&MwT&>x|paAEgRW=jBUWZ4ZD2Ay3GP|(^QF|;IwRkp7$ zXfzNHu#p#|{=7uCN{A&dTyJUngm-LM6(1004sljWJ}8D&)dm|~a54Wj=NUijN(-4$ zHJG>nii-nKAkeCAS8sH0R;dXfK`Lt-mY3&>&&P{4Q_=UVNMbREfq^WaKPBh8jB@P$ zjyQ-mzCN%<`5m&q{_vx~mKKHIJ1)(Z|Gm9ZzTZ8kz@fZ*$D3Frc;`*_l3t=23k1ezL%P&2 zy*{d!!&yg@n-jJI`F_UoLngvszLZSPZ0vTf%x9kkrZmhp;*nVq9-I%o!#dQ}i(9Gh zUgb5Eh)@{f`!0kLJOcj30yTwrxg=}pf^Bt>{eqh8aZg3XR88oesTm!6aHG3xf0;Ev zH|QvxpI{Vju73$|lr4R^6Q~#=TPwlhqmzk%^O#7s?W}(z0P{a=)j5jBu}P-hx9+r$ zduXZx12?(oGK%0^b6eI?iW(~RfAW|;1IpruIvFxW0m3C z3xa@yZvi65q9x(>UqvRcC~ovm3l(!H_*-M!DMEkXZW`oziHO0K?&j)M4#t<(E@Nlt z?@hvu`&Yy9Jw^7_pAK0!4LGmV0V~3th|1_IXn8%pQ`|4WbCC?gh4amg$j;)BP?DRi za4T$v`;>qG4DnZPD0QKe@%IpfN3wG5affWG;rE%LSoPmx;wiM){YKxgKjD~&I$&2# zs0-zc%54~uy@eGOkz-QybLBz2jb|HFXqij7Q3JIhi3Da(A&YTz=l`TvTl-i?yTH*$ z@qyhdY=&0#BIlvl>&gy{S2nrHu=oAwt1Ct zbOoH}eIe<(y2{dOHW5-yQ(=5|ohi>68#+FKf8J(X!B=+vx+;Pa-wzZ}1I@D>-x0~1 zQub?r%SV^v<@>B}Yp>Vx{&6^3@W}zcZ9%J~szZ&|eTpf0<#~*4Qb{B9RBdx-ESGWF zW`XTGcS%JHsThc>fCTZP6GRsECwAiHLR3X~H|p@0ZDM@|Go^=2q6_8*C#`pPHZ&)H zj{Fl3IJN-$6_~%F+lhu=CDSsWGt+yRQxoDNJ^`oF_wyO{TK-vv=--$8!=0%i@RJiR zzB}vZUG_j2iGT;Di#pu!5k?uPFnXhT7ylD!=7a#v4^FxQHPMJ^Fe&c3sFTB$KR_L6 z8V%@egM6ZgPDfzOmVXe0DTSVbMuRtY7Sw93PB(SGTEkEpz1=8$!a~7u z7n9}530gg8V<^VxMhJR^ph5Fq7cu&@dtJ2yg8arMC~_DO?L*ipRZ*hBU)1T*H8++HnWt>7Ewc63 z5IS412##~XdPh??jXYX|!|mo@O^B%6-R$`JiJ(lMy;C^&i8#yrtQ)g?)9XY1VdUOo zJd763HmRt=SSXtX+h8o7>9p085K=!bz~me<3G`Nxeo13m80M0tCf2M zHN-?M3jCvxLC6X{Y;iD6ZjRE2iDMnIE}=`BoRwo4yz{$O%*oW;p5>%n?lcIGsQAgf$TYC5$Z#Az;|n?*e9R8Av0n4)WG+4~lUlYT@ds^yfH+5Fy~vks_K^rgDUOIB=| z@~VCFYif-DW>IE?c(9=m)HEZtH93pZULY8oYJtn*DqsfP&H>hr@7JK!-dzulg(6-j zL1gDeFh%ePDMWX(pehwUiZFCsSu8?HE?DDCo8VR=WAoI^uQnHzTMX6?b)UClnenGw z>m!Cg3|r_oiLyk%N^_hH3B8r(bo3Cgmd`gUn+DEh>0zlx&jtJV+2HeG>D23&cE_&? zx11W>Sq^h?VXw^BstBigSp+5VqMQ4Eftj`zz zToLca5EP0KYBsH7L+&&S^fT=OErvXHLdOp4OT+k#)TRvKH$Eq1w?g#8g3K!T$_#Vr zRc{*hsUFeq%J`W-x@MKfiK;z~r5#oBf6VoCQ(zV!o}ZiwlxO%-SsE^XF=)@|iorGw zik#5!mbWxvSEN{(h4uVH$}UVXuK6+Fm#vdi(H(~_%}lFILP`b|mbZwY{(6)G&ZQ!rRcUf&kAHE{>=cXlw3|xZKL>ex31A#G zNtB@qwp6Vj+4QQVt7#v5TyvvVos^i3!8CPQVOBdfl)9i?cerm# zsyVJd?37=C!JMw9pku&r#+-|lI{6xGrG%kYq;_~tV}w07d1vK3qnrY&nnv3>JF~($ zo6IoR0~ciZ9}fWM`ikmlr+lDJxl*Z4Zx#@Jdd6@>`Bhsgx7LR2goS1RLk;WTI+__z9H#f61iS@M>??t4r)3(#JGI82c_>bRB>k*z=$q?XAub(_hUXyss zIDx9RXm!d;$8>*-V<1-UEgqeTo)tztlqSR|V}?~@QFj146HbNz#(u|=AqKq6D5g`>UO$MUE}gW<)V zOr2LrN`d`ir1X(aR_p%2g(HJemhr)X-jyXXMnU27{W?jlPW9kaqM}UJTaP9W?ONEO zSZ>O4(){_Q4mYV$C+k|qEKq%=C3;(6N{$6HN1Bqx>i5`!(-RFX`)E#>!&dg6jk2%T zq9^B#DA{OB+N=rJ*~sfJM{U6d3e*DUG-bn&%18aIgwcj<+89SiVFq>EP1Xj%PF$Y2 z2c`4JPHyfQJ+7p+#k)0GfgGLiwBx}D-)cSRqQ%3oUo~rO5bw^7b$W4=r_dkk9a7sf z7h@Uax(sed=S}!MzD$=99qHD^o;3$G8CU0XZVAG}D2^!-UndqwQztkZCElulvFimB zTAuRb%?5`80tGqP2-!l`FbvaJI{0A^GR}5_iwzgLXVp2$L2I(i`|o;JGdWdv#;F8% zzRU!b-^;F_&zh6vqp#i7TmZn4%)msy|dPh+q4~lzLH8J}fkt zDe?_Xf^4KYV;Iq&HwL-r3Oonf*Y@vB*0BtZzatKh-tHw8r~%pBZWNZ%^}Ivp9lnN> zi?h1SEYX7ePq4ESqSaV$XXk3%c^#9+F~;0g0;i4{vBMbZq*`;Pydj1zODH5w#&o_u zt$CGs{P1jI7W}FgNu*EJS^`#ko`P2Du%PD-Jn_SD>KY7;?dZ|+Qut{yUqnOR@O@~l z%+srPG6uN+y&;>XhX4_Wt-{yqxOCBsHz)g`5;?AZazO_o(hlLOG%lXY>d$7w zmPE`H3u2#4^SNp8YA%|!F6)swVK%MLO$>^~jq6GVrq@wxG6k-A8ME;)Ya`M%W%A(G zb_%q<-HysAeyf#%oRcA5VE>$*015x0xi)&M&d{;!DVZf%kth< z9gET*exi+@UDMlkq?RBw23GS@6%y0!_xsbgO|LSw8=lBE=5}~l4Hp` zKzE>FQ~ls(jYnE%Rf4(+%|~FD5z{u5^1A85n8RFtc{3@g>aByddQ&0NlbMcoW+4YD zjxR-eIV)f}`Eg44fX{KYHjT0NNmAL1>ZoN)sgX@~o4<_Vw$`iUnO-oQ;h+ogu9J0nR9>K>zPXH`q*XgJxfz5CDrMksk??KvA$rgaV}9LR>ncV zCog-+L%f|SqUJjtk)wP{3_+_Feq8zG@%Z;|VGiLbW3u6`IYEsa%~x?YPi}cx*r3C8LWhiq=*Ah#5>hr(OwNoQz7>l$5=zUP$4~K`oLNfHDtntY zng>q@b?Wt?uwfIC9!q&ocJjaW33NF-#{NF|?DDXK=ilot{I;?sfNpo*KKb;HaVOEK z=ZCb9duD5|zb;)$3p^c_j$cdRxjH+sAE?YNdR?BeWA7bBDh2NA zCl){Z<*7~8U(shr^2KAnj&uYj$;D6Ga+=1pZYpyL5d^%E%IklZAO8mL z=X^TzllgI)NqB608?q~f>COKkH;O3v^t(4F@q8@(`2v6JQ!WJ$oc}hD`TkwUcnR|M zJT)^=l77msGU`Bd4tX$?XpmsZf&5*FTHLw(x#qGNiG zEC}2&2==ur-otk12sc62*wHsdDekxW=A5V&c!gTE&L&`B(b>@_Rgi~P{N?3Ig96rl_YR{@#l)u(N9OpO7Os85L-Jx^>~QJ`C$2W%Td>>)2U|5?7>IT;I_q= zl5Zth<4mY-2QE&}FJ?}kja8$h$glKp0UgUh6EF9g6SDPo$xMX^B_DOmoMgtlsT4!a z#Yn{U%?1~qMcYW`CoTErqq65>pL=J|WSTh%&PANHN>+~Mkf(Gq@1O=N!v_cV zd=Fz5!x|NOPc88%3+#2LQmSmUS^^=&2|{=VMiz;ouma*d_R@tWW@H*@ZsIu=TueoB zWQ~LfCpm%~0e^Ltn-P_-KT@DGquVk! zo^Ovj1PD=vO$$ib+BSHC@=vEGi%Rl2!g^j@a(rZo5@{)GpGU>JxBOF>)Lv)`+c`2F zo8gvGi3uImxl&EE$J98elOxKGe(G^2&o$q#O1N8mL6ZXPkY$!Kjb4Xihf%Oz>g+MC zYMmY7{JF+W%4DuZ6cnCj&&5j@zdqm2xU}k>8ZwGjX3nae7N%EUXyw(b3E9Vx><+@9sfD^{P% zv#cK^5bwrZyghpqr6tx)XFM%sugDXO(Z4w$&1ej=Wprm|H&2}?H7DWk^2KegFP`b% z-_sQ3?QZ<@5^pVAa_qmfcUD1hINzSfN$?3l0zrZV3ob)&53ULBmJr;X!EJ&B2u`p- zaDvMKgS&*_Hn_{+I?QbLX}5N7-L3nty?6KF_t;(C)m5ka)H!wPdp;e%$Ub^LR*;!H zYdf$TA+6+BQg2iQDb|etQ2R&AvK~$V$LT5G)!NWjD|y!g*hD6M_HS zy4dD}hr>51`)f~GnhSB4qVZV!jg+7O+X>xQh6-7NRLV*X<$=aZywLp|Fr zy6`V}XQWad9mY_;%#9wMBH!hXpw_Y8{@J{jq*b{)%3aSiE^7Ku2~I0Z&qe2yiRcTHkEV8w{O8?PVe_sE2dw56qd|1`|_P@+G}&`Z0O{@>Xn80lZnPzi8%RHfoSMi zT_$bD>fJfbCdhKKw-&|nJph7&L&PMDd#u_5i8cW}!wz4*uho1a_Lg0Dk<;PKc-%)9WF!n|gRQV_M+yW72AAIwderZDf=N7ViIjH{lC#Fny zijs;??BcR|jm+<#TKn73*M-f%I-dvT9pDjcn%O7e)lfMp=$l%tXo1z<4jN!mGJP(4 zv%GEJ)en!f15mJy<(F`5Da<&e|JK0Z4C@cB5_tY0C)L3J;C1~_#!C?&`MazBsNb2H z0p0q#{N!o1%1}{Md^o3lbBCvD*wZ-p(Rvq{u5hads)QwhxPNI;*hfj6mmLz?@_H|h z{ct~p+_vfWEmk0L-8+H9#11I2k(FA5w|CHt_qBPW0Ctb}{TBb7<27|g#Jd8{F3X~l0mCz#08!y9!iSwOdEOci%!%J>%AnjDuC#7sC1M8Eu=q3+f(W1OAC$HH*mTq5A0 zjf~RchEu97DH>gl_=dL6A&FOlvPG|?^3(7W27)zI0_3%T>EC6@?paKW5pK*>u_r`W z?98TB8xb*3<9coh_MMSF5=as+(Io2+;Hv{?1c8303x|vj^=N60;2WWOzs8O}FrtUNnVyz-vA#qMhM( zrrkVgE$G{8QF`~2wzFhO&&L52!y#%6b#Y^cI;%XCL^dK(ZikXHaUI8~znb!_3ec0c-CZyG0tx6@$2m~I;XNoBg~CWEzMeJy zYJc5fL&sf#x-CNiJrQ0=_=A`V*UE1pI_{CkhKA@|1p%ffny|^`X%NP1d3#PKx=UX* zdJ~KkYAql@<*9u-{_doK4eLcUsIrZjPEm}_=keB;AU`GKX|C@xG*!-ir@hY2KVo6b zl?tS#Rt4za^K*;g?o)Yn_V1tjVg}<6O^BmWz%YViN{H!2xa^1sGL=)An+SH|^p#1P zX?Vf7S80IyfG@dwWv?qT0IGTQ!W>}hYs;WafO|;_CS3|=#KT+>(Og|Bg|#_E)(+cLjZ(Nj4Z5 z6QWbzErv2FN|C{Sg0$69H{-HC1+(jW{dmp))SO7oL|Zi{&DHto=3M~10mIG;nqkBm0#h9LZ+%;GP1fEJfiMeD|xCfN1Sj-G+hRu6eKam(P69Y6Ymv_ z4;%pBphq}cm*x=eZGsCq-b~S>Z+1Ox$^wD&v!fQYPQMoPy4rZ=Jw-^MoW4Z@wrvF~ zx8BPZhTQfyfR8=!H7mcB4+r$_PR;&-Qxut$j%wtU8s&MenCWT92|p8TCxghJ8kg>- za^KwL_!dOGUElvE)zQuO&S(DvYk~hhwF=rq(hfFBE$_oDm&zb~XAUJL0XoyFcX_1a zKIi2z${loua_YqDy+C@Y=KNNnSlR#S-F~KW81zc=@%dht|M7$fEFXskLUUBbND5PN zQKb9`{?K#8RmRm%&tH^IoGLUpyAum*+x6CXWu{>U{*7gB98!%Q>nO4kiuz;SUM`<% zNMxEyo{po>4@tk~te~E1_Y9ACM0;xS4zAzJ1bMV@C?f@Mi!>07_Hc_H`7yNBWv7N?>WpFW3S2g5pyE z+G!Ri@QcsNJ%3}{2uhpWu+g^{F|&vtA@{%LVO3lsnHkW4y#tk0*##--FMnFUq4qZ5 zu@5LkQsMR&kN0>O5wNFool2rcxpH->QtYClh8=+O?pV7d)ft&*)a$3UUPw-)sTmYh z+j8DNCPf)zB_mm2--QvL`pbNzKs4!C&?Md zrs^!&6IL2h0L8XVHRT_i`SC$+>iKSQZScO7?91bBzM@mvU`R-T|48>jW{bfOI}OUs zG*r9pwIRSCmB`xI>Jk)X+z>R=Q5#ajN4rV3YQ}QeCeA$w>N+e#HdE~N-BxeaA}GXT z+jCH;x<^TAhWQP=z1qW-){_Q;SL+;$mowm*9T@q3ZYvTrFzswk_BRx4`mlF2BS~wl z{|c!uOlbY041DZpl|F%|(w;)aQrXAkSz8|s)rsAi!zn6%A(%;<<|viP%c|;>c@JqQ zEc83TwD(2if;EZw5ucMupzzQY!C1Xeu2w^RLaP1k9>95#pAC*;jd$9LMwXZnhw^%N z`ptE>&q`_jQl7-CSZ1RvI5LWc#$V<9H^vUE@`VSQz4#5SRS;oISQ)mFkl( zny4kZ145(u>DAV^t9y>;_t=%zUB|e}wyekifo$<%9l>=~)xe4vs753H?%ecl`$d zch@)b6?=ETT#DBqX-Rd>-Jj{_i&$#_y{vX+{CEb65OgLkeNtnD!vztJh-vl1tIDf= zlRv+ntfb0-X*dB391n#fR8QFdRv(vgo9I(vTmH+j}m=cs|y45Q)wh}(01 z{imOg>-AF`Y0{pS!ybdG@<}^CW*pATC$XE745H01u%|c?yvZxE-k(EGAPD5OCY9bX zP!>P)y~&_>I6vejK&K1J2@1OL#eQYh5n#a5U4@$ymxC)F-hp?72~*5OJ=|M_uR?he zS8{_MT;U_In~0d1+tU;N2P^bwp!$Fagr#?sWdrROH#Je}5xqY`W1d%Vg~8c#r1?*7L!Vj5^|fiJCxBt~ zNnf5>jZ~%OsP`V1zuR4OiT54zo?d&V{}S0spVpwq4*FUepbZ0BSgv8Obp7ZyNjOL_ zKTi3~g3Q+a@)Miq33q6XYbbEzjOK0WMI$MH?bHIcJLhPI^HGnUjU|FOui*Xvw-AY_NI9O z?@ww*7~7Iv7OAr0ru`MbGwM6MJ3H*lVAlO8tjg90iWk?Z=>X#IHsL|ypLLbumLMKL z9~%G*dI~**8m*kHV5_6Cj}epVAYm9$Wdo+8DOr`>$(2jN!Tmt`sXdNdMo;XvB?qqQ z55-BCFco?eY&o!5_F-mZRn1pW6F zJ0KBdu3VHvda`Mro(qZ@XqYKW!k6tK!W0Fx-o%KLdhL^~xt2m_3L*l|DW1}&rn^fI32Kdj_vqoB2c-27D#`f|K&GBKSZ6~t?l@FRH6N>iT{4E+Kq+qxH0reEzd z*!_T>Uh^rI@vxBjh1K@dfaV&O{hp4#UW1wL>;SphdSid%yD@xV0UL*(3!7Cz>9Ile zEGJ5Bd4tnpdesw!TIA2;K0?(@$0BmYlwZTHQP3kKoiOe_1?=8znL=Embqx0FTQb*C zK3teRnqsYi$+Q?P-2LK%n9f^OIFmsih2t zD!p_iH+|_F!?0^|b?{mK#`+^2ObA&?jhb_e?WzYG-N=Hj5ZH~~SBTuz_Pe-eXdTw5 z7+M<6U6iQb24My%vvEal#e1?7sHW?^Wr-!+_7rH5!Z zTJO8fwf0a#ipr#(HX@-vAJbqc68ebk6p%EmQ!=Hk8~v4QX}ul}Qy-4kSM`UPKl_=& z+FKR5ZZZP6M8%Tl@uFt|q9*bK{F>JRqscF(UgD*%&I^{Ddh~Wg+bJ=n@RQN5NND4} zh9D`o`7$y*+J;So#Mm2W_+~Kbmcs|DyDs)#m3(ql!f{Vn3!F6GN&ZlOv&M-Fez6rE zVT>bXpE+w{pxrSN-wiR$I}Cy2H;5>QnV9Kd-i->i>adr1EDTj{cek0)>FP$wv}Upe zzh*O1Y`yZ^YXh2iD^$kKDd6VP1RWk}WKb6LKoRr%o~miD#9_Unf(&8roXhhRO$^48DgdG_LA&%w|a;$2Q;i}Lg)$QMd$SMg0~>c1 z5FD`%o@sc0~+C7wdM#mm&{<2G&b8D>-jRwFZaGrb!Z;%*V-*u*iu{H$MkQZ0YDDH=>Im z?sk8v>!5{c!beKB{Wrr7Sig$F(Pyc4{bX1Yzt=+Eh(5~%i^3YDX- zm+#bH4%=#2O+tJ8imT!0LIdBffSbH|9J`Qwy*W99NGNSWB&_P8@L%3N?Y(q48=tXh z96;Y9jA|+LRqpffv$)%lx{+pNtJMMaJZOIvs!Oy|Uh6w=lV^qcybhN~GSr##criCU zQxdhx;NYpA4>y~)mCd7Cj5=k!{BFwIkb(%1SKf8u+!At`thb7@`Y&i>m3Khs zH52=+g_x%Y>lM>y_S@A$cWx(;?_d_=6aBrXSSMt=Y z5eRs6W=G*p_=CRfp~`M^_s$=k&u(3hjuAIzX2=`H7f4tE>YkNoo$N-cO~%$xLh#n_ z?JE-7s{#4&?H0dE0ur&xv;I1i=pD%X7_?aqHS0r>PEMacuGZ{Pqfp}rvp${tB;K>X zAhmn;kE(l~lmetBhuc?h^Mi7#%m6mJI||e~Y<0~}-c-ecyNLCpor+`L0?h?Meq0Xk ztP@@3uue}vy-WqKhwstW!LbaZ4*OAnOnK9)#CY-8qJkcuea4Yo_m1`Rg?vJUe(A^a zl@Zm$QO~a9dm{Gxw2I6<>cwL(@V0XP(uyd3z6<4}ZssEX@v)Yb?3Cejj)3Oj^(kc{K zQ_Z4lIqahu23In_TyJ1Jip8bQI^^A@8$`sCk)M~{x$ds)UQym|%z#i5=d|Jhx$|$= zCZJa!cSasXIxmLQ*w>2m-!-&Pjq4-XHshu#t3&4;!eL&8O}odw{;==W{z%EctL{L1veg0i*kCA<2u^!gS2!flI_dA~GkKYVm;_kd5V@_;UCiwJm^G zi+$uGT!LYKS!Lv>;kszlJ0Xd0E>Qpuv-k(X4y-dG%+l#TEal_DC#7{l>sd5oo;lbV z+#J)Ny$osHvqtrh-j&%`IqyZk901%p$_2^;7~9i|bBSNlR~rGF25}ZX_5df(F9S?Z zMu{eK(K(q6n`dyIB)C_^x%vbPz!xt*+m?}QqLX%=95P`k>$DJUhB2PI!2gw$T= z*UkY3;hUoI0{`~;RK3vje^bwsXcyU*&REJL?)UvCpNeqZw@hVm02ySnGijo~_~&K&2a~@H?PtmCUHcE77mr+Azq-$%?pI zX}vhKxBB`#8(c#^zU?4YG{@G21B-NH{dHqwe{t~3ntViBMnW%$@d`+wJ(YG+0T115 zGBe_xZoin!?GJ&w)h8P(dv{MqcP?KGM~D9$3fN!1-@nKI z;}PH$`d|280z!NO|M>rZ#E<{gwf}?vWs@kXjwwYT_mIs%@#NgE9r>fMa2E^7Nk*vL zw{M^=^Kr)G(a{7Gbrt&aMLz=vnXWy>_^GA9T^L00!p9N2i?Php zH#>$2^K%Sa7Fln1*QCcC`ecP)V!{8_xcaZ&$A9&{|IPpZ6S9E+ga7{<{7*rC;6L&I zzvL<8$`$bszU5hCl-3YS%js92w3cc(QDpn-3ZHy&P@ORqK!$6o#zSJJ&9K+&#Da={ z{oE`01bNxE0gqoR7-2f92U!WPPl?M`VGREU{HUAvmZ|dj_9)=2>@Mw3iu|R4)}k_dxEE!>{@wbeudSBx@88SREH~){OfLnh&+}<{$z!=jzG!^) zQu(OwqjFTPS-8g_zd-@F#ON=!{-}k`j}~ApC)`WO{!wE~*LwkRy*mpG#Oku1qTDf= zEB-U?nS%F9b5$S`cc!D&n(UsOg!Kl40hy_koFp=^miyrw2L~}(HvSOp+>bzxQv52h zuN;ic^y*)e*Qg6>9q`fBjjoI!@2WXzZ^YhCLDXW?)L*C%jM@r|3?K1yTcipV4_;w^ zYz`|aJd@Bl#b3F#u?`M7(Yld&+iBY1YF>#K^2W72@ojuaNDSb#33ibXuj>s8nOaPsW7$%8Rr~M# Vc=ccM{{A`S9}E0rf&X_F_-}PReyjih literal 0 HcmV?d00001 diff --git a/vendor/cache/rotp-2.1.2.gem b/vendor/cache/rotp-2.1.2.gem new file mode 100644 index 0000000000000000000000000000000000000000..71c1a2afbe816e17ac28858211d75754276184ca GIT binary patch literal 59904 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 z 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 literal 0 HcmV?d00001 From ebb64988a14c9e8562a82c22f5ff31199faef371 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Tue, 2 Jul 2019 16:58:54 +0800 Subject: [PATCH 082/152] Adds supporting gems to 2FA process --- Gemfile | 2 ++ Gemfile.lock | 8 ++++++++ vendor/cache/chunky_png-1.3.11.gem | Bin 0 -> 352768 bytes vendor/cache/mini_magick-4.9.3.gem | Bin 0 -> 17920 bytes vendor/cache/rqrcode-0.10.1.gem | Bin 0 -> 27136 bytes vendor/cache/rqrcode-rails3-0.1.7.gem | Bin 0 -> 7168 bytes 6 files changed, 10 insertions(+) create mode 100644 vendor/cache/chunky_png-1.3.11.gem create mode 100644 vendor/cache/mini_magick-4.9.3.gem create mode 100644 vendor/cache/rqrcode-0.10.1.gem create mode 100644 vendor/cache/rqrcode-rails3-0.1.7.gem diff --git a/Gemfile b/Gemfile index 0174ed6..0e52b6d 100644 --- a/Gemfile +++ b/Gemfile @@ -27,6 +27,8 @@ gem "skylight" gem 'rails_12factor', group: :production gem "devise" gem "devise-two-factor" +gem "rqrcode-rails3" +gem "mini_magick" gem "local_time" gem 'sdoc', '~> 0.4.0', group: :doc diff --git a/Gemfile.lock b/Gemfile.lock index 3544e6b..b1eff16 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -67,6 +67,7 @@ GEM activemodel (>= 4.0.0) activesupport (>= 4.0.0) mime-types (>= 1.16) + chunky_png (1.3.11) cliver (0.3.2) coderay (1.1.1) concurrent-ruby (1.0.5) @@ -132,6 +133,7 @@ GEM mime-types (3.1) mime-types-data (~> 3.2015) mime-types-data (3.2016.0521) + mini_magick (4.9.3) mini_portile2 (2.1.0) minitest (5.10.1) multi_json (1.12.1) @@ -217,6 +219,10 @@ GEM actionpack (>= 4.2.0, < 5.3) railties (>= 4.2.0, < 5.3) rotp (2.1.2) + rqrcode (0.10.1) + chunky_png (~> 1.0) + rqrcode-rails3 (0.1.7) + rqrcode (>= 0.4.2) rspec-core (3.5.4) rspec-support (~> 3.5.0) rspec-expectations (3.5.0) @@ -317,6 +323,7 @@ DEPENDENCIES launchy local_time logstasher (~> 0.6.5) + mini_magick okcomputer omniauth-google-oauth2 pg @@ -327,6 +334,7 @@ DEPENDENCIES rails (~> 4.2.8) rails_12factor recaptcha + rqrcode-rails3 rspec-rails rubocop sass-rails (~> 5.0) diff --git a/vendor/cache/chunky_png-1.3.11.gem b/vendor/cache/chunky_png-1.3.11.gem new file mode 100644 index 0000000000000000000000000000000000000000..cd1c46c45a2db1f8a26748f6ce64e9a7b6758c00 GIT binary patch literal 352768 zcmeFXV~npsw6EE=ciZmXZQHhX+qP}nwry*-|83j0ZTH>xOeXi_e3=iEd*^(Zm6g=0 zthXwwlDCq2epNOm&IZN?&IWX5o$+Hu3dsC zC?G|vCoK@rD=nM2jdtYkYrTT&v=5YCiRWuijMIX@+L^GK)(Bn}u#fgglo6>K(#5gG zmrsSKb~o{fJFYg4i|C^mWPo9G0zPJM7UtycfjxW7Pr>CeSDHk>dF36y{G+cgdNkR! zz!DK=0AzOZBcDVXtDen4c%;cvQGYeE8FD0(5xB*8wOd*C)>PtWd3t@{c zOvN?i!0t^or8!nLG@@@lQ`sgQjHF*(2G~GQ@LlxS2hcY`vGO^G4hqCz?>F0MID`lb z^vM7Nu9yKs#^#1!(b%>8ZJeMO^*HnRAF&$1itSIkur=Vpv^%kyvddzN^7qQg@`pPn z#4R+gOa`^^tJl*PLERF}lB*CuQQFgs#ESe%GI;y|T1s`| zh)sy!#%aZ*uuwCBF~*q?{QTZf>XMF?f$%}r)h@HfFb5ul9E70n#TAFe=6`8D#or)w ztNX^y5}TY^VffAkq(|!oq6iBFC8dE~&p^(hf<(0jb^}ndNr%uMl|5O^BMfRQtE41q zs?&ypa*Cc^6xH2UM3_K8AUq}gk;?weCCqvm3?#~cd4Kg9N)kGL0Z?L83t_|MIu~$Qng3UAmUq>yZQ8{USNB-A#AUP6b2uf(D@M zwQI2ttbBNj4CZ<>!&+ncgp}qYgY^Fw2r{+<{DJOx7V`u z8ja3t_o_H$D6wKHty1I=#5MugB-Tfe(4Tby%<3D&+D>M}&{}6d%~*Wto^(lew-P zlyn6P7niZs-*+At3M?_A?oVe2oiB*JU49Lb;;V~V0w6+k(!^?(U4Iz2^>D@xQ5*kk z0XImS%si4E-tMxDTUfYt6^u39&H01p>f*3x9ARP$Gg8_e6ulpSWc4GjG=^u%^cQCF zJQie)?*_?hH5@Cj$ z!xdx^M>22*i;km|`oh4J88d>MxBNQ5tP4O-&4E^}Shy8P!jc#*5$63=Cs>%7+GKgCa| z6;G&DPt8rs3)h>wyR-yH*!mAx(|F?^-cKq|F4Hybvt-V1zSO#4!WT645 z0)xYO`xQ?HxrvB_h94-`sGu!QeIfb^+_JOby-#4LH(}$bF?8Qt>xe!|u+nFv)B@pK zJo5WGX<0l1Bm_+UnU)a$R`%2{vbPAqX$AD1RHQ0}slRQw<6=*6Ls8x*%cC)@We-ZJ$DxDTa`f*C^;JZfX|y>5 zB6*3bFG`A=ai*_K$BivDQ)dv-iFG(b_k$_Vaq0KVWUSr0Sos}BJMQ<+$HSOvw0rK_ zYbPyICPNNzFMfc}o+o!dzdLoTyjtmFv+!+a^t*~_^mN0CMkx~)TC0ZP6=_aHR_=vR zXB+1?9)xB1Ez&{)@1zYp7SqnL;(mQt;n35h8CNMOX{$pdQ%*@Bb0?J;$~T*P@g`|^ z05i#V0qu(nLaPw&?zwU6))_kWldui?p03eP$L1HV9tUPkKlXzq#b0XJ%fg^~%L+~} zLM|U0OX|+Lrs8NjVMxs@>tR>GB8%fSOHwa z5;)yfIKT=0E^?s7%JtNjyRTMnlZ@e4=yRTI4~+l4j{>q5nG`U3wGr&SK0n=~i7Y{N!PXKMt0fl6s{6?fQ_pGjF8W zLcrQD8Kvq|bbAW3YJ}Z2fh969HUVEYvxCFCHI8~0XZv$mr;80xm9nz(ORTs6wi0{4 z#u7Wl8?D6;^rs%t?*D_K8twTHuq0rzxYG2$>xuinS6% z!$y)yFs6h`R%I-|_3QhYJ(lNUHh}T!I$+BpC>bjQ3kwSw3rqZgMk1(*A@Zx&yD3k# zbIG&*?^_!BkMWO93p?A-{PwE5yWbb!>*K=4ytiS__ZDOBeFFYdCUG&!fC}TJhd+DH zcKc;*=u6NylRl11{I|6q8P-R4%c^{#BsZu&fv@}>WRzF!(hiSSVkZ07C}-87CGQQehrUM zp0XSA=M3&$DSlr2J|bLS{m6K^Kb-g(6}j*`eY0!fT(q71ko&fVaK7sBU*^Phy#`5; zmoKP24~nv2J?}mG-HJxa0OBAOdG7mj=?j6q!TMDjA@<1jX(HcWZ#bk9^SK`{`e8pn z^1%iSj;v3g!e*;i9!4robAtBwD2QXUDbN0Tbga^VtYVd=F~m?Q|#rvOMSr=5_4cz%)V2vhiWP0&NH<;4Z8@ z@{at2M2y87-aV$9CA_~_NpT{Zl<(Xq+(@0EMiNvOM&ZoxP9MmNGvZe-f+pc4h2URd zWq*H9k!-y7h4!uZt{f`;isFL&eqUBca&-H}_Z<6hqk+Wf)P9R=T$$a;`{bECWtnR4#`maBz zA4HVq`?bJvvmyMrY(t#|H^8p6gCb~|E$o3BILY`uGm0nlC;2Fl6+D#n?5b9ak5|hs ze47qPLxNmGCMO79l!ofq&c0sl6nsJi#lQm3$o?a}WyB!=G!^V$#G)xPLrE+?9lbui zPsZ@R6-3Q*sLGGa!pL1uo+6_DN#lfpv?%_s4=i{TT2@wOf{AQ1{?FuFLh`xD%=e*OWX;OoXqM?>@7GcTIb;Bqkvj}V^<9Tq7iS{ZUf{gg5?v_gN^E5 z3YhK}9>Q0Z;MB1Fk@mgcbf5>fRnM1 z*|~=XJM)29Ujs}*INf~mFu`dxa>=kEe-BhgoCeve0qA3QRWWn7OtSCXEVBs*YvB6z zL7aM34r)Ii_MfJ|XFBZ=dNS_W)qb>g)a_2L_z~@{_}NQ;3dq@_r_}*MbWr=%?1GAE z5=7e7RRFBg1G@-xX(kq$DHJ(hkaMKbL{wDPHK9KeDgHL$ z3h;BFDzt=GX&Uw%G~zXH#%E<)pNM9?pZ-*7htHN5oEb3yA(ZPEbNPHYy!lEYVyzuNvQ&xJRUSHf_H!YpVPg~GZ$+>W)|I8BzVt&t{zb6p>sJB9RX#RR;|XD`SfHCOewq`a zB=d715gW;)SCBIPMEBNLT69*a2-~TG(P|SN3nVXMn%w)Wr;|}i{tv{1oWyBAk+_PV z1ms1DF=X?WA(Pmee4#EW$zs2k!2X`G^{-_g-MKHZ&Lwp}79&uUCQ#kiIqB=?eRJ;- zN|4tnd^&;({1gGCci%9#Y)#4f!MI!T5A~>g}4uPyEA=4|r%5NA8rk<1T;c@WJ}AiBR%Z8o!@w!D8_Y zp@@!Nj>P#7QFF_-IX@waBnrPAvzOFGQdS2-%roYK&(!=8exjx?6ppkvoy42x5{}$$ zD;&H6C?xpj{(fPEn%?OaT)$wm>v3EnYmjk}_ct70KX2fLG)5jcL6oAs7?pkCOE75; z9E8kJJ2(a)tdBSYUU!c?VbXL+hR@1%6iM2Y-%%N?{Zw3JzE4PSIhwdxweRix_m&zx zNcrLI>DD!D0}Fy8!O(jzYp( z>W~$#XQh@N5O8@ME5)t2(dt%r8uv)z#-8>O8Okn+XL7Z0KvY-N&5)1w26E0^ZK=5- zxx3(ln2|Bg+ppMmFyg0(ANRz@OJ*yg{2HX$^<+q&;o9zpP!1Da&p219Ce^_W!)Qzl zDP_bL&VGC1xM~+eXtuZo-Y9PG=0|nrR2)>gHX;N!H{G5smC3qVgs46U(sxMWvmyJb zGXQ7n?ZW(PfYSz5qGvqJd4rD5k4q}!#UslK>H z&*7%ni4`7aMPr9Ph48Elp-NW*4{!z47KnY#{1SgBk4siH2S{2%m&J^NT6LL@Qzx3U zG#5zd&S0QCr#|H`&F_A{O}`n&P5auj8FU7*ITZ$wDJ>&NQ>Za}m76WwHe+@UlHx{{ z^Yj*^p{)WX9fdJ@=aUTv(zRr`DEDA;DZ%uEQ!2$=1rmz4cnG1F!O|m0rbQld{^?hW zG-izEkv0|j!M7C&)YQlJKGc$C3JGE$9w)6*7Fz=bqZro*9>MG(L#A{quHd94LSU^J zCdEH*GDD8+ShBWR(}wVJ&JQESkAbUz0?zeI#D2CVSf!up&01l~j4q|T>wKUGc=drf93A;`5eP~ z?`eCeCvcP$9mP>YmH_l(EV91ULfFh2EFP-yVV-v(yX%)aODargakSjf+(YgGVwFzX zW5v+C`UF&-dCLItMA|ZACOrfC$h(|t)JzA$HmX}bm2wVF%Dc&Lm@3hgKnk5nAS$ga z2%JT3Z*y-I-sGYvdk}$|eLTL{S`TT&$6)35hyq^~KXYMsqwa|9lBYawf!?y1eg)kD zX?RClWg0{&HDV7bsZ-Qh^dc!U5im(S2@%NFn5z+7%Hq+un;!gKzmNkmLzAkt9B6|U z7@kzFo*!MTMSx?M@RCotk3s1{&$Ph&(NS>i;nQ6Gjh>Iq9ubgKun3;H>IlZnda3|Q zo2}rHrhOG=cvNjtU?e=JI7T~pZY+-i9Y8Yxl0u6jZ=R}%PGnj(e;%uf*uXBJ1=GS- z>PM!P(ZC3!(}44FKs1U~0n@t6!eyNBIis^xwu&qcH;357LO_eIkoP@uekk!a$Q+f=$S6F(5p zduAwIQ%Ac9b~pAr{uAui?q!$sjm~^^kBT#jH7|CJtRUQ?_yV5zz!_G!jHCuk9RjMY zt~-?R3*09S$i%gYi&-tD%$MAUBK6OfK4vucNqyf=Ariq`X-HCm>Zrmj0_g_Jke?io zyz%odowy~a!F+FHz*aNM$tHM%SP)oZXmLTpWo}Y>H5WRWajkDE{Wdk}cNO0p2(q zPRwyt+BlD?Lb}bpTW^|}gQ-04Y+Z(eVm%BW_>8&19p_Fn_&J&aKs;6Y=WE=g?G zci+m%Mo=wM^8C30s80^E4A}ap2PnC}=CBw%Pf!r+aL`)3A~&F`J3u@4dvM)g2;|zCZ>PxFEK>0z#Hh3Z6sLsijt5=+Ouk*27yIgN)5W ziZK#+A=VS}!jcR9EsuETo2S$`tcYPbJPu5KEx@Zh)iGXQdv#APeqAMcFe}5_YQfq{ zPh|RnK=fOHo-ytro0Nky^J491&6R|!x;#9CLQL$$Ti??IJ4It0(fY4wAYM=SG%gd_ z85%0@96XIutYnF=DsJn1EHV+}AKV?qKB1thCFzG#=#JAEYrcZR;943XEh?#{qhlS9 zrcWQw(LOJuUAz#iPC9&j`;=T0)wGiu4s12=-s9=nvGYzyJCBbz$T~qK$1I*>xl7^L z2yWLCZoFu9*#P#(^7^e|wY0qNwDYOVCG9yP&}Ut6DD|v`_|76AVx74CrD6Bi|N3d# zud`*tyE#TZ+8wvCsig9mx)@py&HQ^!Y$@XqCi!SP&Y$yI{UKMOf}SW)UK3jgo_}T;j0aj0V-RRz^(M|0Wu|=u-R) zxeCwM?>I9?DJ@Dqm=X;*Wtx6`Y=T69;Q@gA}yLLYNAv>74sY#x)EeOYp6sa1BX$>hm+*=%}V6+@!gC_~Ew zIpQTDTY1mF2oGKdOTzcXFb|6unPZ$-8MIi+%*u!d);d)!OWjcS;djG|5|m7xB?^n#+fd*J5fcSWnSNc% zZiZbboM$LRbxEwbF8>(-Ueie0MQ$EPssd9&f8^R3`Xbx}#@xSK@gkPTEsyU9qAAp$ zlxgJB3Pv_7DPY58>}T%E6#((i9BQ8aTyIL~P8>Q9OF%4~&hI=?cVR79IXi7?l zSC9Q!%d~B^`l$Itqc{N_6JjqwsFmF?4DwwsZ|hMifi<0cH4Xg41GyB5=9rH|9Jgye zWDyW&A!W_u$c6@&;@$)SSP5q2wPfLEmGCI=c%KYhdpX(sw23*^9^GqDRIe>Jh=K7m zoLVVTozOx}qa==&XI=M#>5FM18a;D(Lc}IAh+(mUqL!|UO#}r}oBss5yWC%o$qia# zt}PVBF$xL+kq(65@n|ee0V5y`*@1oVC?~Gn0aXIUmRMYmwCt>3K*9@xV0wK=NwmS` zQqtI$@N-<$yu_y}1Fp+Q(`K(Q%rX6ZMJe&sdc|}+&MOSANT@>pc2V8#2QrrNnJrRM zw;C^`^I1)}z|x)}u;vxvvkz7~@H}cTwMOzMHyV~e@ng*OA&o(lNH$Ok86RNC;4J%9 zSRFA`Y>;oq&KOP(>@;A3WzbDm$s=|xO5+VjFm4VELe+t;_4s^v+v3Nho#BB`gCzc* zsa})%^*V+s#Xx~~hDTLWW6 zNVP>}uVJy1*mhx2d>-CllkwxQd`}UP>&@h5tHLpMe}fhf1L47MrwzIJ7Ald4aq`DD zKbPHs1$O50!j@bW#@=qXANn5O0m6X1Hk4ih4Oy(rB>;{uehriZYqR-YR{~iN$^r81h|jni|7!kEjQ3b^cz>wkqhPr{?8SW2a;pjWH;E(WD@POSC0Tmu@C|i6B?F(ni5Wp3lF;e(VzxQ7fTWb zI$eVIMFrV36t9nwmlkHZGqnLfjQ`LGoG41K6M$u{)(VfRGsJ`j((+~4sDF3E8;%4q zZ1j&o9+fAu9?2>|n%mjtY?WPZa{d&2ijuF1WT(02bL*JF{(`(hY#Gh++JR{rhxUdVXuYaQVd(F2W34ivrbTw6N(De6fVYG}{3o)-1 zH5yXw~zy; z39i0#PyD)F_}#wQ+1Tu6eqvVr3h$D)i9}n}jD8V_VMXZe-h)y+ll0gmtSeS@Jsc=Lgre}_L|LhX6_*wfwmmic}xS)pt|#8W=(YWs226ZW{NDr zcCld84))Zl$duMQl6qAyo^$mpT8^Gmcj)d4doJ^3$cXOl_D0-6l7Xo)=lAT;8K)pPX79x+80x6sx#Xh?Fj>3OD+WMcfWMX&G zZS#0~W(k51nt97_C61V?9jT3R4#B>m;US{iGajiYW!o%T?ZoL*KK^{1|M z?w{^1-O+Q0bsFA4*)l--?RfqDP^!Mf1?*6}+)ZrXT?D<1fN0`gUlROKA?QZreCdI2 zTI()TcmBA$wR<^}A|MQHZ@Ae#yXq|uZGT6x-{|!ZiSvZ{en5`wPi=2>8v%KG6WR+v zTiRi~cUN|8@rqnMxSzajXLTRwUF3z53i3p1cT(Qw$6_cSxmH0luo}e{=vD69CkbN@|+ij58=$6s35mq{OhmJcl9nl z_XiYb_4Z zNIr}j5QTAR2>(U>_<+&YQ(AY?R>vymCbv*<7Z(rEZMfX2gMdK(&NrQ~pfaqPcs}&^ z*SGn~*SZaL(0m+wmL!NgP}o){`Iq+Yi#9kKB*l&hbx2LSAQT(BN23(#avZ zJD89|VmL35+^o^{*f`}+OW;prMl5vgzXdol{( z@HxOr+~iOPqG&8!BqN;n($juvK0R+LU)XgCX%h1~g(S5RJW%O=-|{^^zM6^VuqX;|Y=8}EIP zuwEddZRyVb7gPm;Qmhl)af6LU+8m93xlj3x+QiX&>k%H{5uQ_h>Z=<>R zO~a3G4&F3BoSB;KWEILItn%&OugE!n3dat`jkn=FGVj-fJ%31*O6H2z9TZ&-@G3)z zDVDKK%SETgGNW3L9Tp?O6Sh3&Fh*SY(`I1W4?$LLxX7EBuT77!q7o@G%ufbd^iBoo z=Ir>mq#=&-N813uO+SfKT=)%k6wy?&)B);TLco7K65N)mcA2uH1#)cPWg8+Wj*#D` z523vw73f(Q0;T>wQ<0u7i`ou5FqfYtx==~|`nu+|W$u#PPxf+B$!Y=JLjoMgA400Y<*ek zSf9CsUzLGq2*n@)6!jw`7=AZ)s=AFHZdJPz>?se4PLzgg;8t{u$Cx*3mRuMx+-Bn& zEJA-Gu%>L0!l7lVmfQeAhli(rXReg#+I{tC7Pt~rLhGL*OVM?R?7vOq;;6qPG$3Jd zibWUo7c+P*yLWL_hGoCFCra^cD(_@h&ll~STabOcO@rB<-BDd1TTbIPP-Q(}!wv_Q z;CVk9sp8p-wI{RBg*?i#cqeFIMO+anjxxx**^qNabqj>qTdJOr_rN(tV&6%6m+J9F zHOLGl$&K{922#ZRjdG4J2{U$tSCAw{?PQ7G#a$gp$89Xz=Pz=a1OxX}L0zW4TnCo` zabY8;x1EmQlB6`X*gbqqvX_r83zJzXe9K6hG=VP))4byU@5!Vwq(zrEju z3KoLd3{fH(Oo}H4br6mbA^qV>8S+nzd=3PT`h;Ov5IoN+zb2pM;A_8#5x!~_R8r(} zHDgO&cu_!?ORhmnM-}amV8^(pj3;MWAiE0#eXN55H`^DeleY8E#rStKaf*Kz3{sVT zvm_}&esZX0Yepv8iK=;$&e)e8X~Iy{Tpu>Q0Ik3nGBg(IA~=`9RX6DG%_2}$iHYHZ zQ$E*i(B#(PZ^6!4@4^n0&bcipHB60keCHlcv^ywqaX*&R)S{vxR5guZB;_$^^=u z@uhr8eO3E)th4S^VW-DI@9vj&Hbi@P!g?LZ)_Xv#sKj~5+h*5GCKiq1@dj%C|;L zEp-*JhT?t@96b>)J0F}MHv=DtwpYFEp5JOI2P2gY;FPHXj4xGa7qFs)Rb-){9M;v0 z_bSk=$SgVCLPyVeib$$wZN5kc>`QVdOWRpna%HL*Ra4}f3Tk)W`@J2wc%J})QxTk7 z_nn2^vC>qnDUBJ30>0AdWOR2V2wEcUETU;3Jf!tDg*Yv$5{44-a?-2{S?iNVHBL=kMg1 zUHAaMMpRusL({$?F&bP3{%wNkhN;A#aZT@qd%vRYp4_A#M7xXLuYe=J3LnfAAE)4B z9w6mwC1^5F)QIkS#E~>a+yQ=r55KpMzW1*W7yVe;H-gtDan;Uw0M!I7HIcX7klj$w$e zU`?2utO2Lmsik6Hks?3#{HA}(&b?e6X0m=Y)# z+Avwnv)kVjTYi^4G`IrYNv6#?lR(Q}m7d|vZboS+IPEwAXGvyO%ARo25#zE6fJvn! zYX-Jtt=@0``mZqWs=%F3oVK6CuOECq^PTsfpMWR+=M`}+>%R^~bgHrpf8UGQ|2;K1 zjr+s)5D#%cqTYJ2_?wqNwF`P|{o@Q)(--y3@&Xb3%MP}vEZ+#x=XK2XvQZn>u||?k zb`{3sAmaQF#przf*7HAiU$@=twTqrH8DZC1$>gBa> zKVq+SL}#9R28JL%?~h}}H_u2{{~1R6MV0(;BNrsyW7H$7*4!<&^mlr$eDT#+g=$>u zpdP_f$%;BsWN&L`R*ARI3Jm$e5Q8imk zPEKSJ*3y%Dy)$$AL40K(``+k}e%HjmzRsnTtCUOy!aS8e0ljoY@hw<+`iSxoIzFqtgPTm-a__m zeuV4}O%>nnQNU5Vjj?l(OvMKm#h3!2a9T1)8JahGR^p&fUfCkJnw^tdi?e5^(fLK! zQu`4WR%o0{lnb_44!1awLQ<`5ur!+sKwidHy=6np-?rNJiCnT~%O|oqBKc`8b9k_rUac z*_O7uR!PK$c<~!57d5`5)vv2&>0RfW2Sa~~R?H#JA? zc^!U58j$dVnB2SQe&f!KdPWU5d6SDv3QvyZLskX%){hqzo2nHY1|BDOBms{Hu__My zxNJ+LpM=LSfzdF_yR%BDx#5b+8yPvGjXm1Fh|lm+19r6hFxyeg)ol8)SS<;kgY91# zrB?$w3R0g_j-vf1TyX{cA4DXYP|2Y0?_N`;&?NP*IM!hla=7_l@jjVm4g9s=tly8l zDxdGn#1~C6o7s!YJ&U$=DD3y3)!VWAUHCyeO7DJNUjQ-gte=PPfsIdo_TnF>b@7Ub ziO5N9GtE#tDVsjZi-5NttICz%ZNaCp3}UCTbqno-Xv zMLR0Df{O+c`I1|c7I_$*#=XCmM51zya!`bhFzPyA6#|Ej_fF;l`yp4u5;iM@*<87SMNl?w{>ku=u7 z;zD+r>rG5N;pk#1c+uzvp5X4G^197oS+=n`ied8;V1g*28kt*5QwN~PRaf$1FT68= zIc3bd3#7OHl%@bpSQy(EU?Uxd;j#T!`GY zI-${y0D{$4J^;r+y70c54vjj$7x_E9&Wy3oTn5Kd6XoP|ngv-#1QI4O79G7{wcr)D z1LTvKA`k1^xos_w;X!2)go2Je#)j}SpZ}Q+U2j-Mga!`P z35F3@?LMA~WT~07L|)s3XDy=X^io1aRkIbUok2H>f}2J%V?0f7WQ*{!?mOrtwdREU z5v_^;Ki%o(AHuafd{5nh6wg>=7u_q&js>z=;wSDKbTQXpfsOn~{8e)Wxp`Sab=7md z)eVNuPtEIFf}qF7hO|pVmI7Jt|%=8)}U0%T{$Yz^e(x%C*=yZ^A z{o|;w&(E|ZV-l1QQhTcVD^jw&X4h7d0e`4=795l_rI~a$L<|-J{Aq&pLTup#>B!fKLW#QZw?IU(^ru* zEQs{%k^wUAD*Kx1ga#a6i$FHU*nVG%m|T^%_6$#=@(8oV!LR0ycW*ntliQW0%+>xn zJlvS!v*f5eC1iy+6sg}Lr*q8taQu9%Mxb$(9dr}5<%*c{d?*&tF4$qllWUxw4Q(s# zkKQ-x${viYZI0B8CK}yehyQjC8uuEq1Cd2nQ zn{Y=G8e1ZJKME8oR4kHjs%w-Xru&gLEkGs?E-mCi4Kn9s6tTd{Fm6Y*q>nxuos|}1 zT(7-St)INC=btHL05*BE5}aKNQ(1v$Lhjn^0JYIb z2h+4QZFi^(_=qU>#dth34$01$%>G_rz01Q;KF&+nn!;L!p(#%M{kAzz_6poZfKpZ$ z5t>QpgJog#xyAr(2mWAVc@$Mr#55G46kUpqWJzl94%w~%V6K*!d?W=|eED}tM|$SY zO36pqIGx09FOj+hIO^49Op?cSMQ>>Ke2=zd%|BId)FovHqpem zgva>^p94gZb3Y7yR1ZqDeTsgR)?}M*fK*{t*Pne2v%ZdM`K!!LnvWMHl|A+DJO#eW zLbbHa3gzH6-6IfasnSeaLk$Tyt{Spe$Bh(Z(YFsmJ`Ov|&lX847*o8W&HQO6pfm<@ zbJQHtuo}KX)VjyezU47&3Yip^Y`+xb>}fbWlhxQ#{31%moNBCUXVz5>*Z97(zlbW& z>yZ#e;I=k+r%o~?4|{1|c7Hh}JIM==_j$0Xz$C*sj`jva)mETkzM^7rXQ)~cDjhq5 zjhL-ztUytxp2%K)h*ylR@iqmxq#R^vPur~)T?FNP7&t#aOZ09zvEHBI7HTiT{+>T ztLZ|J>3p5`Kn6>ytQZ^eJ7#_)=z-sisR0N==yNtQ-z3M&tvM&^z7l?UJJkC*d%u1U z-2wLISbIHvR`F-m{mX*4N=`+`uQ-Yyy$&I{M9bB|4B36F?t=*d1v z$@~G(VTHxn4?>TRPu8YY_vH@+<_Zl0hnU{K$TRd0kp&7pOVn1O-lkq6{rK8YP;k{k zta0v))Rz^YsqfI~D1%pKh4At;QC!qwN6By3eJQYcs^;I(a0~W9m759(asfiEWCGoVkqwhccXF45X33Moo>KdCsR163sD6qRB8IQQ^rRUN= z7YM6O8C+|a-naGuom;}yEzaF2@9_#_-`c5dO2dkhJ=aIdS%o>Xwo2yCtc0uy=D+CU z3WVt6x1<6^lkE2V+l{abHwz0B;JFpD8&k=Qy|(f{y|5et9fwcjj@f#`TQ$nz&fgC7 z9nVo{9`--MM$!`l&x@LFP!Tup?kZIDVlNEBo3tB$H;P-S*Sw<^DNj(1jC4R_u=c+I{tH1lA zB!+eTV9L(4NeNqk5ZdxS(O}IzO)iA6)QKZE!L2& z?28UC@DYB5$4V{~&!H2B@oS!HW4{iS%#Us3{iK8o^@dDH*98I~>^TPthUHXoZR9_7MfG>(h)(8m zZoWmP7Yp337D>Y)5oxZzWo%MrHbrzS?TX`G%JA(CJQ12`&BlF8RQ`nytx$dHxcHQ}DJXe(qt*Pv&CO4x2S$R(TnPe!uz1e;sns=&o5y=l zY+15qQ@IpJGQ`WHQouhRIac&n;Hv`8;~7gtB9ox{wb2eRZJjf03r4{nYn>sMATC3a z$9)%3>4wrvRJb0`2AXo@hMYrjyAoi}&+h=!6VcueBUs!Kk#MWrRMjoh-sc`m#DgKX z*D4ZG^Sno zfGW~k>et5i6J`7#0B}H$zooX2g40DEPqnWA(P-?A$FhoHDBY&>uVI)cAHT{U8LLFc ztOK(%l+oZHeUqe#Lrf%P!k`#JB5(4!RTy{u5YEwXDxC!JzQvCF#^KEZTcDEX9!zOi z^LuY5&rj=VA5^*-nA z_<;Iz|FSxUOCG1OT@|Y}$~SbnTFE|=XNNg`y5jD{IF3?kkh|6B;LN&|YW$Kb??(8m zdfMcI-}s3%deB3A{x(5~zf*;V9RsDKpy2O(+!eo&c0}`q<&2<#z;(?)smymt(54t` zt{KmSV%T3qkou!!C5Pk8D|+2}B%iy~in{y^2iX&Hd``}2WZh8VQYFH?#CTg^SIC-X zErG6(R%~Ge?7gtAr+}r)FYdT^@|Z!9w8XNeOD)Sb9A%beD{^y}b*O9^u%_v?uL%@; zV4AcZ~=g*N6Z^ zNy&a^+a0hR8M#ozx}{7IPmoiN>~$cfoB^1ki%w3S_0`$?%m4lN$vs#Y|CbNc`l^V)Ir+aI+;3;{ zf3LSU*KhOx-N;Wtz*sJDMDo11bUEU56S~YM`Przb=)#mR#x9!sTD_$u;-MJhpfdfm zR2KA$t-KmgK)!S{=b{9CN);%<%W$#8NApIC*R&*Z^Auyp?j#tdVlqbM{EQM4eT1e? z-i zqgo65|8lfDu4GQw3DrkETM0(2Xxqg4g{CmH%xm8o!Wi=EbO7$?oeh* zrzS$5vm+Q% zxa=t6?P%gvA5G;)a6ev$B z;54VClpkV=UgOh@oKxDVbDZM)B!ZmRgZl#g^t6O^q0|UsIyYGj+ISabsH>drlIp@F zM=lc&jp+-l0;Zj6qtpW*^`*yteEYaA>a@`r> zQ8kdhCwekw^n7_ejMurB8L`Mi=#OkOD8B#a6Qq2N0btJkzxCk3M)v;yaC80k{{KDP z|1)=gy5>?P9?uGeG}&Fm`@=WRoivx_!IBf4oW;&5f_hS$~2bKdot#fQBlwfOK`*f6V$x<#vva@WTE2`0bklRr9Wp8xOj{L9K*`uu0|JC$*OOez-&XdlUXYI8x^dY(F}((?jOZ02m@ zEGbO{!Yk72EM-oo*RfqStRNUmE6695btB0VHM~q)>){t;KORmsP`&_2wqh?+R$>VB zEeEMm=GR;)<|HdMiv^Jnj5@Vdo`=y5VV-ho+y77eH9q;@Vu;o1v#pbz#(#T_-&&2I zeq1~KwE3lWFZbd4m+kG(?nfJ6wrkI7|6!|gG$Sgj{2%S+BxGKPoNfR&cIztbBv4TA zKsi)PhYGoh3onad3#}TZoTAs{EMA#$fBAQO`kBT5Ig`?j)PG-p2>+L@|9-!H%m2SC z{%_Se^!j~SDQO&IPyo8ssmhQeBPR;$_&Co&I`LlO>yB2rRvo>V$>%`@5M^;!a#57< z*exsy{krf!QiNhOIpg;Y85=-Fn^a%SGseX`MAyqcRs9WG=!9Z+wl|6>#_pJ$nj;|* z6&NN#j2{sZT7i(38@*o`UH(`iK;DfBKGo4AB^LM~rr0Zvvru?-q^-<>rbW&Rt`9=y z7NeolIZ z0;1rER%dy&>p{4Sr3~J)pEj~tW0oYF<$YIAyS|FzXh1SauR>cTQp@b7ez0j z>o5#3^n1!Z7()u;NY?a9%50BYj`49XMc+*;9XSomEXP7lmuA(WFRKi{j+#^S!Ix>? zit>Ctf3x%AzYN~EU#5&Tc~!|sEX(xR!y?$S&{xK%OE8OU)kXWUIs@7P)oQS=zs38y zob^fTv;i%~AEtL=hz&y)>Pq%d|*!T^4O|l%F{3LzAa&(G7aA zp|X~XS`#KePsNjM0lJU1SeQX)>|&J&glvtidaG8k8e`J((5EMVPYmEj!_R0Hd%g1xzLHee*{DBm z!?9bpE&F(2JC}hM!7rVQNp;+AUN%WoK+AS>s()X%K3_MVFK})xj#0#iF?u8o8WdyW z_h~{hjq*QuTH=?#UJ8Zq;goE_r{kKvqVrNWo;cKOZS%`(fRDyg1TnQh;D`Nb z35Y3yu-H&AATa11bys}!u%%vv>*u%{1-We7wy>Xo3 z@=+or(>ZgUil;bXdz1S?LLpZe`&5~UmRXzD@p`?CjKY&rt@g?Hq5Yr+Do%fj0cnF8 zOAg!B3MPggRLy>L5vEbK#V83}l+YlZ)E|xOdO-TOE~@Y%Y` zG*~E*PNtFjGo?n;*^L&Nuf#-l+P<@ar36^Ih5{yAb8z9%uJ4}xZ%wmPi)JrNY4-9P z)2u@2EzN!-npI5U`e=3u?bl6ug3_$c|5!Rn-eNJ1hSM{&KsbgVR+dwKV6pHpz(U=9 z^R)(tUr3FG%JxmmRcdJlaUR%h^-@M{HN{R31E~_U-NsY0r&>y$F(x-t)+?iY2Y;g8F5!^ zCGt%0A02tpz@=T_iP)Hz)O~eFBSMxwN-)LU(8tTbhP)21mK>QY=+q0MLiRPSEObys z<6$P}&r_h!?4!6it)(vS5tk`e#A$`{)6#VdO9Ia*Octj!OR& zlUv{=9TTsB-U~dsN`I=a+UlzuEx8i{IY40WerRRB=0{uJ102kPlOL9({*0ScEOlxW-+h*^%bQ`~# z83$vaQjY?@9Pw0F0_Y;jn9XkuIp4~VLne=6*`{~tS|nu=v}I(ap_!bt#ILeenacG@ z%qxn^KY>^}xg=zsHb+6oEYN)76`LYX5dTxBi~dA)nSQQZomXC!GZJgl1kx%p+hy39 z>CrAT^cD7KTRmC}_fWGc>#;Cn?FDf!%T>RQclLY~eEKhfe>LX0B&68u2NMqIkiR-T zO|Y$mdmSchzr=!F#_k*tny=@^{zE z?7J*eKn9kEbZPhfDj_M+ctRm{`qyXTMEwqooiK|c5smq|cXDocY5HGU{V$>a)b2mc z^v}LO=gH?%66=h&iURt%N-s55<4R){^vZ7%y`W4hbF7C`Ir+<3?;r&exmrIpUgL`6 z&FojI;(Qg=5^?c85hYHC6P2NM#`j|rl=wMo&6OAEycJg}Ot2gcqh$rc*U5%j_T6Io zUSWrXD_LyAc#upXxP zuz)5P$~!83?o*BLP{KoK)zm5#21;TyruTHq{yK~zDv2R$OpHAEFZ?Iyk>fqgwpKp) z2l1gHt1H&k#dQ8etih$;+Kti_lskIqUuHgqzJ)GU8L6O2R>S%SJFcSGPpK|G~C(og;PjAUyD{|`r?`^%KjqbS~w*|cao|w6zqT)@yp^X>}rP;D56TQMA}-*sk9k1 zgH`2jDF%)~V4Mne=}xT|UDOX`(hBt&tYcDWdOSdH7@<`oa?|-()8=q#+-nV7Vu50N z6l_&fT$a#+=5p4OE?^yF41x(#g}0L2K_+Jo!cZ%KJ{M8^0aJazx^%@dYo01CGZRE_ z=zADP*bfq1{v=4wkvt53I5ag^6uml*{Q(ef7y80gH}z{x@oO}pY;&lAV!oase2;-k zLm)H?SP82`O+Ms2Z z`hk(10Zgr*Lb%;C3t+ysd?-sT%-kdzd{(57!8MLjfcc4X70pn(p}(ehMS0>AVMpy! zhAn^KO@`@XWIb@m6Imrer+rO6AU7f!)>%kZPC%8AOTJ{QRn?tA`o4q=fD2%v^j zg@H3aHMwUNvmmOpS%I`9YGzZ4W{$t>XOn30$2MWyDQd|e_?_xx#EcN z&%(byyRRj=2QUiV?O+Z&JlLqLKC8+i%|$CI6mQvSJ$aHJM~xuyd!;dKoWK~Wy=^pg z(}3irW$ljkb{-5`t(oJPqQVQNmpc)5(H;MyDig@5Vk#E=T76DiYXLPeBcbaHBGAOW z6gg6E_C1hpIdp55$Hn9)RC%=RE1>1<`{}Mt|6iQyM^dz-C{YqbGDLM9GsD=j^~m?j z@!C|b(kXt-HgRoqRJAiT-iVc< zW;TkbvKs1c$Tj4Vfg5M+pLsC_-~&p-1S_zGz3KA2&fd}6Dv$Y4&9X{oo>y)y z##guhniF{)Cg9oj-;IZ@^^E;@y|uovd29duUhKc6rr!g@xaV4bC8X=H^s0Icd3*2G zExr4g?}yV&V`d|rmnd?U7!0P4V=_CpV2}Lrq@v7MC`;2F`dInRy-kKGu0U51aWWD_QQQQ76|JrKtY!&KxmTR7FvDo-4K%-pjhAFwWa! zwq=1mrus+)`yBD7X+ip}x`vk7#yeNsM@)z_p1QfP+}*U)rv>))&ew0O@e7=co4M^S z$*kn)))8|kWoDPUwwq*0+H5Y2OZHu7GaR%R*xLqT8ckG+unUih!E2>g-hEKbRZkxF z{FJ3YL!&B`w$fQAb3h^nUXuFSiS^T6Wzzgou9z2WvMDiaXWr7ZEH9RTHfyg7XwShT zcM4KF*;K*12)XQZR01;T4}`gj=~apROyI~^)0!FjC&8&?WXpoPs)?TQXO-`krIVE{ zkLWE(XI^Kl`i!Sps*qcOWD%~Sn{t}n3oIZR>awiVlh=;SpA>t$xN|;>D&0#I@nkPF zyo`KauRC1Jxo&oG8&gQ>O~Cp-#?KWqk5TUT4yW_?Ff=F!!gRMih3&!(PBG{5q78OI z=uE)|E7_R%(TrRYk32PPN@JEw)0OcoGTF*zM?M$)oGmrs1%B)`)oQf`Y%k^F?^-$R z6}7SNhx2|}EVJI7+EQFcF)ky26=xYZ0pGF?x>)~iS&f+&rS9B$x2NAvfJ9(}+D-KO zv~{5{x`6+QVFayWzG?6ibKRO3^5a-lA1b7tq>y~X`@}}yC%r*m&{Begq$tQpL0i>R zb1C7ad8WAx&qM{MjMv(Xvao=etl6yy-u5fNl#=pu`Alg)%+>kINBe6%xKUM+*%y&H zI*~r^y2=b3P}>fu<~opX5Bfn!S}pl#Yj|pBI5j95+*l+h{wQdeGn+bVO&u*K>-)mm zs-}VK)S~dE#yzXnwEkUHBz6_~qbNv}nWVTN11V?n(`-`ul$ zM^V!xROP< zgdJn((i!rNRP(vg!n!zwN{g-$UAIw{xe~w^cNXh#bBA)4oHWHE*h^2QJdwd%1wz;1 zjv&ck;yJ!ZH*<&OGJVhs6j{3K#2&Iq(Q@@Fip>bOr~3Oj)%J~|0KoTklJ6{fl!Jl2 z13v9UEv+tA53)|J2q{R&OE4LE!{MFPLVa5eE%)h1ff-}@k1G!@Va*u5 zWaZo2a^gSyz%k-2C%OJFXmSCDj?9NWU|}0U`Oqf<*vT4PY&h<;j!(=N>|C3AAABwL z8CY^2#c6NiBagzlHeVxa1_0E83EDDxdRa+jy~_ZImugnJ8a0rTxs&np>jiQww-r-a6WsxWkmqM^ z4Cw`6xzM2Ptin9lXKtYd+HBOtI9+qW%d53B-<0PSNk(*O?I?4H!0$Ttrr0jIxi1|J zrL^n91dzYk+-~;QZ1$cdLgl8<+wNJreW%d$RIQpy)iq2_+^)GCiY}3G&BRnex+z(j z+O=G>IKp(t@ZYNJRx4mg@bw+_eVrOlYo+a=g$7+)!Vu*q@kM0Zsq?>uNXa*^i-P9m z2SH_Rzji*T)4`V>3{)={I2keS-Q0sA$=2~Z`ig@gm#x9w92YbjlH-Bqt2_tHcbm!o zO!Kecez#kERo<7|$$~vD=6i+4_AKXN-qeiIxiOo2bs6?E3NZ1qW}`&tnwm{RO%+|& zau2igU5BXqj?NsY&Kn*dyd63TO06EQZPW%;_?2-;ym^P+#$svR&8wdXjjY^e z7GO+P>y=oNVWVaT3vDYUs5D2Z?BdhnG^Bi0A(i42W_-5W|G16u8Iw_14fN5noHn!9 z7IjOJH<$cnrS#OvnQJ8Bfhr)3*`4svx+ut>!O%9il^i>`fv0}lSmyZ6`${SmFYAq64tgm%=85uK(tNln* z*LQa|DJQR_pX{TEeJEiKck*-qpB5cFtMQz3XQ5`sF@z2&2inFI0BF<#0BOCcYUSW_m91DCT)UBCH5i8BE=o zhpNjqvd?>XgCHJv+T>)Of|BxmR!p*2Yfi%8Ul^Nt!Vpg_u6enh1rkdrO8}XgnK0MY zQvo3HXX4Iqe~D)US;C>9N^y_-F)D)XI*&xe*SIeJm12{U9}S||vI?09&cbwk%C`X1a(VXDH1ttabN-5H%zrY!&69BZQ=b0;ex=Mp{cA}AJUjoxgY|an zK{o%x=EK|kzu!gv2P**teEU+;1bNv3&ozl2C;~uz3oS+8OFdxBzBfwj^m1E~h0s+&>a@KFDET&kM0i}lLBwg4Ydf02nfNV+k?K&aWs( zC`^W9t~j%1y~ug~0#0%QdSS{ld?=Dhmzy^YqfyDkI0vCRa{mNIZE}dpLoB>*^wAeo zpHg69Pq9(sGXq^E#08eKP}c9QE%;+MWG-U2JWtc{*4o;|#YOXCqZ!3#YsZIc&~}YB z>X(fdbQ*AI%r3*5-lHpqoz2DKuGW>97LS)=$uMOaY6PgLo%vy2l~)y);d@p5nD#$1 zM|E*yo{FMT{Len;#S@`7ZY&qt9Y$TO@nx0v!jBERuUcci)Soup&T}pE)SRbKmw#dB z<#35orW}(>2C15s{x?9TJp+wG{IIGHx@tMF+sYMhw%{YdWSn8lyDroB_4AtVM2(13n zm?8af`Go1qO5Q+#4&zwKM;Xgp|8c&O7v)IY15^(Kbrok*7(v_;cR$fDUsRS*{Dgn| zvQq5PuGChQOtEg|j7W8k+AtW_@jnKYlwMck)0#J#S!^mfcyn;r+1r1)`;Xn1Zsonq z(5?;golNdXbi$e|&`49ZykVf(rB`T20?*P|CZZ+5RZADv8U$@%0-!N+TQ$5Qza=|pLGR`rv%W1a1=YEOgK z&C#hZLR@o1MXyv;SX0#bo1{MM&e6O%Yps+tI5kgMTgIQM;UHT)K6frVWwIx0>6{g( zv{1K#n521+49w(?9aUVXp3ft21~}$yT+u9*e@Q?D0CU)nhtA`57KGuY$K)iV{*sb! znQ7(u!)cz4&_2oERgqjJ(HI}IW}82B)-x^TZ#<7C!#=0H50il3yap3=ezp28E;^OW zeBrt;+Oo3bWGd?aR%ddVoV^O+GIwt>2~tXmY1?f$iEnPde)vJ$$$r>`gU=R1|CuE^ zN#bp@^vO%%Ja^sOKi)ljv-4ta|L4yB!T#=Jhs)vnNi<127AIH&r`ajj7M#b<%bm9m zA7|&$@%rBA;WwBH#%ksFaX(6rCgX90sSsfcUq<){@&Vnc&m$_xAkKkD4t zG`s@YBLjwAV~E9dq#&u5+XK{<{cbS}$W_H;sd0?}tGO&vmkoQar-$&OU+Z9MuVJRL~l_>)(_WAW|o#q$G2iY~P{wRa``!*Jd`X%4@|UAgwkT-fEzNR;e+U25C_g@MaA(PxEPO zP@A=}>)(E3*T4P7*3n;ey^j04vDE%QS)}KZ7;s34{=YeEqz$LneF8^^U#;3EWmX8fklz%oFBr%^(S^7w|iWiJu1S^e$G;i<*D{H07N!sO5qk(>2aJQlGRiVQ^ z2yz7-xv4}&`VL38GIsO`vL}o5t2KBXKi^Y{-EVJ$Fzt^^}FSYIK zH@EGZ{|?)}`Fm~q=2F|E|MqG)zbcZ_STO^S`3CCXVLv`hEcR$Iq^krYUimlX^IScIv|MvSp zSLkIoqA2G``R0UjbHqKd2^&O(+dG^Ib+bn7HLi=Zy6D!0=kVC_D(mrC*Q?I62*kDe zT&uy^QdPj_LF+CsqE{<6waeY-MPCau`SX$N^)ihWB(3V|{y$b#BHo(j{p8&7nQoBy z1J}tf*TPu-e0y@U3}hq2KsFo(vN-p+F6OZSOZY~|T|3GC=|z@t2fn)MkX7ngy~|NX zW~gG-y&7QZhZ<$et&2HL;6isb*75JVzct*tXs&~8T(_2>Oq*G% z`t#9H`x>}I;gw$+nZK23PusBDh5n_va^z_1}RkuEX?K&TXm- zJsZ`&(meR*r;N?tfikYcI=CcdY+e^-lxm=VKGL|7rrBOf(X5tO6t78Z{1eLet7wOu z$^y>fe3j6c5LGv|kM!5)WzSvSN2O$I?b>;&^d*MR=N?WKQe@(avKQ&aW9a4u;mwGe z%a!w!Z@5R(Q8ya$TYte~>^Q2rDoN%IhgOyq_6?@&Iy1AP*|9%%l`*quRhUZ8T}O4v zZp%C)^J4N&wb?L(ScSrGFCAU1!+9UeW?L(Zn`7>NqUn5r)vhc)QfKGQyVpC9ml}yL zYfFtM63r=lOf126iT9|(a`7Q&Wf0XL-d6MW;Tw(ekYBdRbBFC6K5Im&yiqo_&Jq} z%Dsdh{W7J}?2s1?jZYxSxEIP(9z9|xd?qzz1xuW2^2t$mvJrEtsteXK#R%Di(@;er z&zEvL4Ux%Ee9uF-2DH=VA$6dv7cjLEX6T`?TbXdj8=%XM&LdZrw)Hly=la5MOa@#X zPf_H6B}2otI~TR4X!*iaLVuv(o-4({%?xOnX^_*&LY|5i21-jpfxjwFa0?;YHMQ;j z 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
    >M8VtrFf?MqqFoxWHHlJ06Kt^ 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

    +
    +
    +

    Why is this useful?

    +
    +

    Instead of secrets being sent by email, in support systems, via instant messaging services or the like, a unique link is sent instead, which only works once.

    +

    This way, only an unusable link will remain protecting the secret from further prying eyes.

    +
    +
    +
    +
    +

    Are secrets stored?

    +
    +

    Yes, but only encrypted with a one way cipher that we don't store the key for. The only copy of the key is sent to the receipient you specify.

    +

    Once the secret is read by the recipient, we even delete the encrypted version from the database, just leaving the meta data behind so in future versions you can have a dashboard to see what you sent to whom (coming soon).

    +
    +
    +
    +

    How much does this cost?

    +
    +

    It's free for you to use to send secrets to whomever you want - we just ask that you don't do anything that could be against the law or harrass anyone with this service.

    +

    There is a paid version on the horizon that handles files as well, stay tuned :)

    +
    +
    +
    +

    Can we run our own copy?

    +
    +

    Of course, there is a GPL licensed version, we just ask you don't compete with this service in doing so by only use it internally for your staff and clients.

    +

    We trust you to do the right thing :)

    +
    +
    +
    +

    Can you help us set this up?

    +
    +

    Sure, <%= link_to "contact us", "https://reinteractive.net/enquiries/new?message=I%27d+like+to+get+some+more+information+to+setup+SecretLink.org..." %> to get more information about our Ruby on Rails <%= link_to "OpsCare", "https://reinteractive.net/service/ops-care/" %> and <%= link_to "CodeCare", "https://reinteractive.net/service/code-care/" %> services.

    +

    We are experts at keeping critical Rails applications online.

    +
    +
    +
    +
    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

    Yl|Hdvtck6!a=?-AKg;)5~!Cd`5_|MScc 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

    TSO~ga3&OV6z-X>8xLH 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 HW#In-)uOv2 literal 0 HcmV?d00001 diff --git a/vendor/cache/rqrcode-0.10.1.gem b/vendor/cache/rqrcode-0.10.1.gem new file mode 100644 index 0000000000000000000000000000000000000000..f63bf36f78d1b14a9e88e7e5a38178d7994926ab GIT binary patch literal 27136 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 F{{c2RbT|M2 literal 0 HcmV?d00001 From 7ba6841f4a385330ff3c266db03711b0a55a1f15 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Tue, 2 Jul 2019 16:59:31 +0800 Subject: [PATCH 083/152] Adds TwoFactorService --- app/models/user.rb | 7 ++--- app/services/two_factor_service.rb | 42 ++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 3 deletions(-) create mode 100644 app/services/two_factor_service.rb diff --git a/app/models/user.rb b/app/models/user.rb index 045b0c7..92461b2 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -2,9 +2,10 @@ class User < ActiveRecord::Base # Include default devise modules. Others available are: # :lockable, :timeoutable and :omniauthable devise :registerable, :confirmable, - :recoverable, :rememberable, :trackable, :validatable, - :two_factor_authenticatable, - otp_secret_encryption_key: Rails.configuration.topsekrit_2fa_key + :recoverable, :rememberable, :trackable, :validatable + + devise :two_factor_authenticatable, + otp_secret_encryption_key: Rails.configuration.topsekrit_2fa_key validate :email_authorised?, on: :create diff --git a/app/services/two_factor_service.rb b/app/services/two_factor_service.rb new file mode 100644 index 0000000..8661355 --- /dev/null +++ b/app/services/two_factor_service.rb @@ -0,0 +1,42 @@ +class TwoFactorService + attr_reader :user + + def initialize(user) + @user = user + end + + def issue_otp_secret + user.otp_secret = User.generate_otp_secret + end + + def generate_otp_provisioning_uri + issuer = 'Secret Link' + issuer += ' (dev)' if Rails.env.development? + label = "#{issuer}:#{user.email}" + user.otp_provisioning_uri(label, issuer: issuer) + end + + # Update model with params only if otp_attempt and current_password are correct + def enable_otp(otp_secret, otp_attempt, current_password) + user.otp_required_for_login = true + otp_valid = user.validate_and_consume_otp!(otp_attempt, otp_secret: otp_secret) + password_valid = user.valid_password?(current_password) + + result = if otp_valid && password_valid + user.update_attributes(otp_secret: otp_secret, otp_required_for_login: true) + else + user.assign_attributes(otp_secret: otp_secret) + user.valid? + user.errors.add(:otp_attempt, otp_attempt.blank? ? :blank : :invalid) if !otp_valid + user.errors.add(:current_password, current_password.blank? ? :blank : :invalid) if !password_valid + false + end + + user.clean_up_passwords + result + end + + def disable_otp(current_password) + user.update_with_password(current_password: current_password, otp_required_for_login: false) + end +end From 149db65feb7027c5bced5c345b5901af21d2f1ad Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Tue, 2 Jul 2019 17:00:06 +0800 Subject: [PATCH 084/152] Adds 2FA form an controller handling --- .../components/two-factor-fields.sass | 1 + app/controllers/users_controller.rb | 40 +++++++++++++++ app/views/shared/_two_factor_fields.html.erb | 51 +++++++++++++++++++ app/views/users/two_factor.html.erb | 9 ++++ config/routes.rb | 5 ++ 5 files changed, 106 insertions(+) create mode 100644 app/assets/stylesheets/components/two-factor-fields.sass create mode 100644 app/controllers/users_controller.rb create mode 100644 app/views/shared/_two_factor_fields.html.erb create mode 100644 app/views/users/two_factor.html.erb diff --git a/app/assets/stylesheets/components/two-factor-fields.sass b/app/assets/stylesheets/components/two-factor-fields.sass new file mode 100644 index 0000000..7038b0d --- /dev/null +++ b/app/assets/stylesheets/components/two-factor-fields.sass @@ -0,0 +1 @@ +.two-factor-fields diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb new file mode 100644 index 0000000..cfc6f70 --- /dev/null +++ b/app/controllers/users_controller.rb @@ -0,0 +1,40 @@ +class UsersController < AuthenticatedController + def two_factor + @tfa_service = TwoFactorService.new(current_user) + @tfa_service.issue_otp_secret + @otp_provisioning_uri = @tfa_service.generate_otp_provisioning_uri + end + + def update_two_factor + @tfa_service = TwoFactorService.new(current_user) + + valid = + if enabling_otp? + @tfa_service.enable_otp( + two_factor_params[:otp_secret], + two_factor_params[:otp_attempt], + two_factor_params[:current_password] + ) + else + @tfa_service.disable_otp(two_factor_params[:current_password]) + end + + if valid + verb = @tfa_service.user.otp_required_for_login ? 'enabled' : 'disabled' + redirect_to root_path, notice: "Two-factor authentication #{ verb }" + else + @otp_provisioning_uri = @tfa_service.generate_otp_provisioning_uri + render :two_factor + end + end + + private + + def enabling_otp? + two_factor_params[:otp_required_for_login] == '1' + end + + def two_factor_params + params.require(:user).permit(:otp_required_for_login, :otp_secret, :otp_attempt, :current_password) + end +end diff --git a/app/views/shared/_two_factor_fields.html.erb b/app/views/shared/_two_factor_fields.html.erb new file mode 100644 index 0000000..c840302 --- /dev/null +++ b/app/views/shared/_two_factor_fields.html.erb @@ -0,0 +1,51 @@ +

    diff --git a/app/views/users/two_factor.html.erb b/app/views/users/two_factor.html.erb new file mode 100644 index 0000000..5758e0f --- /dev/null +++ b/app/views/users/two_factor.html.erb @@ -0,0 +1,9 @@ +

    Enable Two Factor

    + +<%= simple_form_for(@tfa_service.user, url: update_two_factor_user_path) do |f| %> + <% render partial: 'shared/two_factor_fields', locals: { + f: f, + resource: @tfa_service.user, + otp_provisioning_uri: @otp_provisioning_uri + } %> +<% end %> diff --git a/config/routes.rb b/config/routes.rb index dbd6398..5737b3f 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -11,6 +11,11 @@ get '/', to: 'pages#home', as: 'root' + resource :user, only: [] do + get 'two_factor' + patch 'update_two_factor' + end + resources :secrets, only: [:show, :new, :create, :edit, :update] resources :decrypted_secrets, only: :create From 0877fa9fabcdd7cccf05c67e961bc47015c69872 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Wed, 3 Jul 2019 08:47:46 +0800 Subject: [PATCH 085/152] Adds 2FA fields toggling --- README.md | 1 - app/assets/javascripts/application.js | 1 + .../javascripts/components/secret-item.js | 2 +- .../components/two-factor-fields.js | 34 ++++++++ app/views/shared/_two_factor_fields.html.erb | 79 +++++++++---------- 5 files changed, 75 insertions(+), 42 deletions(-) create mode 100644 app/assets/javascripts/components/two-factor-fields.js diff --git a/README.md b/README.md index f592457..0ee136c 100644 --- a/README.md +++ b/README.md @@ -145,4 +145,3 @@ Some helpful commands: heroku restart -a rei-secretlink-production heroku logs --tail -a rei-secretlink-production - diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index 8c5648c..f433023 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -19,3 +19,4 @@ // Components //= require components/secret-item +//= require components/two-factor-fields diff --git a/app/assets/javascripts/components/secret-item.js b/app/assets/javascripts/components/secret-item.js index 6bbb5d7..d40069b 100644 --- a/app/assets/javascripts/components/secret-item.js +++ b/app/assets/javascripts/components/secret-item.js @@ -1,4 +1,4 @@ -$(document).ready(function() { +$(function() { function SecretItem(rootDom) { this.$root = $(rootDom); this.$notes = this.$root.find('.notes'); diff --git a/app/assets/javascripts/components/two-factor-fields.js b/app/assets/javascripts/components/two-factor-fields.js new file mode 100644 index 0000000..3f48e4b --- /dev/null +++ b/app/assets/javascripts/components/two-factor-fields.js @@ -0,0 +1,34 @@ +$(function () { + function TwoFactorFields(rootDom) { + this.$root = $(rootDom); + this.$otpRequiredCheckbox = this.$root.find('.otp-required-for-login'); + this.$enableOtpFields = this.$root.find('.enable-otp-fields'); + this.$enableBtn = this.$root.find('.btn-enable-2fa'); + this.$disableBtn = this.$root.find('.btn-disable-2fa'); + this.init(); + } + + TwoFactorFields.prototype.init = function () { + this.toggleEnableState(this.isOtpRequired()); + + this.$otpRequiredCheckbox.change(function() { + this.toggleEnableState(this.isOtpRequired()); + }.bind(this)); + } + + TwoFactorFields.prototype.isOtpRequired = function () { + return this.$otpRequiredCheckbox.is(':checked'); + } + + TwoFactorFields.prototype.toggleEnableState = function (visible) { + this.$enableBtn.toggle(visible); + this.$enableOtpFields.toggle(visible); + this.$disableBtn.toggle(!visible); + } + + //Intialization code + const $hooks = $(this).find(".two-factor-fields"); + $hooks.each(function () { + new TwoFactorFields(this) + }) +}); diff --git a/app/views/shared/_two_factor_fields.html.erb b/app/views/shared/_two_factor_fields.html.erb index c840302..9950fd7 100644 --- a/app/views/shared/_two_factor_fields.html.erb +++ b/app/views/shared/_two_factor_fields.html.erb @@ -1,51 +1,50 @@
    -

    Confirm Identity

    - <%= f.input :current_password, autocomplete: "off" %> - - <% if otp_provisioning_uri %> -

    Two-Factor Authentication

    - - <%= f.hidden_field(:otp_secret) %> - <%= f.input :otp_required_for_login, label: 'Enable two factor authentication', input_html: { class: 'otp_required_for_login' } %> - -
    - <% if resource.otp_required_for_login %> - <%# User is already enrolled for 2fa. %> -

    - Use the form below to connect a new device (this will disconnect your previous device). -

    - <% else %> - <%# User is not enrolled for 2fa; show them how to get set up %> - - <% end %> +

    Two-Factor Authentication

    + <%= f.hidden_field(:otp_secret) %> + <%= f.input :otp_required_for_login, label: 'Enable two factor authentication', input_html: { class: 'otp-required-for-login' } %> +
    + <% if resource.otp_required_for_login %> + <%# User is already enrolled for 2fa. %> +

    + Use the form below to connect a new device (this will disconnect your previous device). +

    + <% else %> + <%# User is not enrolled for 2fa; show them how to get set up %>
    + <% end %> - <%= f.input :otp_attempt, label: 'Enter the 6 digit code from two-factor app', value: '', autocomplete: 'off' %> +
    + +
    + +
    - <%= f.button :submit, name: :two_factor, value: resource.otp_required_for_login ? 'Update' : 'Enable', class: 'btn-enable-2fa' %> - <%= f.button :submit, name: :two_factor, value: 'Disable', class: 'btn-disable-2fa' %> - <% end %> + + <%= f.input :otp_attempt, label: 'Enter the 6 digit code from two-factor app', value: '', autocomplete: 'off' %> +
    + + +

    Confirm Identity

    + <%= f.input :current_password, autocomplete: "off" %> + + <%= f.button :submit, name: :two_factor, value: resource.otp_required_for_login ? 'Update' : 'Enable', class: 'btn-enable-2fa' %> + <%= f.button :submit, name: :two_factor, value: 'Disable', class: 'btn-disable-2fa' %>
    From 3f86e59e75b564e2801770eb947deeb8b86746fd Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Wed, 3 Jul 2019 09:44:15 +0800 Subject: [PATCH 086/152] Styles two-factor form / fields --- app/assets/stylesheets/application.sass | 1 + .../components/two-factor-fields.sass | 11 ++++ app/views/shared/_two_factor_fields.html.erb | 63 +++++++++---------- app/views/users/two_factor.html.erb | 22 ++++--- 4 files changed, 57 insertions(+), 40 deletions(-) diff --git a/app/assets/stylesheets/application.sass b/app/assets/stylesheets/application.sass index 5610722..6c69e8b 100644 --- a/app/assets/stylesheets/application.sass +++ b/app/assets/stylesheets/application.sass @@ -17,6 +17,7 @@ // Components @import "components/devise-form" @import "components/secret-item" +@import "components/two-factor-fields" body min-height: 100vh diff --git a/app/assets/stylesheets/components/two-factor-fields.sass b/app/assets/stylesheets/components/two-factor-fields.sass index 7038b0d..84e9f63 100644 --- a/app/assets/stylesheets/components/two-factor-fields.sass +++ b/app/assets/stylesheets/components/two-factor-fields.sass @@ -1 +1,12 @@ .two-factor-fields + margin: 20px 0 + .otp-step + margin: 20px 0 + .qrcode + display: block + width: 250px + height: 250px + border: 20px solid white + .instructions + padding: 20px + background-color: #F2F2F2 diff --git a/app/views/shared/_two_factor_fields.html.erb b/app/views/shared/_two_factor_fields.html.erb index 9950fd7..0401b92 100644 --- a/app/views/shared/_two_factor_fields.html.erb +++ b/app/views/shared/_two_factor_fields.html.erb @@ -1,20 +1,17 @@
    -

    Two-Factor Authentication

    - <%= f.hidden_field(:otp_secret) %> - <%= f.input :otp_required_for_login, label: 'Enable two factor authentication', input_html: { class: 'otp-required-for-login' } %> +
    + <%= f.hidden_field(:otp_secret) %> + <%= f.input :otp_required_for_login, label: 'Enable two factor authentication', input_html: { class: 'otp-required-for-login' } %> +
    - <% if resource.otp_required_for_login %> - <%# User is already enrolled for 2fa. %> -

    - Use the form below to connect a new device (this will disconnect your previous device). -

    - <% else %> - <%# User is not enrolled for 2fa; show them how to get set up %> -
    - +
    + <% if resource.otp_required_for_login %> + <%# User is already enrolled for 2fa. %> +

    Use the form below to connect a new device (this will disconnect your previous device).

    + <% else %> + <%# User is not enrolled for 2fa; show them how to get set up %> +

    Install a two-factor app, such as Google Authenticator, on your smartphone.

    -
    - <% end %> + <% end %> +
    -
    - -
    - -
    +
    + +
    - <%= f.input :otp_attempt, label: 'Enter the 6 digit code from two-factor app', value: '', autocomplete: 'off' %> +
    + + <%= f.input :otp_attempt, label: false, value: '', autocomplete: 'off' %> +
    +
    + + <%= f.input :current_password, label: false, autocomplete: "off" %> +
    -

    Confirm Identity

    - <%= f.input :current_password, autocomplete: "off" %> - - <%= f.button :submit, name: :two_factor, value: resource.otp_required_for_login ? 'Update' : 'Enable', class: 'btn-enable-2fa' %> - <%= f.button :submit, name: :two_factor, value: 'Disable', class: 'btn-disable-2fa' %> +
    + <%= f.button :submit, name: :two_factor, value: resource.otp_required_for_login ? 'Update' : 'Enable', class: 'btn-enable-2fa' %> + <%= f.button :submit, name: :two_factor, value: 'Disable', class: 'btn-disable-2fa' %> +
    diff --git a/app/views/users/two_factor.html.erb b/app/views/users/two_factor.html.erb index 5758e0f..8b84c8d 100644 --- a/app/views/users/two_factor.html.erb +++ b/app/views/users/two_factor.html.erb @@ -1,9 +1,15 @@ -

    Enable Two Factor

    +
    +
    +
    +

    Two Factor Authentication

    -<%= simple_form_for(@tfa_service.user, url: update_two_factor_user_path) do |f| %> - <% render partial: 'shared/two_factor_fields', locals: { - f: f, - resource: @tfa_service.user, - otp_provisioning_uri: @otp_provisioning_uri - } %> -<% end %> + <%= simple_form_for(@tfa_service.user, url: update_two_factor_user_path) do |f| %> + <% render partial: 'shared/two_factor_fields', locals: { + f: f, + resource: @tfa_service.user, + otp_provisioning_uri: @otp_provisioning_uri + } %> + <% end %> +
    +
    +
    From 79c1dba3a5da6e5b798e26677a4fab77503c7c42 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Wed, 3 Jul 2019 12:38:59 +0800 Subject: [PATCH 087/152] Adds navigation to two-factor page Adds store icons --- app/assets/images/apple-app-store.png | Bin 0 -> 8859 bytes app/assets/images/google-play-store.png | Bin 0 -> 11164 bytes .../components/two-factor-fields.sass | 3 +++ app/assets/stylesheets/header-and-footer.sass | 5 +++++ app/views/shared/_header.html.erb | 11 ++++++++++- app/views/shared/_two_factor_fields.html.erb | 4 ++-- 6 files changed, 20 insertions(+), 3 deletions(-) create mode 100644 app/assets/images/apple-app-store.png create mode 100644 app/assets/images/google-play-store.png diff --git a/app/assets/images/apple-app-store.png b/app/assets/images/apple-app-store.png new file mode 100644 index 0000000000000000000000000000000000000000..77a11d31dc3f1d34aa5557073b20b974961a9270 GIT binary patch literal 8859 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

    g{;&B1rpZ{?IdqsF+jOk-v(U(y&;1UC4z7? z8{)4?9G;mv8S~hQ*w&twe2z%@JefRL4=w5O*pQj9-w5aq7+-@XS3_3~>ZGTvX*q36K!-kHpE7+lI>(E2hYtoUS!YsqY3o0N+9&kx3j6{&IANx$D@rYaURP zr=3|D6g*F^t$Es4-g*zGENz7N1Ltqru7vp$o)hF9LDZ>>|Y9CV0c&q@Bg zefaF{U2&=9dmAurf*u_!gb^6M(?LKIjys>!%B4?gBWN?9GykmY*wc z?CA@yxO&|-uXYqYxnS2(Cc7IE)ps{Ezzt1|51>!INsNN@LX!g@0n7d#F$5gTYkCnb zy9I_0g8uGahA9+zX>B0wD=rTi3CV^)KAr!@w=&{|6*B6@6?KLSh4>(~cb>i{ziWoP zGdRm6#kp zAc6k0%{8~3h3txwdFiLfV`XQ_)7e9%sM1mXG{l4JIw zK^l-Ap1U3Tjam!C8QqeVRU_Ob=qyAxR}#%oT3XQOP)YXyoPEq5m!ZV8k%yz3pg2u| z>5ablchAm_*b}lYewdUhvJ71VV=QPY^FuKK3DG>~f40=0<4~*}wwEdKry!6N$(E*S+oS+gi98m)MBZ94Z z875=xeH!XK9X~;5v_Y_ZXz*;PVFa)18yI*}o#6u-JR7}IKvD^bZ4C%9f!{oKB)43$ zUi(_w9Hw&4Y4m!{4}kgw2Oykd>r*r3p7FQJQ>R`l`xC=^d-0x*g^2JsAk#AgUQD6_ zY{pfCl(v{Jupx-!%^LwkTMdVx|A11DW9nc;XBuXkrWNDWHTzZQZ?JNVI=t`mZ8c6U z{3u_SQSp+{zKfAhy%5OG=e*@Iof+~*dNpTWl+4jjx`s92BbJE7~Pf|eP# zDZOaoxAAiT*hg0nQuj+&ZGr&D{8YHzF*+Tg<~`KpKl&Um>pvlymfo(f!M&PF=U{rJ z9vJE|+LKYO1kYb%xa38zM3-(V2}x8!((k}c1UiOgPrt0cI({qkGunYFlB8kAPyEl6 z-YWQwNo7n0uKRj^e@CI0nU0gLWRS?XS5`+npJ~`8XXYt0AH%5~6QpDIQ=I_Xwd1o; zd#p02TzbATU)mQJzzqSxQc?vgW2IWhNG0@%SQtcw?E{I)GJU`#S)A_OCn4fZdn`am zV$Xa##?WpTVCER$c$;H9_V~>3LtAt_8Z1AsfiM%&jKq(CT4Rp)Rsv`qnY$xs1}65h zw_q4SaZoGSsKK5Ila|g2FcwZ%R8Z~(a534&X9x|BM2y0_4?r_C;3mx>2V*VhAVtZ7 zehv(!W}XKIE77#bxDCI=5Z$LH_o{Om&3KeNf`x@MH9wQQn8Y9>j@kJ^GarT4Z*+x^ z#}gBKs_<*GynFiyq)zHr{%ih@ut8VmdDAY+s!7yBv74^e1W~?IT2r>5QS;pl0RYi0 zobQrS<(;2?CvN32>wWRUzRHc9QJQm%Kr>ou7}KGZkc=had!^F4E2OJl05Gu5T4+kp;Ci$SoY5g2>muO?5m%S?-s(K0AkFA@U+HWZF|NU^u65K7hdi17%1+ ziy|o0_$i=sWh0{_Qu)C$={ju@Kp`KXP=y7#8LF9Cp$ZX|1PH7F2#4cZ$%p;Ukk5OL zluG5%bS#f}Z0GXB;Fx|AdL%YveosEw!vuh3%tDcu8ONx_@1mrGV_cwdlDQILI z>odZULl=IqG;Pui?bJM@bZS ze!3N%MqTAAzoVN*rUCpr9pw~7SM;~mA4FL6!I~6%Y?#cwz*KLK&f96;O3>}MF7K}r z$WR$cb2(UfOms}Z&@Q1$&g)NLaDYHb32XxRt%5&@2mvZTST1QVEtb@xe2iHL07n9A z0)!(qa4_>#<}mpv>vTCB+wj3D`d;e0rsD~FS!#h9s!fz<4?+=~QWksLU4>@0`Bg{m`6n72b&Tj&Pf6W>i zKJ^Huq@aFi4hPm{ITh0JrKQrY7-LtW2YeGCW8kQ>kon6p`pb;|r%Mio4^5T$A<~+_ zr6mzPH6KNimI+9$Po*X;1{81I4prpI`*79$9flP;4U8afgGUsr|$ik0xldV=-Z?smS$fn+;rMJ9cQ7-*mc8jfI6GT zFj1O!*Py^qeyB&8;3KV!5$9btFK0)U89W0A`WJ#3@jWln;ZZ{i>6sUsX(NB)qgv+7%*$ zbU>$23D2ixJ+ow9-+@vV>(2qk?}OO#4Z{JZFxSLkL?riLT~@F8vC`5&Gv9v0A3-0t zYyTYJ@QhKg9LCeS!?ge8G3Od-ENT#7D9eXW!b_VZxd0xGxKrq=WLKBhBDO!tC^Mq_6wwAiJfq2uz$&c-;BfjA^-54oN3^t-GH(i4N6#-d(bP^}{ zQSIdo4j7TdIZ90g&o)NU#4&91zvk~WirUSV%mIcRGiHPVQ&fJrGg329jEP_AI?O<= z9j?sMEtz-C@!4npXo!ld!M%U1fnh0rjASsz*>Gc}WxN2M7d=f@CIX3ksSmC&zjM@>B+h za={-IFhKG69Db;rW7J5qXRu^BU^&n-IKT{8S0gQbfc60o^0makeRuK?l}*ejWXW>C za-d~!fcYYH0$V)sBYf&Qq5+hUYq3uaG#;I|O4pel!-9hUVAfx>s`&5lfZ>mIEgz2bd4^8O)Xy00pL(zFI$N9f^TEAvFxf zY8e(4^+Yq&lM8kth$DP1eV%K{a=>z+d2oPvKkpykU8l37!ts`Xu2DU}QNX~x0EbMh zXu?dzf|+!xU36w)3M`ek4(X~IDkmPUVaam9a-e}YKwpzYm>ZaGN3b1}Fs85qNIs z00>$u?#6N+mJV2$`O)+FC~L`bz;fXDbAb8-E;K4E!SV*c;6<#%QoS2CfP&`^#A4&D u!?M^Ov>Z4g9H8!ivGSV$1QmYo;Qs+Utn-L%VLkK!0000<%= link_to "FAQ", home_path(anchor: "homepage-faq") %>

  • <%= link_to "About", home_path(anchor: "homepage-about") %>
  • <% if user_signed_in? %> -
  • <%= link_to('Logout', destroy_user_session_path, method: :delete) %>
  • + <% else %>
  • <%= link_to('Login', new_user_session_path) %>
  • <% end %> diff --git a/app/views/shared/_two_factor_fields.html.erb b/app/views/shared/_two_factor_fields.html.erb index 0401b92..ba36e19 100644 --- a/app/views/shared/_two_factor_fields.html.erb +++ b/app/views/shared/_two_factor_fields.html.erb @@ -14,10 +14,10 @@

    Install a two-factor app, such as Google Authenticator, on your smartphone.

    <% end %> From 17a34bfe38f7ef6c26d5f2b790d5ff7dc4e7dfd1 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Wed, 3 Jul 2019 13:09:15 +0800 Subject: [PATCH 088/152] Fixes autocomplete off --- app/services/two_factor_service.rb | 19 ++++++++++--------- app/views/shared/_two_factor_fields.html.erb | 2 +- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/app/services/two_factor_service.rb b/app/services/two_factor_service.rb index 8661355..5495d34 100644 --- a/app/services/two_factor_service.rb +++ b/app/services/two_factor_service.rb @@ -22,15 +22,16 @@ def enable_otp(otp_secret, otp_attempt, current_password) otp_valid = user.validate_and_consume_otp!(otp_attempt, otp_secret: otp_secret) password_valid = user.valid_password?(current_password) - result = if otp_valid && password_valid - user.update_attributes(otp_secret: otp_secret, otp_required_for_login: true) - else - user.assign_attributes(otp_secret: otp_secret) - user.valid? - user.errors.add(:otp_attempt, otp_attempt.blank? ? :blank : :invalid) if !otp_valid - user.errors.add(:current_password, current_password.blank? ? :blank : :invalid) if !password_valid - false - end + result = + if otp_valid && password_valid + user.update_attributes(otp_secret: otp_secret, otp_required_for_login: true) + else + user.assign_attributes(otp_secret: otp_secret) + user.valid? + user.errors.add(:otp_attempt, otp_attempt.blank? ? :blank : :invalid) if !otp_valid + user.errors.add(:current_password, current_password.blank? ? :blank : :invalid) if !password_valid + false + end user.clean_up_passwords result diff --git a/app/views/shared/_two_factor_fields.html.erb b/app/views/shared/_two_factor_fields.html.erb index ba36e19..4049316 100644 --- a/app/views/shared/_two_factor_fields.html.erb +++ b/app/views/shared/_two_factor_fields.html.erb @@ -39,7 +39,7 @@
    - <%= f.input :current_password, label: false, autocomplete: "off" %> + <%= f.input :current_password, label: false, input_html: { autocomplete: "off" } %>
    From 84142104920b1152bc8478078c58d17824dd7235 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Wed, 3 Jul 2019 14:45:47 +0800 Subject: [PATCH 089/152] Improves user feedback when authentication error happens --- app/controllers/users_controller.rb | 8 +++++++- app/services/two_factor_service.rb | 12 ++++++++---- config/locales/en.yml | 4 ++++ 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index cfc6f70..fe2309f 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -21,8 +21,14 @@ def update_two_factor if valid verb = @tfa_service.user.otp_required_for_login ? 'enabled' : 'disabled' - redirect_to root_path, notice: "Two-factor authentication #{ verb }" + redirect_to root_path, notice: t('two_factor.enable_success', verb: verb) else + if @tfa_service.otp_attempt_error? + flash[:error] = t('two_factor.enable_failed') + else + flash[:error] = t('two_factor.enable_failed_with_otp_consumed') + end + @otp_provisioning_uri = @tfa_service.generate_otp_provisioning_uri render :two_factor end diff --git a/app/services/two_factor_service.rb b/app/services/two_factor_service.rb index 5495d34..fa9e5c0 100644 --- a/app/services/two_factor_service.rb +++ b/app/services/two_factor_service.rb @@ -18,15 +18,15 @@ def generate_otp_provisioning_uri # Update model with params only if otp_attempt and current_password are correct def enable_otp(otp_secret, otp_attempt, current_password) - user.otp_required_for_login = true - otp_valid = user.validate_and_consume_otp!(otp_attempt, otp_secret: otp_secret) + user.assign_attributes(otp_secret: otp_secret, otp_required_for_login: true) + password_valid = user.valid_password?(current_password) + otp_valid = user.validate_and_consume_otp!(otp_attempt, otp_secret: otp_secret) result = if otp_valid && password_valid - user.update_attributes(otp_secret: otp_secret, otp_required_for_login: true) + user.save! # Intentionally raising error here. This should not happen else - user.assign_attributes(otp_secret: otp_secret) user.valid? user.errors.add(:otp_attempt, otp_attempt.blank? ? :blank : :invalid) if !otp_valid user.errors.add(:current_password, current_password.blank? ? :blank : :invalid) if !password_valid @@ -37,6 +37,10 @@ def enable_otp(otp_secret, otp_attempt, current_password) result end + def otp_attempt_error? + user.errors[:otp_attempt].any? + end + def disable_otp(current_password) user.update_with_password(current_password: current_password, otp_required_for_login: false) end diff --git a/config/locales/en.yml b/config/locales/en.yml index 3b3ebf7..6fde674 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -29,3 +29,7 @@ en: date: formats: dashboard_time: "%m/%d/%y, %l.%M%P" + two_factor: + enable_success: 'Two-factor authentication %{verb}' + enable_failed: 'Failed to enable two-factor authentication. Please see errors below.' + enable_failed_with_otp_consumed: 'Failed to enable two-factor authentication. Please retry with a new code.' From 2b8f510115b1cd7e10bd87f1b38665419a6d74b7 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Wed, 3 Jul 2019 14:57:40 +0800 Subject: [PATCH 090/152] Adds otp_attempt to log filter --- config/initializers/filter_parameter_logging.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/initializers/filter_parameter_logging.rb b/config/initializers/filter_parameter_logging.rb index 4a994e1..edc6623 100644 --- a/config/initializers/filter_parameter_logging.rb +++ b/config/initializers/filter_parameter_logging.rb @@ -1,4 +1,4 @@ # Be sure to restart your server when you modify this file. # Configure sensitive parameters which will be filtered from the log file. -Rails.application.config.filter_parameters += [:password] +Rails.application.config.filter_parameters += [:password, :otp_attempt] From 4fa690b18769cd33fd06c0451fe0770232c27387 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Wed, 3 Jul 2019 15:13:15 +0800 Subject: [PATCH 091/152] Enables logging in with OTP --- app/controllers/application_controller.rb | 6 ++++++ app/views/devise/sessions/new.html.erb | 1 + 2 files changed, 7 insertions(+) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index f0e9d07..1649d56 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -1,4 +1,6 @@ class ApplicationController < ActionController::Base + before_action :configure_permitted_parameters, if: :devise_controller? + protect_from_forgery with: :exception layout :layout_by_resource @@ -19,4 +21,8 @@ def layout_by_resource "application" end end + + def configure_permitted_parameters + devise_parameter_sanitizer.permit(:sign_in, keys: [:otp_attempt]) + end end diff --git a/app/views/devise/sessions/new.html.erb b/app/views/devise/sessions/new.html.erb index fe774c1..48564d1 100644 --- a/app/views/devise/sessions/new.html.erb +++ b/app/views/devise/sessions/new.html.erb @@ -6,6 +6,7 @@
    <%= f.input :email, required: false, autofocus: true %> <%= f.input :password, required: false %> + <%= f.input :otp_attempt, required: false, label: "One Time Password" %> <%= f.input :remember_me, as: :boolean if devise_mapping.rememberable? %>
    From 199ea4d80ac1eb0ff36a300892c12dc4de3cc4dc Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Wed, 3 Jul 2019 15:22:37 +0800 Subject: [PATCH 092/152] Allows user to login with 2FA --- app/views/devise/sessions/new.html.erb | 2 +- app/views/shared/_header.html.erb | 2 +- app/views/users/two_factor.html.erb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/views/devise/sessions/new.html.erb b/app/views/devise/sessions/new.html.erb index 48564d1..5868952 100644 --- a/app/views/devise/sessions/new.html.erb +++ b/app/views/devise/sessions/new.html.erb @@ -6,7 +6,7 @@
    <%= f.input :email, required: false, autofocus: true %> <%= f.input :password, required: false %> - <%= f.input :otp_attempt, required: false, label: "One Time Password" %> + <%= f.input :otp_attempt, required: false, label: "2FA (for configured accounts)" %> <%= f.input :remember_me, as: :boolean if devise_mapping.rememberable? %>
    diff --git a/app/views/shared/_header.html.erb b/app/views/shared/_header.html.erb index c0d2ba1..bf976e0 100644 --- a/app/views/shared/_header.html.erb +++ b/app/views/shared/_header.html.erb @@ -10,7 +10,7 @@ Account diff --git a/app/views/users/two_factor.html.erb b/app/views/users/two_factor.html.erb index 8b84c8d..9d77153 100644 --- a/app/views/users/two_factor.html.erb +++ b/app/views/users/two_factor.html.erb @@ -1,7 +1,7 @@
    -

    Two Factor Authentication

    +

    Two Factor Auth (2FA)

    <%= simple_form_for(@tfa_service.user, url: update_two_factor_user_path) do |f| %> <% render partial: 'shared/two_factor_fields', locals: { From 9f337ac88e5c7939482936fa5ee6c959e20f2cf4 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Wed, 3 Jul 2019 17:23:51 +0800 Subject: [PATCH 093/152] Adds TwoFactorService tests TwoFactorService adjustments --- app/services/two_factor_service.rb | 30 +++--- spec/services/two_factor_service_spec.rb | 114 +++++++++++++++++++++++ 2 files changed, 131 insertions(+), 13 deletions(-) create mode 100644 spec/services/two_factor_service_spec.rb diff --git a/app/services/two_factor_service.rb b/app/services/two_factor_service.rb index fa9e5c0..f7d8f19 100644 --- a/app/services/two_factor_service.rb +++ b/app/services/two_factor_service.rb @@ -6,7 +6,9 @@ def initialize(user) end def issue_otp_secret - user.otp_secret = User.generate_otp_secret + secret = User.generate_otp_secret + user.otp_secret = secret + secret end def generate_otp_provisioning_uri @@ -20,16 +22,11 @@ def generate_otp_provisioning_uri def enable_otp(otp_secret, otp_attempt, current_password) user.assign_attributes(otp_secret: otp_secret, otp_required_for_login: true) - password_valid = user.valid_password?(current_password) - otp_valid = user.validate_and_consume_otp!(otp_attempt, otp_secret: otp_secret) - result = - if otp_valid && password_valid - user.save! # Intentionally raising error here. This should not happen + if user.valid_password?(current_password) + validate_and_consume_otp(otp_attempt, otp_secret) else - user.valid? - user.errors.add(:otp_attempt, otp_attempt.blank? ? :blank : :invalid) if !otp_valid - user.errors.add(:current_password, current_password.blank? ? :blank : :invalid) if !password_valid + user.errors.add(:current_password, current_password.blank? ? :blank : :invalid) false end @@ -37,11 +34,18 @@ def enable_otp(otp_secret, otp_attempt, current_password) result end - def otp_attempt_error? - user.errors[:otp_attempt].any? - end - def disable_otp(current_password) user.update_with_password(current_password: current_password, otp_required_for_login: false) end + + private + + def validate_and_consume_otp(otp_attempt, otp_secret) + if user.validate_and_consume_otp!(otp_attempt, otp_secret: otp_secret) + true + else + user.errors.add(:otp_attempt, otp_attempt.blank? ? :blank : :invalid) + false + end + end end diff --git a/spec/services/two_factor_service_spec.rb b/spec/services/two_factor_service_spec.rb new file mode 100644 index 0000000..abe13f7 --- /dev/null +++ b/spec/services/two_factor_service_spec.rb @@ -0,0 +1,114 @@ +require 'rails_helper' + +describe TwoFactorService do + let(:user) { create :user } + let(:tfa) { TwoFactorService.new(user) } + + describe '#issue_otp_secret' do + it 'sets the users otp_secret' do + expect(tfa.user.otp_secret).to be_nil + + tfa.issue_otp_secret + expect(tfa.user.otp_secret).to_not be_nil + end + end + + describe '#generate_otp_provisioning_uri' do + it 'returns a qrcode source' do + source = 'otpauth://totp/Secret%20Link:user@secretlink.org?issuer=Secret+Link' + expect(tfa.generate_otp_provisioning_uri).to eq source + end + end + + describe '#enable_otp' do + let!(:otp_secret) { tfa.issue_otp_secret } + + context 'successful' do + it 'returns true' do + result = tfa.enable_otp(otp_secret, tfa.user.current_otp, 'password') + expect(result).to be true + end + + it 'sets otp_secret and otp_required_for_login' do + tfa.enable_otp(otp_secret, tfa.user.current_otp, 'password') + + user.reload + expect(user.otp_secret).to eq otp_secret + expect(user.otp_required_for_login).to be true + expect(user.changed?).to be false + end + end + + context 'wrong password' do + let!(:result) { tfa.enable_otp(otp_secret, tfa.user.current_otp, 'wrong password') } + + it 'returns false' do + expect(result).to be false + end + + it 'adds current password error' do + expect(tfa.user.errors.added?(:current_password, :invalid)).to be true + end + + it 'does not update the user' do + user.reload + expect(user.otp_secret).to be nil + expect(user.otp_required_for_login).to be nil + expect(tfa.user.changed?).to be true + end + end + + context 'wrong otp secret' do + let!(:result) { tfa.enable_otp(otp_secret, 'wrong otp_secret', 'password') } + + it 'returns false' do + expect(result).to be false + end + + it 'adds otp_attempt error' do + expect(tfa.user.errors.added?(:otp_attempt, :invalid)).to be true + end + + it 'does not update the user' do + user.reload + expect(user.otp_secret).to be nil + expect(user.otp_required_for_login).to be nil + expect(tfa.user.changed?).to be true + end + end + end + + describe '#disable_otp' do + let!(:otp_secret) { tfa.issue_otp_secret } + + context 'successful' do + before do + tfa.enable_otp(otp_secret, tfa.user.current_otp, 'password') + end + + it 'returns true' do + expect(tfa.disable_otp("password")).to eq true + end + + it 'sets otp_required_for_login to false' do + tfa.disable_otp("password") + expect(user.reload.otp_required_for_login).to eq false + end + end + + context 'failed' do + before do + tfa.enable_otp(otp_secret, tfa.user.current_otp, 'password') + end + + it 'returns false' do + expect(tfa.disable_otp("wrong password")).to eq false + end + + it 'it does not set otp_required_for_login' do + tfa.disable_otp("wrong password") + expect(user.reload.otp_required_for_login).to eq true + end + end + end +end From c93752ba04e5b8d7386fc1aa2559d6f50dc01182 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Wed, 3 Jul 2019 17:41:12 +0800 Subject: [PATCH 094/152] Flash fixes --- app/controllers/users_controller.rb | 6 +----- config/locales/en.yml | 5 ++--- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index fe2309f..ce6b350 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -23,11 +23,7 @@ def update_two_factor verb = @tfa_service.user.otp_required_for_login ? 'enabled' : 'disabled' redirect_to root_path, notice: t('two_factor.enable_success', verb: verb) else - if @tfa_service.otp_attempt_error? - flash[:error] = t('two_factor.enable_failed') - else - flash[:error] = t('two_factor.enable_failed_with_otp_consumed') - end + flash[:error] = t('two_factor.update_failed') @otp_provisioning_uri = @tfa_service.generate_otp_provisioning_uri render :two_factor diff --git a/config/locales/en.yml b/config/locales/en.yml index 6fde674..d50648d 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -30,6 +30,5 @@ en: formats: dashboard_time: "%m/%d/%y, %l.%M%P" two_factor: - enable_success: 'Two-factor authentication %{verb}' - enable_failed: 'Failed to enable two-factor authentication. Please see errors below.' - enable_failed_with_otp_consumed: 'Failed to enable two-factor authentication. Please retry with a new code.' + enable_success: 'Two-factor authentication %{verb}.' + update_failed: 'Failed to update two-factor authentication. Please see errors below.' From 4cf7a3296979f95669286279b9131a801c05cfd2 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Thu, 4 Jul 2019 10:47:51 +0800 Subject: [PATCH 095/152] Fixes setup for js:true when running on Poltergeist --- spec/support/share_db_connection.rb | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 spec/support/share_db_connection.rb diff --git a/spec/support/share_db_connection.rb b/spec/support/share_db_connection.rb new file mode 100644 index 0000000..e2bac1d --- /dev/null +++ b/spec/support/share_db_connection.rb @@ -0,0 +1,17 @@ +# We're adding this because using login_as with Poltergeist(js enabled) doesn't work +# please see: +# https://github.com/plataformatec/devise/wiki/How-To:-Test-with-Capybara +# https://github.com/railscasts/391-testing-javascript-with-phantomjs/blob/master/checkout-after/spec/support/share_db_connection.rb +# Thanks Ryan Bates! +class ActiveRecord::Base + mattr_accessor :shared_connection + @@shared_connection = nil + + def self.connection + @@shared_connection || retrieve_connection + end +end + +# Forces all threads to share the same connection. This works on +# Capybara because it starts the web server in a thread. +ActiveRecord::Base.shared_connection = ActiveRecord::Base.connection From ddf3d02ce89622be9b5f12a45bb32c7c499db5e7 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Thu, 4 Jul 2019 10:48:25 +0800 Subject: [PATCH 096/152] Adds tests for two-factor auth setup --- app/controllers/users_controller.rb | 2 +- config/locales/en.yml | 2 +- spec/factories/users.rb | 11 +++ spec/features/two_factor_auth_setup_spec.rb | 79 +++++++++++++++++++++ 4 files changed, 92 insertions(+), 2 deletions(-) create mode 100644 spec/features/two_factor_auth_setup_spec.rb diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index ce6b350..ae03298 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -21,7 +21,7 @@ def update_two_factor if valid verb = @tfa_service.user.otp_required_for_login ? 'enabled' : 'disabled' - redirect_to root_path, notice: t('two_factor.enable_success', verb: verb) + redirect_to root_path, notice: t('two_factor.update_success', verb: verb) else flash[:error] = t('two_factor.update_failed') diff --git a/config/locales/en.yml b/config/locales/en.yml index d50648d..66eaa6d 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -30,5 +30,5 @@ en: formats: dashboard_time: "%m/%d/%y, %l.%M%P" two_factor: - enable_success: 'Two-factor authentication %{verb}.' + update_success: 'Two-factor authentication %{verb}.' update_failed: 'Failed to update two-factor authentication. Please see errors below.' diff --git a/spec/factories/users.rb b/spec/factories/users.rb index ea056fe..c285fd7 100644 --- a/spec/factories/users.rb +++ b/spec/factories/users.rb @@ -4,6 +4,7 @@ password { 'password' } password_confirmation { 'password' } confirmed_at { Time.now } + otp_required_for_login { false } trait :unconfirmed do password { nil } @@ -22,5 +23,15 @@ user.update(confirmed_at: Time.current) end end + + trait :with_secret do + after :create do |user| + create_list(:secret, 1, user: user) + end + end + + trait :otp_enabled do + otp_required_for_login { true } + end end end diff --git a/spec/features/two_factor_auth_setup_spec.rb b/spec/features/two_factor_auth_setup_spec.rb new file mode 100644 index 0000000..b2507f8 --- /dev/null +++ b/spec/features/two_factor_auth_setup_spec.rb @@ -0,0 +1,79 @@ +require 'rails_helper' + +describe 'Two Factor Auth Setup', js: true do + describe 'enable' do + let!(:user) { create :user, :with_secret } + + before do + login_as(user) + visit two_factor_user_path + end + + context 'successful' do + it 'enable users two factor authentication' do + expect(page).to_not have_content('Install a two-factor') + + check('Enable two factor authentication') + expect(page).to have_content('Install a two-factor') + fill_in 'user[otp_attempt]', with: user.current_otp + fill_in 'user[current_password]', with: 'password' + click_on 'Enable' + + expect(page).to have_content I18n.t('two_factor.update_success', verb: 'enabled') + expect(user.reload.otp_required_for_login).to be true + end + end + + context 'failed' do + it 'does not enable two factor authentication' do + expect(page).to_not have_content('Install a two-factor') + + check('Enable two factor authentication') + expect(page).to have_content('Install a two-factor') + fill_in 'user[otp_attempt]', with: user.current_otp + fill_in 'user[current_password]', with: 'wrong password' + click_on 'Enable' + + expect(page).to have_content I18n.t('two_factor.update_failed') + expect(user.reload.otp_required_for_login).to be false + end + end + end + + describe 'disable' do + let!(:user) { create :user, :otp_enabled, :with_secret } + + before do + login_as(user) + visit two_factor_user_path + end + + context 'successful' do + it 'disables users two factor authentication' do + expect(page).to have_content('Use the form below to connect a new device') + + uncheck('Enable two factor authentication') + expect(page).to_not have_content('Use the form below to connect a new device') + fill_in 'user[current_password]', with: 'password' + click_on 'Disable' + + expect(page).to have_content I18n.t('two_factor.update_success', verb: 'disabled') + expect(user.reload.otp_required_for_login).to be false + end + end + + context 'failed' do + it 'does not enable users two factor authentication' do + expect(page).to have_content('Use the form below to connect a new device') + + uncheck('Enable two factor authentication') + expect(page).to_not have_content('Use the form below to connect a new device') + fill_in 'user[current_password]', with: 'wrong password' + click_on 'Disable' + + expect(page).to have_content I18n.t('two_factor.update_failed') + expect(user.reload.otp_required_for_login).to be true + end + end + end +end From d6daf8437b78dcc4901782c74b7bbbc2105c0d6b Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Thu, 4 Jul 2019 16:07:54 +0800 Subject: [PATCH 097/152] Adds tests for user session --- config/locales/en.yml | 6 +-- spec/factories/users.rb | 1 + spec/features/user_session_spec.rb | 64 ++++++++++++++++++++++++ spec/services/two_factor_service_spec.rb | 4 +- 4 files changed, 70 insertions(+), 5 deletions(-) create mode 100644 spec/features/user_session_spec.rb diff --git a/config/locales/en.yml b/config/locales/en.yml index 66eaa6d..9b60456 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -26,9 +26,9 @@ en: failed: 'Authentication failed' field_errors: unauthorised: 'is unauthorised' - date: - formats: - dashboard_time: "%m/%d/%y, %l.%M%P" two_factor: update_success: 'Two-factor authentication %{verb}.' update_failed: 'Failed to update two-factor authentication. Please see errors below.' + date: + formats: + dashboard_time: "%m/%d/%y, %l.%M%P" diff --git a/spec/factories/users.rb b/spec/factories/users.rb index c285fd7..8f39544 100644 --- a/spec/factories/users.rb +++ b/spec/factories/users.rb @@ -32,6 +32,7 @@ trait :otp_enabled do otp_required_for_login { true } + otp_secret { User.generate_otp_secret } end end end diff --git a/spec/features/user_session_spec.rb b/spec/features/user_session_spec.rb new file mode 100644 index 0000000..41fd5fb --- /dev/null +++ b/spec/features/user_session_spec.rb @@ -0,0 +1,64 @@ +require 'rails_helper' +describe 'User session' do + describe 'without otp' do + let(:user) { create :user, :with_secret } + + before do + visit new_user_session_path + end + + context 'successful' do + it 'signs in the user' do + fill_in "Email", with: user.email + fill_in "Password", with: user.password + click_on "Log in" + + expect(page).to have_content(I18n.t('devise.sessions.signed_in')) + expect(page).to have_current_path(root_path) + end + end + + context 'failed' do + it 'does not sign in the user' do + fill_in "Email", with: user.email + fill_in "Password", with: "wrong password" + click_on "Log in" + + expect(page).to have_content(I18n.t('devise.failure.invalid', authentication_keys: 'Email')) + expect(page).to have_current_path(new_user_session_path) + end + end + end + + describe 'with otp' do + let(:user) { create :user, :otp_enabled, :with_secret } + + before do + visit new_user_session_path + end + + context 'successful' do + it 'signs in the user' do + fill_in "Email", with: user.email + fill_in "Password", with: user.password + fill_in "user[otp_attempt]", with: user.current_otp + click_on "Log in" + + expect(page).to have_content(I18n.t('devise.sessions.signed_in')) + expect(page).to have_current_path(root_path) + end + end + + context 'failed' do + it 'does not sign in the user' do + fill_in "Email", with: user.email + fill_in "Password", with: user.password + fill_in "user[otp_attempt]", with: 'wrong otp' + click_on "Log in" + + expect(page).to have_content(I18n.t('devise.failure.invalid', authentication_keys: 'Email')) + expect(page).to have_current_path(new_user_session_path) + end + end + end +end diff --git a/spec/services/two_factor_service_spec.rb b/spec/services/two_factor_service_spec.rb index abe13f7..a50344b 100644 --- a/spec/services/two_factor_service_spec.rb +++ b/spec/services/two_factor_service_spec.rb @@ -53,7 +53,7 @@ it 'does not update the user' do user.reload expect(user.otp_secret).to be nil - expect(user.otp_required_for_login).to be nil + expect(user.otp_required_for_login).to be false expect(tfa.user.changed?).to be true end end @@ -72,7 +72,7 @@ it 'does not update the user' do user.reload expect(user.otp_secret).to be nil - expect(user.otp_required_for_login).to be nil + expect(user.otp_required_for_login).to be false expect(tfa.user.changed?).to be true end end From a3f397dd7d878a7d39c3d1f48e5d6767ece195b0 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Thu, 4 Jul 2019 16:33:00 +0800 Subject: [PATCH 098/152] Cleanups to two-factor actions --- ...{users_controller.rb => two_factor_auth_controller.rb} | 8 ++++---- app/views/shared/_header.html.erb | 2 +- .../two_factor.html.erb => two_factor_auth/edit.html.erb} | 2 +- config/routes.rb | 6 +----- spec/features/two_factor_auth_setup_spec.rb | 4 ++-- 5 files changed, 9 insertions(+), 13 deletions(-) rename app/controllers/{users_controller.rb => two_factor_auth_controller.rb} (90%) rename app/views/{users/two_factor.html.erb => two_factor_auth/edit.html.erb} (79%) diff --git a/app/controllers/users_controller.rb b/app/controllers/two_factor_auth_controller.rb similarity index 90% rename from app/controllers/users_controller.rb rename to app/controllers/two_factor_auth_controller.rb index ae03298..4db5cc0 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/two_factor_auth_controller.rb @@ -1,11 +1,11 @@ -class UsersController < AuthenticatedController - def two_factor +class TwoFactorAuthController < AuthenticatedController + def edit @tfa_service = TwoFactorService.new(current_user) @tfa_service.issue_otp_secret @otp_provisioning_uri = @tfa_service.generate_otp_provisioning_uri end - def update_two_factor + def update @tfa_service = TwoFactorService.new(current_user) valid = @@ -26,7 +26,7 @@ def update_two_factor flash[:error] = t('two_factor.update_failed') @otp_provisioning_uri = @tfa_service.generate_otp_provisioning_uri - render :two_factor + render :edit end end diff --git a/app/views/shared/_header.html.erb b/app/views/shared/_header.html.erb index bf976e0..875dad0 100644 --- a/app/views/shared/_header.html.erb +++ b/app/views/shared/_header.html.erb @@ -10,7 +10,7 @@ Account diff --git a/app/views/users/two_factor.html.erb b/app/views/two_factor_auth/edit.html.erb similarity index 79% rename from app/views/users/two_factor.html.erb rename to app/views/two_factor_auth/edit.html.erb index 9d77153..c886284 100644 --- a/app/views/users/two_factor.html.erb +++ b/app/views/two_factor_auth/edit.html.erb @@ -3,7 +3,7 @@

    Two Factor Auth (2FA)

    - <%= simple_form_for(@tfa_service.user, url: update_two_factor_user_path) do |f| %> + <%= simple_form_for(@tfa_service.user, url: two_factor_auth_path) do |f| %> <% render partial: 'shared/two_factor_fields', locals: { f: f, resource: @tfa_service.user, diff --git a/config/routes.rb b/config/routes.rb index 5737b3f..8fde67a 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -11,11 +11,7 @@ get '/', to: 'pages#home', as: 'root' - resource :user, only: [] do - get 'two_factor' - patch 'update_two_factor' - end - + resource :two_factor_auth, only: [:edit, :update], controller: 'two_factor_auth' resources :secrets, only: [:show, :new, :create, :edit, :update] resources :decrypted_secrets, only: :create diff --git a/spec/features/two_factor_auth_setup_spec.rb b/spec/features/two_factor_auth_setup_spec.rb index b2507f8..4e44cf0 100644 --- a/spec/features/two_factor_auth_setup_spec.rb +++ b/spec/features/two_factor_auth_setup_spec.rb @@ -6,7 +6,7 @@ before do login_as(user) - visit two_factor_user_path + visit edit_two_factor_auth_path end context 'successful' do @@ -45,7 +45,7 @@ before do login_as(user) - visit two_factor_user_path + visit edit_two_factor_auth_path end context 'successful' do From a72129513797a9fe596065399153322bf27da26c Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Thu, 4 Jul 2019 16:34:37 +0800 Subject: [PATCH 099/152] Adds 2FA_KEY in .env.example --- .env.example | 1 + 1 file changed, 1 insertion(+) diff --git a/.env.example b/.env.example index 81042d7..256ffca 100644 --- a/.env.example +++ b/.env.example @@ -7,3 +7,4 @@ BASE_URL='http://localhost:3000' TOPSEKRIT_EXPIRY_DAYS='14' RECAPTCHA_SITE_KEY='' RECAPTCHA_SECRET_KEY='' +2FA_KEY='' From 48b075bc365cc5fcaceb74b98379b1d69ecba083 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Fri, 5 Jul 2019 08:14:47 +0800 Subject: [PATCH 100/152] Uses the redirect_uri declared in env for oauth --- config/initializers/omniauth.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/config/initializers/omniauth.rb b/config/initializers/omniauth.rb index a82ff6e..5ca2978 100644 --- a/config/initializers/omniauth.rb +++ b/config/initializers/omniauth.rb @@ -5,6 +5,8 @@ Rails.application.config.middleware.use OmniAuth::Builder do provider :google_oauth2, Rails.configuration.topsekrit_google_oauth_client_id, - Rails.configuration.topsekrit_google_oauth_client_secret + Rails.configuration.topsekrit_google_oauth_client_secret, + { + redirect_uri: Rails.configuration.topsekrit_google_oauth_callback_path + } end - From 613064b57ace1f63ac6b28a47325e576ed321ea6 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Fri, 5 Jul 2019 08:29:11 +0800 Subject: [PATCH 101/152] Uses base_uri instead of full uri --- config/initializers/omniauth.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/config/initializers/omniauth.rb b/config/initializers/omniauth.rb index 5ca2978..b4482df 100644 --- a/config/initializers/omniauth.rb +++ b/config/initializers/omniauth.rb @@ -7,6 +7,7 @@ Rails.configuration.topsekrit_google_oauth_client_id, Rails.configuration.topsekrit_google_oauth_client_secret, { - redirect_uri: Rails.configuration.topsekrit_google_oauth_callback_path + redirect_uri: URI::join(Rails.configuration.topsekrit_base_url, + Rails.configuration.topsekrit_google_oauth_callback_path) } end From b1ba1f573c51a329bd835c606db23070e102becd Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Fri, 5 Jul 2019 10:12:46 +0800 Subject: [PATCH 102/152] Adds dashboard link to account dropdown --- app/views/shared/_header.html.erb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/views/shared/_header.html.erb b/app/views/shared/_header.html.erb index 875dad0..151c519 100644 --- a/app/views/shared/_header.html.erb +++ b/app/views/shared/_header.html.erb @@ -10,6 +10,7 @@ Account
    - - <%= f.input :current_password, label: false, input_html: { autocomplete: "off" } %> + <% if resource.password_set? %> + + <%= f.input :current_password, label: false, input_html: { autocomplete: "off" } %> + <% end %>
    From 62353f9539fc55df90b5da9ffdca6cab7c458fab Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Fri, 5 Jul 2019 17:34:41 +0800 Subject: [PATCH 109/152] Adds user setup service --- app/services/two_factor_service.rb | 5 ++++ app/services/user_setup_service.rb | 46 ++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 app/services/user_setup_service.rb diff --git a/app/services/two_factor_service.rb b/app/services/two_factor_service.rb index f7d8f19..372c934 100644 --- a/app/services/two_factor_service.rb +++ b/app/services/two_factor_service.rb @@ -34,6 +34,10 @@ def enable_otp(otp_secret, otp_attempt, current_password) result end + def enable_otp_without_password(otp_secret, otp_attempt) + validate_and_consume_otp(otp_attempt, otp_secret) + end + def disable_otp(current_password) user.update_with_password(current_password: current_password, otp_required_for_login: false) end @@ -42,6 +46,7 @@ def disable_otp(current_password) def validate_and_consume_otp(otp_attempt, otp_secret) if user.validate_and_consume_otp!(otp_attempt, otp_secret: otp_secret) + user.update_attributes(otp_secret: otp_secret, otp_required_for_login: true) true else user.errors.add(:otp_attempt, otp_attempt.blank? ? :blank : :invalid) diff --git a/app/services/user_setup_service.rb b/app/services/user_setup_service.rb new file mode 100644 index 0000000..a2028e0 --- /dev/null +++ b/app/services/user_setup_service.rb @@ -0,0 +1,46 @@ +class UserSetupService + attr_reader :user, :tfa_service + + def initialize(token, tfa_service_klass) + reset_password_token = Devise.token_generator.digest(self, :reset_password_token, token) + + @user = User.find_or_initialize_with_error_by(:reset_password_token, reset_password_token) + @tfa_service = tfa_service_klass.new(@user) + end + + def run(password_params, tfa_params) + password, confirmation = password_params.values_at :password, :password_confirmation + otp_required, otp_secret, otp_attempt = tfa_params.values_at :otp_required_for_login, :otp_secret, :otp_attempt + + if token_valid? && user_valid?(password, confirmation) + return enable_otp(otp_secret, otp_attempt) if otp_required != "0" + user.save! #This case should not happen + else + false + end + end + + private + + def enable_otp(secret, attempt) + if tfa_service.enable_otp_without_password(secret, attempt) + user.save! # This should never raise an errror + else + false + end + end + + def user_valid?(password, confirmation) + if password.present? + user.assign_attributes(password: password, password_confirmation: confirmation) + user.valid? + else + user.errors.add(:password, :blank) + false + end + end + + def token_valid? + user.persisted? && user.reset_password_period_valid? + end +end From 2ef20732262e465012678beb22819cb6e1b184ab Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Fri, 5 Jul 2019 17:35:27 +0800 Subject: [PATCH 110/152] Integrates setup service with controller --- app/controllers/user_setups_controller.rb | 46 +++++++++++++++++++++-- app/models/user.rb | 5 +++ app/views/user_setups/edit.html.erb | 9 +++-- 3 files changed, 52 insertions(+), 8 deletions(-) diff --git a/app/controllers/user_setups_controller.rb b/app/controllers/user_setups_controller.rb index 581430d..d4e5f89 100644 --- a/app/controllers/user_setups_controller.rb +++ b/app/controllers/user_setups_controller.rb @@ -1,10 +1,48 @@ -class UserSetupsController < AuthenticatedController +class UserSetupsController < ApplicationController def edit - @tfa_service = TwoFactorService.new(current_user) - @tfa_service.issue_otp_secret - @otp_provisioning_uri = @tfa_service.generate_otp_provisioning_uri + @user = User.with_reset_password_token(original_token) + + if @user + @tfa_service = TwoFactorService.new(@user) + @tfa_service.issue_otp_secret + @otp_provisioning_uri = @tfa_service.generate_otp_provisioning_uri + else + redirect_to root_path, notice: t('devise.passwords.no_token') + end end def update + @setup_service = UserSetupService.new( + password_params[:reset_password_token], + TwoFactorService + ) + + if @setup_service.run(password_params, two_factor_params) + @setup_service.user.after_database_authentication + flash[:notice] = t('devise.passwords.updated') + sign_in(@setup_service.user) + + redirect_to dashboard_path + else + @user = @setup_service.user + @tfa_service = @setup_service.tfa_service + @otp_provisioning_uri = @tfa_service.generate_otp_provisioning_uri + + render :edit + end + end + + private + + def password_params + params.require(:user).permit(:password, :password_confirmation, :reset_password_token) + end + + def two_factor_params + params.require(:user).permit(:otp_required_for_login, :otp_secret, :otp_attempt, :password) + end + + def original_token + @original_token ||= params[:reset_password_token] end end diff --git a/app/models/user.rb b/app/models/user.rb index 9fcb7d3..2f4a448 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -26,4 +26,9 @@ def email_authorised? errors.add(:email, I18n.t('field_errors.unauthorised')) end end + + def self.with_reset_password_token(token) + reset_password_token = Devise.token_generator.digest(self, :reset_password_token, token) + to_adapter.find_first(reset_password_token: reset_password_token) + end end diff --git a/app/views/user_setups/edit.html.erb b/app/views/user_setups/edit.html.erb index 10e8331..a2e58f0 100644 --- a/app/views/user_setups/edit.html.erb +++ b/app/views/user_setups/edit.html.erb @@ -1,11 +1,12 @@
    -

    Set your password

    +

    Update your credentials

    - <%= simple_form_for(@tfa_service.user, url: password_path(@tfa_service.user), html: { method: :put }) do |f| %> + <%= simple_form_for(@tfa_service.user, url: user_setup_path(reset_password_token: @original_token), html: { method: :put }) do |f| %> <%= f.error_notification %> - <%= f.input :reset_password_token, as: :hidden %> + <%= f.input :reset_password_token, as: :hidden, input_html: { value: @original_token }%> + <%= f.full_error :reset_password_token %>
    @@ -20,7 +21,7 @@ } %>
    - <%= f.button :submit, "Set my password" %> + <%= f.button :submit, "Update" %>
    <% end %>
    From 96ce602bbcd8efc565ba7a9eaad0b0e4221c643f Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Mon, 8 Jul 2019 09:25:12 +0800 Subject: [PATCH 111/152] Changes confirmation redirect path Improves styles of credentials update page --- .../users/confirmations_controller.rb | 2 +- app/views/user_setups/edit.html.erb | 47 ++++++++++--------- 2 files changed, 27 insertions(+), 22 deletions(-) diff --git a/app/controllers/users/confirmations_controller.rb b/app/controllers/users/confirmations_controller.rb index 46fb9f3..1ee4350 100644 --- a/app/controllers/users/confirmations_controller.rb +++ b/app/controllers/users/confirmations_controller.rb @@ -26,6 +26,6 @@ class Users::ConfirmationsController < Devise::ConfirmationsController # The path used after confirmation. def after_confirmation_path_for(resource_name, resource) token = resource.send(:set_reset_password_token) - edit_password_url(resource, reset_password_token: token) + edit_user_setup_url(resource, reset_password_token: token) end end diff --git a/app/views/user_setups/edit.html.erb b/app/views/user_setups/edit.html.erb index a2e58f0..e447877 100644 --- a/app/views/user_setups/edit.html.erb +++ b/app/views/user_setups/edit.html.erb @@ -1,28 +1,33 @@ -
    -

    Update your credentials

    - -
    - <%= simple_form_for(@tfa_service.user, url: user_setup_path(reset_password_token: @original_token), html: { method: :put }) do |f| %> - <%= f.error_notification %> +
    +
    +
    +

    Update your credentials

    +
    +
    +
    +
    + <%= simple_form_for(@tfa_service.user, url: user_setup_path(reset_password_token: @original_token), html: { method: :put }) do |f| %> + <%= f.error_notification %> - <%= f.input :reset_password_token, as: :hidden, input_html: { value: @original_token }%> + <%= f.input :reset_password_token, as: :hidden, input_html: { value: @original_token }%> - <%= f.full_error :reset_password_token %> + <%= f.full_error :reset_password_token %> -
    - <%= f.input :password, label: "New password", required: true, autofocus: true, hint: ("#{@minimum_password_length} characters minimum" if @minimum_password_length) %> - <%= f.input :password_confirmation, label: "Confirm your new password", required: true %> -
    +
    + <%= f.input :password, label: "New password", required: true, autofocus: true, hint: ("#{@minimum_password_length} characters minimum" if @minimum_password_length) %> + <%= f.input :password_confirmation, label: "Confirm your new password", required: true %> +
    - <%= render partial: 'shared/two_factor_fields', locals: { - f: f, - resource: @tfa_service.user, - otp_provisioning_uri: @otp_provisioning_uri - } %> + <%= render partial: 'shared/two_factor_fields', locals: { + f: f, + resource: @tfa_service.user, + otp_provisioning_uri: @otp_provisioning_uri + } %> -
    - <%= f.button :submit, "Update" %> -
    - <% end %> +
    + <%= f.button :submit, "Update" %> +
    + <% end %> +
    From 37552ecf60297c38f1e351fd430cbc38aa674b83 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Mon, 8 Jul 2019 10:55:24 +0800 Subject: [PATCH 112/152] Fixes two-factor-field's reusability --- .../javascripts/components/two-factor-fields.js | 12 ++---------- app/controllers/user_setups_controller.rb | 9 +++++++-- .../users/confirmations_controller.rb | 2 +- app/services/user_setup_service.rb | 2 +- app/views/shared/_two_factor_fields.html.erb | 12 ------------ app/views/two_factor_auth/edit.html.erb | 11 ++++++++++- app/views/user_setups/edit.html.erb | 16 +++++----------- 7 files changed, 26 insertions(+), 38 deletions(-) diff --git a/app/assets/javascripts/components/two-factor-fields.js b/app/assets/javascripts/components/two-factor-fields.js index 3f48e4b..b6699b0 100644 --- a/app/assets/javascripts/components/two-factor-fields.js +++ b/app/assets/javascripts/components/two-factor-fields.js @@ -3,16 +3,14 @@ $(function () { this.$root = $(rootDom); this.$otpRequiredCheckbox = this.$root.find('.otp-required-for-login'); this.$enableOtpFields = this.$root.find('.enable-otp-fields'); - this.$enableBtn = this.$root.find('.btn-enable-2fa'); - this.$disableBtn = this.$root.find('.btn-disable-2fa'); this.init(); } TwoFactorFields.prototype.init = function () { - this.toggleEnableState(this.isOtpRequired()); + this.$enableOtpFields.toggle(this.isOtpRequired()); this.$otpRequiredCheckbox.change(function() { - this.toggleEnableState(this.isOtpRequired()); + this.$enableOtpFields.toggle(this.isOtpRequired()); }.bind(this)); } @@ -20,12 +18,6 @@ $(function () { return this.$otpRequiredCheckbox.is(':checked'); } - TwoFactorFields.prototype.toggleEnableState = function (visible) { - this.$enableBtn.toggle(visible); - this.$enableOtpFields.toggle(visible); - this.$disableBtn.toggle(!visible); - } - //Intialization code const $hooks = $(this).find(".two-factor-fields"); $hooks.each(function () { diff --git a/app/controllers/user_setups_controller.rb b/app/controllers/user_setups_controller.rb index d4e5f89..22b037b 100644 --- a/app/controllers/user_setups_controller.rb +++ b/app/controllers/user_setups_controller.rb @@ -1,6 +1,8 @@ class UserSetupsController < ApplicationController + before_action :set_original_token + def edit - @user = User.with_reset_password_token(original_token) + @user = User.with_reset_password_token(@original_token) if @user @tfa_service = TwoFactorService.new(@user) @@ -25,7 +27,10 @@ def update redirect_to dashboard_path else @user = @setup_service.user + @user.otp_required_for_login = two_factor_params[:otp_required_for_login] + @tfa_service = @setup_service.tfa_service + @tfa_service.issue_otp_secret @otp_provisioning_uri = @tfa_service.generate_otp_provisioning_uri render :edit @@ -42,7 +47,7 @@ def two_factor_params params.require(:user).permit(:otp_required_for_login, :otp_secret, :otp_attempt, :password) end - def original_token + def set_original_token @original_token ||= params[:reset_password_token] end end diff --git a/app/controllers/users/confirmations_controller.rb b/app/controllers/users/confirmations_controller.rb index 1ee4350..0353df8 100644 --- a/app/controllers/users/confirmations_controller.rb +++ b/app/controllers/users/confirmations_controller.rb @@ -26,6 +26,6 @@ class Users::ConfirmationsController < Devise::ConfirmationsController # The path used after confirmation. def after_confirmation_path_for(resource_name, resource) token = resource.send(:set_reset_password_token) - edit_user_setup_url(resource, reset_password_token: token) + edit_user_setup_url(reset_password_token: token) end end diff --git a/app/services/user_setup_service.rb b/app/services/user_setup_service.rb index a2028e0..3ecc88f 100644 --- a/app/services/user_setup_service.rb +++ b/app/services/user_setup_service.rb @@ -13,7 +13,7 @@ def run(password_params, tfa_params) otp_required, otp_secret, otp_attempt = tfa_params.values_at :otp_required_for_login, :otp_secret, :otp_attempt if token_valid? && user_valid?(password, confirmation) - return enable_otp(otp_secret, otp_attempt) if otp_required != "0" + return enable_otp(otp_secret, otp_attempt) if otp_required == '1' user.save! #This case should not happen else false diff --git a/app/views/shared/_two_factor_fields.html.erb b/app/views/shared/_two_factor_fields.html.erb index 5c021b6..f857aa6 100644 --- a/app/views/shared/_two_factor_fields.html.erb +++ b/app/views/shared/_two_factor_fields.html.erb @@ -36,16 +36,4 @@ <%= f.input :otp_attempt, label: false, value: '', autocomplete: 'off' %>
    - -
    - <% if resource.password_set? %> - - <%= f.input :current_password, label: false, input_html: { autocomplete: "off" } %> - <% end %> -
    - -
    - <%= f.button :submit, name: :two_factor, value: resource.otp_required_for_login ? 'Update' : 'Enable', class: 'btn-enable-2fa' %> - <%= f.button :submit, name: :two_factor, value: 'Disable', class: 'btn-disable-2fa' %> -
    diff --git a/app/views/two_factor_auth/edit.html.erb b/app/views/two_factor_auth/edit.html.erb index c886284..ad098f4 100644 --- a/app/views/two_factor_auth/edit.html.erb +++ b/app/views/two_factor_auth/edit.html.erb @@ -4,11 +4,20 @@

    Two Factor Auth (2FA)

    <%= simple_form_for(@tfa_service.user, url: two_factor_auth_path) do |f| %> - <% render partial: 'shared/two_factor_fields', locals: { + <%= render partial: 'shared/two_factor_fields', locals: { f: f, resource: @tfa_service.user, otp_provisioning_uri: @otp_provisioning_uri } %> + +
    + + <%= f.input :current_password, label: false, input_html: { autocomplete: "off" } %> +
    + +
    + <%= f.button :submit, name: :two_factor, value: 'Save Settings', class: 'btn-enable-2fa' %> +
    <% end %>
    diff --git a/app/views/user_setups/edit.html.erb b/app/views/user_setups/edit.html.erb index e447877..accdc5e 100644 --- a/app/views/user_setups/edit.html.erb +++ b/app/views/user_setups/edit.html.erb @@ -1,22 +1,16 @@
    -
    -
    -

    Update your credentials

    -
    -
    +

    Update your credentials

    + <%= simple_form_for(@tfa_service.user, url: user_setup_path(reset_password_token: @original_token), html: { method: :put }) do |f| %> <%= f.error_notification %> <%= f.input :reset_password_token, as: :hidden, input_html: { value: @original_token }%> - <%= f.full_error :reset_password_token %> -
    - <%= f.input :password, label: "New password", required: true, autofocus: true, hint: ("#{@minimum_password_length} characters minimum" if @minimum_password_length) %> - <%= f.input :password_confirmation, label: "Confirm your new password", required: true %> -
    + <%= f.input :password, label: "New password", required: true, autofocus: true, hint: ("#{@minimum_password_length} characters minimum" if @minimum_password_length) %> + <%= f.input :password_confirmation, label: "Confirm your new password", required: true %> <%= render partial: 'shared/two_factor_fields', locals: { f: f, @@ -24,7 +18,7 @@ otp_provisioning_uri: @otp_provisioning_uri } %> -
    +
    <%= f.button :submit, "Update" %>
    <% end %> From 407d9f59bd2f63bd63948d7c9ebe72d19a704998 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Mon, 8 Jul 2019 11:12:18 +0800 Subject: [PATCH 113/152] Fixes failing specs --- app/controllers/oauth_callbacks_controller.rb | 2 +- app/views/user_setups/edit.html.erb | 4 ++-- spec/features/oauth_feature_spec.rb | 10 +++++----- spec/features/two_factor_auth_setup_spec.rb | 8 ++++---- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/app/controllers/oauth_callbacks_controller.rb b/app/controllers/oauth_callbacks_controller.rb index 0cbeb7a..11c7498 100644 --- a/app/controllers/oauth_callbacks_controller.rb +++ b/app/controllers/oauth_callbacks_controller.rb @@ -24,7 +24,7 @@ def handle_persisted_user(user) redirect_to user_confirmation_path(confirmation_token: user.confirmation_token) elsif user.confirmed? && user.encrypted_password.blank? token = update_password_token(user) - redirect_to edit_password_url(user, reset_password_token: token) + redirect_to edit_user_setup_url(reset_password_token: token) else flash[:error] = t('oauth.already_registered') redirect_to new_user_session_path diff --git a/app/views/user_setups/edit.html.erb b/app/views/user_setups/edit.html.erb index accdc5e..6018f94 100644 --- a/app/views/user_setups/edit.html.erb +++ b/app/views/user_setups/edit.html.erb @@ -1,7 +1,7 @@
    -

    Update your credentials

    +

    Setup login credentials

    <%= simple_form_for(@tfa_service.user, url: user_setup_path(reset_password_token: @original_token), html: { method: :put }) do |f| %> <%= f.error_notification %> @@ -19,7 +19,7 @@ } %>
    - <%= f.button :submit, "Update" %> + <%= f.button :submit, "Save" %>
    <% end %>
    diff --git a/spec/features/oauth_feature_spec.rb b/spec/features/oauth_feature_spec.rb index d5fe737..4c48ee8 100644 --- a/spec/features/oauth_feature_spec.rb +++ b/spec/features/oauth_feature_spec.rb @@ -25,7 +25,7 @@ it 'redirects to password update page' do expect(page).to have_content I18n.t('devise.confirmations.confirmed') - expect(page).to have_content 'Set your password' + expect(page).to have_content 'Setup login credentials' end end @@ -43,11 +43,11 @@ end it 'redirects user to enter password' do - expect(page).to have_content('Set your password') + expect(page).to have_content('Setup login credentials') fill_in 'user[password]', with: 'password' fill_in 'user[password_confirmation]', with: 'password' - click_on 'Set my password' + click_on 'Save' expect(page).to have_content I18n.t('welcome') expect(page).to have_content 'Create a new secret to send' @@ -65,11 +65,11 @@ end it 'redirects user to enter password' do - expect(page).to have_content('Set your password') + expect(page).to have_content('Setup login credentials') fill_in 'user[password]', with: 'password' fill_in 'user[password_confirmation]', with: 'password' - click_on 'Set my password' + click_on 'Save' expect(page).to have_content I18n.t('welcome') expect(page).to have_content 'Create a new secret to send' diff --git a/spec/features/two_factor_auth_setup_spec.rb b/spec/features/two_factor_auth_setup_spec.rb index 4e44cf0..57e85ec 100644 --- a/spec/features/two_factor_auth_setup_spec.rb +++ b/spec/features/two_factor_auth_setup_spec.rb @@ -17,7 +17,7 @@ expect(page).to have_content('Install a two-factor') fill_in 'user[otp_attempt]', with: user.current_otp fill_in 'user[current_password]', with: 'password' - click_on 'Enable' + click_on 'Save Settings' expect(page).to have_content I18n.t('two_factor.update_success', verb: 'enabled') expect(user.reload.otp_required_for_login).to be true @@ -32,7 +32,7 @@ expect(page).to have_content('Install a two-factor') fill_in 'user[otp_attempt]', with: user.current_otp fill_in 'user[current_password]', with: 'wrong password' - click_on 'Enable' + click_on 'Save Settings' expect(page).to have_content I18n.t('two_factor.update_failed') expect(user.reload.otp_required_for_login).to be false @@ -55,7 +55,7 @@ uncheck('Enable two factor authentication') expect(page).to_not have_content('Use the form below to connect a new device') fill_in 'user[current_password]', with: 'password' - click_on 'Disable' + click_on 'Save Settings' expect(page).to have_content I18n.t('two_factor.update_success', verb: 'disabled') expect(user.reload.otp_required_for_login).to be false @@ -69,7 +69,7 @@ uncheck('Enable two factor authentication') expect(page).to_not have_content('Use the form below to connect a new device') fill_in 'user[current_password]', with: 'wrong password' - click_on 'Disable' + click_on 'Save Settings' expect(page).to have_content I18n.t('two_factor.update_failed') expect(user.reload.otp_required_for_login).to be true From 83131df2ce0bc326ffdc1b32cfa56b6afa111cfb Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Mon, 8 Jul 2019 14:42:44 +0800 Subject: [PATCH 114/152] Adds UserSetupService spec --- app/controllers/user_setups_controller.rb | 2 +- app/services/user_setup_service.rb | 2 +- spec/services/user_setup_service_spec.rb | 111 ++++++++++++++++++++++ spec/support/authorisation_helpers.rb | 6 ++ 4 files changed, 119 insertions(+), 2 deletions(-) create mode 100644 spec/services/user_setup_service_spec.rb diff --git a/app/controllers/user_setups_controller.rb b/app/controllers/user_setups_controller.rb index 22b037b..2d87d1a 100644 --- a/app/controllers/user_setups_controller.rb +++ b/app/controllers/user_setups_controller.rb @@ -44,7 +44,7 @@ def password_params end def two_factor_params - params.require(:user).permit(:otp_required_for_login, :otp_secret, :otp_attempt, :password) + params.require(:user).permit(:otp_required_for_login, :otp_secret, :otp_attempt) end def set_original_token diff --git a/app/services/user_setup_service.rb b/app/services/user_setup_service.rb index 3ecc88f..ea1e99e 100644 --- a/app/services/user_setup_service.rb +++ b/app/services/user_setup_service.rb @@ -2,7 +2,7 @@ class UserSetupService attr_reader :user, :tfa_service def initialize(token, tfa_service_klass) - reset_password_token = Devise.token_generator.digest(self, :reset_password_token, token) + reset_password_token = Devise.token_generator.digest(User, :reset_password_token, token) @user = User.find_or_initialize_with_error_by(:reset_password_token, reset_password_token) @tfa_service = tfa_service_klass.new(@user) diff --git a/spec/services/user_setup_service_spec.rb b/spec/services/user_setup_service_spec.rb new file mode 100644 index 0000000..4b82731 --- /dev/null +++ b/spec/services/user_setup_service_spec.rb @@ -0,0 +1,111 @@ +require 'rails_helper' + +describe UserSetupService do + let!(:user) { create :user, :unconfirmed } + let!(:token) { issue_reset_password_token!(user) } + + before do + user.reload + end + + describe '#initialize' do + let!(:setup_service) { UserSetupService.new(token, TwoFactorService) } + + it 'sets the user' do + expect(setup_service.user).to eq user + end + + it 'initializes a TwoFactorService' do + expect(setup_service.tfa_service).to be_a TwoFactorService + end + end + + describe '#run' do + let!(:tfa_service) { TwoFactorService.new(user) } + let!(:secret) { tfa_service.issue_otp_secret } + let!(:otp_user) { tfa_service.user } + let!(:setup_service) { UserSetupService.new(token, TwoFactorService) } + + context 'successful without otp' do + let!(:password_params) { {password: 'password', password_confirmation: 'password', reset_password_token: token} } + let!(:tfa_params) { {otp_required_for_login: '0'} } + + it 'returns true' do + result = setup_service.run(password_params, tfa_params) + expect(result).to be true + end + + it 'updates the users password' do + expect(user.encrypted_password).to be_blank + + setup_service.run(password_params, tfa_params) + expect(user.reload.encrypted_password).to_not be_blank + end + end + + context 'successful with otp' do + let!(:password_params) { {password: 'password', password_confirmation: 'password', reset_password_token: token} } + let!(:tfa_params) { {otp_required_for_login: '1', otp_secret: secret, otp_attempt: otp_user.current_otp} } + + it 'returns true' do + result = setup_service.run(password_params, tfa_params) + expect(result).to be true + end + + it 'sets the users password' do + expect(user.encrypted_password).to be_blank + + setup_service.run(password_params, tfa_params) + expect(user.reload.encrypted_password).to_not be_blank + end + + it 'enables the users otp' do + expect(user.otp_required_for_login).to be false + + setup_service.run(password_params, tfa_params) + user.reload + + expect(user.otp_required_for_login).to be true + expect(user.otp_secret).to eq secret + end + end + + context 'token is invalid' do + let!(:setup_service) { UserSetupService.new('abc', TwoFactorService) } + + it 'returns false' do + result = setup_service.run({}, {}) + expect(result).to eq false + end + end + + context 'password has errors' do + let!(:password_params) { {password: '', password_confirmation: '', reset_password_token: token} } + let!(:tfa_params) { {otp_required_for_login: '1', otp_secret: secret, otp_attempt: otp_user.current_otp} } + + it 'returns false' do + result = setup_service.run(password_params, tfa_params) + expect(result).to eq false + end + + it 'will not update the users password' do + expect(user.encrypted_password).to be_blank + + result = setup_service.run(password_params, tfa_params) + expect(result).to eq false + + expect(user.reload.encrypted_password).to be_blank + end + + it 'doesn not enable the users otp' do + expect(user.otp_required_for_login).to be false + + setup_service.run(password_params, tfa_params) + user.reload + + expect(user.otp_required_for_login).to be false + expect(user.otp_secret).to be nil + end + end + end +end diff --git a/spec/support/authorisation_helpers.rb b/spec/support/authorisation_helpers.rb index a63b116..0d1f787 100644 --- a/spec/support/authorisation_helpers.rb +++ b/spec/support/authorisation_helpers.rb @@ -3,4 +3,10 @@ def configure_authorisation(system_type, domain = "") allow(Rails.configuration).to receive(:topsekrit_authorisation_setting).and_return(system_type) allow(Rails.configuration).to receive(:topsekrit_authorised_domain).and_return(domain) end + + def issue_reset_password_token!(user) + raw, enc = Devise.token_generator.generate(User, :reset_password_token) + user.update_attributes(reset_password_token: enc, reset_password_sent_at: Time.current.utc) + raw + end end From 12b5a540db190bed7dd486c8eb4d8db0a277aaf4 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Mon, 8 Jul 2019 15:48:33 +0800 Subject: [PATCH 115/152] Adds test for setting of 2FA on confirmation --- spec/factories/users.rb | 1 + spec/features/user_confirmation_spec.rb | 82 ++++++++++++++++++++++--- 2 files changed, 75 insertions(+), 8 deletions(-) diff --git a/spec/factories/users.rb b/spec/factories/users.rb index 4546e4c..b2d7b04 100644 --- a/spec/factories/users.rb +++ b/spec/factories/users.rb @@ -11,6 +11,7 @@ password_confirmation { nil } confirmation_token { 'token' } confirmed_at { nil } + otp_required_for_login { false } end trait :confirmed_without_password do diff --git a/spec/features/user_confirmation_spec.rb b/spec/features/user_confirmation_spec.rb index c2b0583..192a94a 100644 --- a/spec/features/user_confirmation_spec.rb +++ b/spec/features/user_confirmation_spec.rb @@ -1,31 +1,57 @@ require 'rails_helper' -describe 'User confirmation' do - let! (:user) { create :user, :unconfirmed } +describe 'User confirmation', js: true do + let!(:user) { create :user, :unconfirmed } + let!(:otp_secret) { "jk5ap26gyp255cmseomnttmm" } + + before do + user.otp_secret = otp_secret + allow(User).to receive(:generate_otp_secret).and_return(otp_secret) + + visit user_confirmation_path(confirmation_token: user.confirmation_token) + end describe 'successful' do it 'confirms the user' do - visit user_confirmation_path(confirmation_token: user.confirmation_token) - expect(page).to have_content I18n.t('devise.confirmations.confirmed') expect(user.reload.confirmed_at).to_not be_nil end it 'asks the user to set the password' do - visit user_confirmation_path(confirmation_token: user.confirmation_token) - - expect(page).to have_content('Set your password') + expect(page).to have_content('Setup login credentials') expect(user.encrypted_password).to be_blank fill_in 'user[password]', with: 'password' fill_in 'user[password_confirmation]', with: 'password' - click_on 'Set my password' + click_on 'Save' expect(page).to have_content I18n.t('welcome') expect(page).to have_content 'Create a new secret to send' expect(user.reload.encrypted_password).to_not be_blank end + + it 'allows the user to enable 2FA' do + expect(page).to have_content('Setup login credentials') + expect(user.encrypted_password).to be_blank + expect(user.otp_required_for_login).to be false + + fill_in 'user[password]', with: 'password' + fill_in 'user[password_confirmation]', with: 'password' + + check('Enable two factor authentication') + expect(page).to have_content('Install a two-factor') + fill_in 'user[otp_attempt]', with: user.current_otp + + click_on 'Save' + + expect(page).to have_content I18n.t('welcome') + expect(page).to have_content 'Create a new secret to send' + user.reload + + expect(user.encrypted_password).to_not be_blank + expect(user.otp_required_for_login).to be true + end end describe 'token is nonexistent' do @@ -34,4 +60,44 @@ expect(page).to have_content 'Confirmation token is invalid' end end + + describe 'password does not match' do + it 'it fails to update and shows errors' do + expect(page).to have_content('Setup login credentials') + expect(user.encrypted_password).to be_blank + expect(user.otp_required_for_login).to be false + + fill_in 'user[password]', with: 'password' + fill_in 'user[password_confirmation]', with: 'wrong password' + + check('Enable two factor authentication') + expect(page).to have_content('Install a two-factor') + fill_in 'user[otp_attempt]', with: user.current_otp + click_on 'Save' + + expect(page).to have_content "password doesn't match" + expect(user.reload.encrypted_password).to be_blank + expect(user.reload.otp_required_for_login).to be false + end + end + + describe 'otp is wrong' do + it 'it fails to update and shows errors' do + expect(page).to have_content('Setup login credentials') + expect(user.encrypted_password).to be_blank + expect(user.otp_required_for_login).to be false + + fill_in 'user[password]', with: 'password' + fill_in 'user[password_confirmation]', with: 'password' + + check('Enable two factor authentication') + expect(page).to have_content('Install a two-factor') + fill_in 'user[otp_attempt]', with: 'wrong otp' + click_on 'Save' + + expect(page).to have_content "is invalid" + expect(user.reload.encrypted_password).to be_blank + expect(user.reload.otp_required_for_login).to be false + end + end end From 95f93ee0b6d336c44c8393913c5e8201523c4707 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Mon, 8 Jul 2019 15:59:00 +0800 Subject: [PATCH 116/152] Cleanups and adds more tests --- app/models/user.rb | 4 ---- app/services/user_setup_service.rb | 2 +- spec/services/two_factor_service_spec.rb | 20 ++++++++++++++++++++ 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/app/models/user.rb b/app/models/user.rb index 2f4a448..47e77ee 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -11,10 +11,6 @@ class User < ActiveRecord::Base has_many :secrets, primary_key: 'email', foreign_key: 'from_email' - def password_set? - encrypted_password.present? - end - protected def password_required? diff --git a/app/services/user_setup_service.rb b/app/services/user_setup_service.rb index ea1e99e..d6d4d52 100644 --- a/app/services/user_setup_service.rb +++ b/app/services/user_setup_service.rb @@ -14,7 +14,7 @@ def run(password_params, tfa_params) if token_valid? && user_valid?(password, confirmation) return enable_otp(otp_secret, otp_attempt) if otp_required == '1' - user.save! #This case should not happen + user.save! # This should never raise an errror else false end diff --git a/spec/services/two_factor_service_spec.rb b/spec/services/two_factor_service_spec.rb index a50344b..ac9ef03 100644 --- a/spec/services/two_factor_service_spec.rb +++ b/spec/services/two_factor_service_spec.rb @@ -78,6 +78,26 @@ end end + describe '#enable_otp_without_password' do + let!(:otp_secret) { tfa.issue_otp_secret } + + context 'successful' do + it 'returns true' do + result = tfa.enable_otp_without_password(otp_secret, tfa.user.current_otp) + expect(result).to be true + end + + it 'sets otp_secret and otp_required_for_login' do + tfa.enable_otp_without_password(otp_secret, tfa.user.current_otp) + + user.reload + expect(user.otp_secret).to eq otp_secret + expect(user.otp_required_for_login).to be true + expect(user.changed?).to be false + end + end + end + describe '#disable_otp' do let!(:otp_secret) { tfa.issue_otp_secret } From 6d579fca12c3d42897ae89ae41320300751246c8 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Mon, 8 Jul 2019 16:39:51 +0800 Subject: [PATCH 117/152] Fixes handling of failed credential upgrade --- app/controllers/user_setups_controller.rb | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/app/controllers/user_setups_controller.rb b/app/controllers/user_setups_controller.rb index 2d87d1a..e7dbedf 100644 --- a/app/controllers/user_setups_controller.rb +++ b/app/controllers/user_setups_controller.rb @@ -26,11 +26,9 @@ def update redirect_to dashboard_path else - @user = @setup_service.user - @user.otp_required_for_login = two_factor_params[:otp_required_for_login] - @tfa_service = @setup_service.tfa_service - @tfa_service.issue_otp_secret + @tfa_service.user.otp_required_for_login = two_factor_params[:otp_required_for_login] + @tfa_service.user.otp_secret = two_factor_params[:otp_secret] @otp_provisioning_uri = @tfa_service.generate_otp_provisioning_uri render :edit From 8c2d8ad9c4f8a68a837f9bfdc9ad621fd6ec64b1 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Mon, 8 Jul 2019 17:57:10 +0800 Subject: [PATCH 118/152] Adds ability to copy secret link instead of sending an email --- app/controllers/secrets_controller.rb | 9 +++++++-- app/models/secret.rb | 6 +++--- app/services/secret_service.rb | 2 +- app/views/secrets/copy.html.erb | 2 ++ app/views/secrets/new.html.erb | 3 ++- 5 files changed, 15 insertions(+), 7 deletions(-) create mode 100644 app/views/secrets/copy.html.erb diff --git a/app/controllers/secrets_controller.rb b/app/controllers/secrets_controller.rb index 4f1b634..2fce33e 100644 --- a/app/controllers/secrets_controller.rb +++ b/app/controllers/secrets_controller.rb @@ -26,7 +26,12 @@ def create @secret = SecretService.encrypt_new_secret(secret_params) if @secret.persisted? flash[:message] = "The secret has been encrypted and an email sent to the recipient, feel free to send another secret!" - redirect_to dashboard_path + + if @secret.no_email + render :copy + else + redirect_to dashboard_path + end else flash.now[:error] = @secret.errors.full_messages.join("
    ".html_safe) render :new @@ -37,7 +42,7 @@ def create def secret_params params.require(:secret).permit(:title, :to_email, :secret, :comments, - :expire_at, :secret_file).tap do |p| + :expire_at, :secret_file, :no_email).tap do |p| p[:from_email] = current_user.email end end diff --git a/app/models/secret.rb b/app/models/secret.rb index fe8a89e..d667e16 100644 --- a/app/models/secret.rb +++ b/app/models/secret.rb @@ -1,5 +1,5 @@ class Secret < ActiveRecord::Base - attr_accessor :secret_key + attr_accessor :secret_key, :no_email attr_encrypted :secret, key: :secret_key, mode: :per_attribute_iv_and_salt mount_uploader :secret_file, SecretFileUploader @@ -9,8 +9,8 @@ class Secret < ActiveRecord::Base } validates :to_email, presence: { - message: "Please enter the senders's email address" - } + message: "Please enter the senders's email address" + }, unless: :no_email validates :secret, presence: { message: "Please enter a secret to share with the recipient", diff --git a/app/services/secret_service.rb b/app/services/secret_service.rb index e345efc..c8386aa 100644 --- a/app/services/secret_service.rb +++ b/app/services/secret_service.rb @@ -2,7 +2,7 @@ class SecretService def self.encrypt_new_secret(params) secret = Secret.create(params.merge(uuid: SecureRandom.uuid, secret_key: SecureRandom.hex(16))) - if secret.persisted? + if secret.persisted? && !secret.no_email # TODO: Mailers should be in the background SecretMailer.secret_notification(secret).deliver_now end diff --git a/app/views/secrets/copy.html.erb b/app/views/secrets/copy.html.erb new file mode 100644 index 0000000..0ac0a4d --- /dev/null +++ b/app/views/secrets/copy.html.erb @@ -0,0 +1,2 @@ +

    Copy

    +
    <%= secret_url(@secret.uuid, key: @secret.secret_key) %>
    diff --git a/app/views/secrets/new.html.erb b/app/views/secrets/new.html.erb index 430010f..383098a 100644 --- a/app/views/secrets/new.html.erb +++ b/app/views/secrets/new.html.erb @@ -6,6 +6,7 @@ <%= simple_form_for @secret, url: secrets_url, wrapper: 'horizontal_form', html: {class: 'form-horizontal secret__form'} do |f| %>
    <%= f.input :title, input_html: { class: 'form-control' } %> + <%= f.input :no_email, label: "Just give me the link", as: :boolean, input_html: { class: 'dont-email-toggle' } %> <%= f.input :from_email, label: "Sender:", input_html: { disabled: true, placeholder: from_email_placeholder, class: 'form-control' } %> <%= f.input :to_email, label: "Recipient:", input_html: { placeholder: to_email_placeholder, class: 'form-control' } %> <%= f.input :secret, as: :text, input_html: { class: 'form-control' } %> @@ -28,4 +29,4 @@
    -
    \ No newline at end of file +
    From 9494cee5eb090e4ddf6bccb824da39b16d566eb5 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Tue, 9 Jul 2019 09:10:44 +0800 Subject: [PATCH 119/152] Adds copy service --- app/controllers/secrets_controller.rb | 10 ++++++++-- app/services/copy_service.rb | 27 +++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 app/services/copy_service.rb diff --git a/app/controllers/secrets_controller.rb b/app/controllers/secrets_controller.rb index 2fce33e..fcb942b 100644 --- a/app/controllers/secrets_controller.rb +++ b/app/controllers/secrets_controller.rb @@ -28,7 +28,8 @@ def create flash[:message] = "The secret has been encrypted and an email sent to the recipient, feel free to send another secret!" if @secret.no_email - render :copy + CopyService.new(session).prepare(@secret) + redirect_to copy_secrets_path else redirect_to dashboard_path end @@ -38,13 +39,18 @@ def create end end + def copy + @data = CopyService.new(session).copy! + redirect_to root_path unless @data + end + private def secret_params params.require(:secret).permit(:title, :to_email, :secret, :comments, :expire_at, :secret_file, :no_email).tap do |p| p[:from_email] = current_user.email + p[:no_email] = ActiveRecord::Type::Boolean.new.type_cast_from_database(p[:no_email]) end end - end diff --git a/app/services/copy_service.rb b/app/services/copy_service.rb new file mode 100644 index 0000000..36b3585 --- /dev/null +++ b/app/services/copy_service.rb @@ -0,0 +1,27 @@ +class CopyService + attr_reader :session + + KEY = :copy_secret_key + UUID = :copy_secret_uuid + + def initialize(session) + @session = session + end + + def prepare(secret) + session[KEY] = secret.secret_key + session[UUID] = secret.uuid + end + + def copy! + if session[KEY] && session[UUID] + data = {key: session[KEY], uuid: session[UUID]} + + session.delete(KEY) + session.delete(UUID) + data + else + false + end + end +end From b673159c53b2ffd817eea1d691beb7d96ed3e801 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Tue, 9 Jul 2019 09:11:45 +0800 Subject: [PATCH 120/152] Styles copy page --- app/assets/stylesheets/application.sass | 8 ++++++++ app/views/secrets/copy.html.erb | 13 +++++++++++-- app/views/secrets/new.html.erb | 4 +++- config/routes.rb | 4 +++- 4 files changed, 25 insertions(+), 4 deletions(-) diff --git a/app/assets/stylesheets/application.sass b/app/assets/stylesheets/application.sass index 6c69e8b..5f6423d 100644 --- a/app/assets/stylesheets/application.sass +++ b/app/assets/stylesheets/application.sass @@ -70,6 +70,14 @@ ul.nostyle background-color: $green3 border-color: $green3 +// Shared component styles + footer // Keeps footer at the bottom at all times (even if content is short) margin-top: auto + +.main-header + display: flex + align-items: center + padding: 20px 0 + margin: 0 diff --git a/app/views/secrets/copy.html.erb b/app/views/secrets/copy.html.erb index 0ac0a4d..8215ea1 100644 --- a/app/views/secrets/copy.html.erb +++ b/app/views/secrets/copy.html.erb @@ -1,2 +1,11 @@ -

    Copy

    -
    <%= secret_url(@secret.uuid, key: @secret.secret_key) %>
    + diff --git a/app/views/secrets/new.html.erb b/app/views/secrets/new.html.erb index 383098a..05572b4 100644 --- a/app/views/secrets/new.html.erb +++ b/app/views/secrets/new.html.erb @@ -6,7 +6,9 @@ <%= simple_form_for @secret, url: secrets_url, wrapper: 'horizontal_form', html: {class: 'form-horizontal secret__form'} do |f| %>
    <%= f.input :title, input_html: { class: 'form-control' } %> - <%= f.input :no_email, label: "Just give me the link", as: :boolean, input_html: { class: 'dont-email-toggle' } %> +
    + <%= f.input :no_email, label: "Copy the link (don't send email)", as: :boolean, input_html: { class: 'dont-email-toggle' } %> +
    <%= f.input :from_email, label: "Sender:", input_html: { disabled: true, placeholder: from_email_placeholder, class: 'form-control' } %> <%= f.input :to_email, label: "Recipient:", input_html: { placeholder: to_email_placeholder, class: 'form-control' } %> <%= f.input :secret, as: :text, input_html: { class: 'form-control' } %> diff --git a/config/routes.rb b/config/routes.rb index 8064194..cb30170 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -13,7 +13,9 @@ resource :two_factor_auth, only: [:edit, :update], controller: 'two_factor_auth' resource :user_setup, only: [:edit, :update] - resources :secrets, only: [:show, :new, :create, :edit, :update] + resources :secrets, only: [:show, :new, :create, :edit, :update] do + collection { get :copy } + end resources :decrypted_secrets, only: :create resources :extended_secrets, only: :update From 6ee437fcc7856c2be04aef340dda6b4cdb22a919 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Tue, 9 Jul 2019 09:36:09 +0800 Subject: [PATCH 121/152] Adds email fields toggling for secret form --- app/assets/javascripts/application.js | 1 + .../javascripts/components/new-secret-form.js | 32 +++++++++++++++++++ app/views/secrets/new.html.erb | 2 +- 3 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 app/assets/javascripts/components/new-secret-form.js diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index 699aa99..368a795 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -21,3 +21,4 @@ // Components //= require components/secret-item //= require components/two-factor-fields +//= require components/new-secret-form diff --git a/app/assets/javascripts/components/new-secret-form.js b/app/assets/javascripts/components/new-secret-form.js new file mode 100644 index 0000000..56c3397 --- /dev/null +++ b/app/assets/javascripts/components/new-secret-form.js @@ -0,0 +1,32 @@ +$(function() { + function NewSecretForm(rootDom) { + this.$root = $(rootDom); + this.$noEmailToggle = this.$root.find('.no-email-toggle'); + this.$fromEmailField = this.$root.find('.secret_from_email'); + this.$toEmailField = this.$root.find('.secret_to_email'); + this.$toEmailInput = this.$root.find("input[name='secret[to_email]']") + this.init(); + } + + NewSecretForm.prototype.init = function () { + this.$noEmailToggle.change(function() { + this.toggleEmailFields(!this.withoutEmail()); + }.bind(this)); + } + + NewSecretForm.prototype.toggleEmailFields = function (showField) { + this.$fromEmailField.toggle(showField); + this.$toEmailField.toggle(showField); + this.$toEmailInput.val(''); + } + + NewSecretForm.prototype.withoutEmail = function () { + return this.$noEmailToggle.is(':checked'); + } + + //Intialization code + const $newSecretForm = $(this).find(".secret__form"); + $newSecretForm.each(function () { + new NewSecretForm(this) + }) +}); diff --git a/app/views/secrets/new.html.erb b/app/views/secrets/new.html.erb index 05572b4..b98717b 100644 --- a/app/views/secrets/new.html.erb +++ b/app/views/secrets/new.html.erb @@ -7,7 +7,7 @@
    <%= f.input :title, input_html: { class: 'form-control' } %>
    - <%= f.input :no_email, label: "Copy the link (don't send email)", as: :boolean, input_html: { class: 'dont-email-toggle' } %> + <%= f.input :no_email, label: "Copy the link (don't send email)", as: :boolean, input_html: { class: 'no-email-toggle' } %>
    <%= f.input :from_email, label: "Sender:", input_html: { disabled: true, placeholder: from_email_placeholder, class: 'form-control' } %> <%= f.input :to_email, label: "Recipient:", input_html: { placeholder: to_email_placeholder, class: 'form-control' } %> From 59449dfee79f9c775d605abd4180087d7d1be947 Mon Sep 17 00:00:00 2001 From: wetoolaguer Date: Tue, 9 Jul 2019 10:15:54 +0800 Subject: [PATCH 122/152] Fixes view for secrets that are sent manually --- app/controllers/secrets_controller.rb | 8 ++++---- app/models/secret.rb | 2 +- app/views/dashboard/_secret_item.erb | 17 ++++++++++++++--- app/views/secrets/new.html.erb | 2 +- config/locales/en.yml | 4 ++++ .../20190709014931_add_no_email_to_secrets.rb | 5 +++++ db/schema.rb | 3 ++- 7 files changed, 31 insertions(+), 10 deletions(-) create mode 100644 db/migrate/20190709014931_add_no_email_to_secrets.rb diff --git a/app/controllers/secrets_controller.rb b/app/controllers/secrets_controller.rb index fcb942b..56fdf72 100644 --- a/app/controllers/secrets_controller.rb +++ b/app/controllers/secrets_controller.rb @@ -25,12 +25,13 @@ def new def create @secret = SecretService.encrypt_new_secret(secret_params) if @secret.persisted? - flash[:message] = "The secret has been encrypted and an email sent to the recipient, feel free to send another secret!" - - if @secret.no_email + if @secret.no_email? CopyService.new(session).prepare(@secret) + + flash[:message] = t('secrets.create.success.without_email') redirect_to copy_secrets_path else + flash[:message] = t('secrets.create.success.with_email') redirect_to dashboard_path end else @@ -50,7 +51,6 @@ def secret_params params.require(:secret).permit(:title, :to_email, :secret, :comments, :expire_at, :secret_file, :no_email).tap do |p| p[:from_email] = current_user.email - p[:no_email] = ActiveRecord::Type::Boolean.new.type_cast_from_database(p[:no_email]) end end end diff --git a/app/models/secret.rb b/app/models/secret.rb index d667e16..8711943 100644 --- a/app/models/secret.rb +++ b/app/models/secret.rb @@ -1,5 +1,5 @@ class Secret < ActiveRecord::Base - attr_accessor :secret_key, :no_email + attr_accessor :secret_key attr_encrypted :secret, key: :secret_key, mode: :per_attribute_iv_and_salt mount_uploader :secret_file, SecretFileUploader diff --git a/app/views/dashboard/_secret_item.erb b/app/views/dashboard/_secret_item.erb index 41a09e8..04169e4 100644 --- a/app/views/dashboard/_secret_item.erb +++ b/app/views/dashboard/_secret_item.erb @@ -15,12 +15,23 @@ <%= image_tag 'locked-icon.svg', class: 'mail-icon' %> <% end %>