auther 15.0.2 → 16.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 872b92cd6d233407e157d8da676f6884128b7605033b8db6b214cc91dca06b77
4
- data.tar.gz: 743510ca065d69b77b36e6971b21eb30a86315f9aa92211ee7e3eb8acacf02d6
3
+ metadata.gz: 0f905822b4c9e5cce9f73e206c5ca7bb97e27daf27485536cc239aa63b04eb61
4
+ data.tar.gz: 9e593c6092b7da6d104a35d0c4b0c1151d799399d3c3a2fc8d8722c494278a9e
5
5
  SHA512:
6
- metadata.gz: b892b27807317e6e63338ddbceef8f240724ea26798cd19ce9bd44959ccf09f68b435b64b25ea48c7a63f36c92cc4612cc83d8c25e6674d527faed3b442722c5
7
- data.tar.gz: dd929f0925ad62f1f158f30da54ca7927936515f4dcf3c4548932fb3a19e548a0fb192e5f40495e18e70aaf9a1a27b0c8d3efbc75a8b9d2e273f843f13ac2088
6
+ metadata.gz: 5dfdc19ebb9899d54b783043f8d57203625be75e690221f6d8bbf7bad186108dd69ff2e12b79b5f59afe04e557023b46b434fa2bda76461e8179768b08dc8411
7
+ data.tar.gz: 5adccd56b88d2e68be37a707e9efd1e8dd70f0f6b1d08156acb4119502cd57ec36a7c719f9b897f04b7a56cc1a820a3105fee0a1fdf949c2d122a9f836f1f61e
checksums.yaml.gz.sig CHANGED
Binary file
data/README.adoc CHANGED
@@ -13,7 +13,7 @@ toc::[]
13
13
  == Features
14
14
 
15
15
  * Supports form-based authentication compatible with password managers like link:https://bitwarden.com[Bitwarden].
16
- * Uses CSS Flexbox for lightweight styling.
16
+ * Uses pure CSS for styling.
17
17
  * Uses encrypted account credentials to keep sensitive information secure.
18
18
  * Supports multiple accounts with optional path exclude lists.
19
19
  * Supports customizable routes, models, presenters, views, controllers, and loggers.
@@ -69,17 +69,18 @@ Run the credentials generator to generate credentials for your application:
69
69
  rails generate auther:credentials
70
70
  ----
71
71
 
72
- Run the install generator to configure and initialize your application:
72
+ Example:
73
+
74
+ image::https://alchemists.io/images/projects/auther/screenshots/credentials_generator.png[Credentials Generator Screenshot,width=768,height=288,role=focal_point]
75
+
76
+ If using link:https://direnv.net[direnv], copy and paste the generated credentials -- as shown above -- into your `.envrc` file (💡 don't forget to add `export` before each key). Ensure you've applied these credentials to your environment and then run the install generator to configure and initialize your application:
73
77
 
74
78
  [source,bash]
75
79
  ----
76
80
  rails generate auther:install
77
81
  ----
78
82
 
79
- If using link:https://direnv.net[direnv], you can copy and paste the generated
80
- credentials into your `.envrc` file. Example:
81
-
82
- image::https://alchemists.io/images/projects/auther/screenshots/credentials_generator.png[Credentials Generator Screenshot,width=768,height=288,role=focal_point]
83
+ 💡 If you ran the generator before applying your credentials to the environment, you can re-run the generator to fix.
83
84
 
84
85
  == Usage
85
86
 
@@ -94,7 +95,7 @@ initializer comes installed with the following settings:
94
95
 
95
96
  [source,ruby]
96
97
  ----
97
- Rails.application.config.auther_settings = {
98
+ Rails.application.config.auther = {
98
99
  accounts: [
99
100
  {
100
101
  name: "admin",
@@ -111,7 +112,7 @@ To encrypt/decrypt account credentials, launch a rails console and run the follo
111
112
 
112
113
  [source,ruby]
113
114
  ----
114
- # The secret as defined in `auther_settings` and/or produced by the credentials generator.
115
+ # The secret as defined in `Rails.application.config.auther` and/or produced by the credentials generator.
115
116
  secret = SecureRandom.hex 16 # "426a7f46548a1a4518676a8e246517d8"
116
117
 
117
118
  # The cipher for encrypting/decrypting values.
@@ -146,7 +147,7 @@ The initializer can be customized as follows:
146
147
  *** The auth URL.
147
148
  * `url` - Optional. The URL to redirect to when enforcing authentication. Default: `"/login"`.
148
149
  * `logger` - Optional. The logger used to log path/account authorization messages. Default:
149
- `Auther::NullLogger`.
150
+ `Logger.new nil`.
150
151
 
151
152
  === Routes
152
153
 
@@ -208,7 +209,7 @@ As mentioned in the setup above, the logger can be customized as follows:
208
209
  [source,ruby]
209
210
  ----
210
211
  # This is the default logger silences all logging attempts.
211
- Auther::NullLogger.new
212
+ Logger.new nil
212
213
 
213
214
  # Can be used to log to the environment log.
214
215
  ActiveSupport::Logger.new "log/#{Rails.env}.log"
@@ -0,0 +1,96 @@
1
+ .auther {
2
+ --blue-light: hsla(215, 55%, 54%, 1.00);
3
+ --blue-dark: hsla(214, 58%, 38%, 1.00);
4
+ --red: hsla(9, 87%, 54%, 1.00);
5
+ --white: hsla(0, 0%, 100%, 1.00);
6
+ --grey-light: hsla(0, 0%, 65%, 1.00);
7
+ --grey-dark: hsla(240, 1%, 30%, 1.00);
8
+ --font-family: "Verdana", sans-serif;
9
+
10
+ align-content: center;
11
+ display: flex;
12
+ font-family: var(--font-family);
13
+ justify-content: center;
14
+
15
+ .body {
16
+ display: flex;
17
+ flex-direction: column;
18
+ }
19
+
20
+ .label {
21
+ font-size: 2em;
22
+ font-weight: 400;
23
+ text-align: center;
24
+ }
25
+
26
+ .form {
27
+ display: flex;
28
+ flex-direction: column;
29
+
30
+ .section {
31
+ display: flex;
32
+ flex-direction: column;
33
+ margin: 0 0 0.5rem 0;
34
+ }
35
+
36
+ .group {
37
+ display: flex;
38
+ flex-direction: column;
39
+ }
40
+
41
+ .input {
42
+ color: var(--grey-dark);
43
+ border: 0.09rem solid var(--grey-light);
44
+ border-radius: 0.3rem;
45
+ display: flex;
46
+ font-size: 0.9rem;
47
+ padding: 0.5rem;
48
+ outline: none;
49
+ }
50
+
51
+ .select {
52
+ background: transparent;
53
+ border-radius: 0.3rem;
54
+ color: var(--grey-dark);
55
+ display: flex;
56
+ font-size: 1rem;
57
+ height: 2rem;
58
+ outline: none;
59
+ }
60
+
61
+ .message {
62
+ background: var(--red);
63
+ color: var(--white);
64
+ display: none;
65
+ padding: 0.3em 0.7em;
66
+ }
67
+
68
+ .button {
69
+ color: var(--white);
70
+ cursor: pointer;
71
+ background-color: var(--blue-light);
72
+ border: none;
73
+ font-size: 1rem;
74
+ padding: 0.5rem;
75
+ margin: 1rem 0 0 0;
76
+ outline: none;
77
+ width: 100%;
78
+
79
+ &:active {
80
+ background-color: var(--blue-dark);
81
+ }
82
+ }
83
+
84
+ .error {
85
+ .input {
86
+ border-color: var(--red);
87
+ border-bottom-right-radius: 0;
88
+ border-bottom-left-radius: 0;
89
+ }
90
+
91
+ .message {
92
+ display: flex;
93
+ }
94
+ }
95
+ }
96
+ }
@@ -5,9 +5,7 @@ module Auther
5
5
  class BaseController < ActionController::Base
6
6
  protect_from_forgery with: :exception
7
7
 
8
- def show
9
- redirect_to settings.url
10
- end
8
+ def show = redirect_to settings.url
11
9
 
12
10
  def new
13
11
  @account = Auther::Presenter::Account.new
@@ -37,13 +35,9 @@ module Auther
37
35
 
38
36
  private
39
37
 
40
- def account_params
41
- params.require(:account).permit(:name, :login, :password)
42
- end
38
+ def account_params = params.require(:account).permit(:name, :login, :password)
43
39
 
44
- def settings
45
- Auther::Settings.new Rails.application.config.auther_settings
46
- end
40
+ def settings = Auther::Settings.new Rails.application.config.auther
47
41
 
48
42
  def load_title
49
43
  @title = settings.title
@@ -64,13 +58,9 @@ module Auther
64
58
  fail NotImplementedError, "The method, #new_template_path, is not implemented."
65
59
  end
66
60
 
67
- def authorized_url account
68
- session["auther_redirect_url"] || account.authorized_url || "/"
69
- end
61
+ def authorized_url(account) = session["auther_redirect_url"] || account.authorized_url || "/"
70
62
 
71
- def deauthorized_url account
72
- account.deauthorized_url || settings.url
73
- end
63
+ def deauthorized_url(account) = account.deauthorized_url || settings.url
74
64
 
75
65
  def store_credentials account
76
66
  keymaster = Auther::Keymaster.new account.name
@@ -9,8 +9,6 @@ module Auther
9
9
 
10
10
  private
11
11
 
12
- def new_template_path
13
- "auther/session/new"
14
- end
12
+ def new_template_path = "auther/session/new"
15
13
  end
16
14
  end
@@ -25,8 +25,6 @@ module Auther
25
25
 
26
26
  private
27
27
 
28
- def paths_type
29
- errors.add :paths, "must be an array" unless paths.is_a? Array
30
- end
28
+ def paths_type = (errors.add :paths, "must be an array" unless paths.is_a? Array)
31
29
  end
32
30
  end
@@ -18,9 +18,7 @@ module Auther
18
18
  @password = password
19
19
  end
20
20
 
21
- def error? key
22
- errors.key? key
23
- end
21
+ def error?(key) = errors.key? key
24
22
 
25
23
  def error_message key
26
24
  return "" unless error? key
@@ -0,0 +1,29 @@
1
+ <% content_for(:title) { @title } %>
2
+
3
+ <div class="auther">
4
+ <div class="body">
5
+ <h1 class="label">Authorization</h1>
6
+
7
+ <%= form_for @account, as: :account, url: "/auther/session", html: {class: :form} do |form| %>
8
+ <%= content_tag :div, class: %(section #{"error" if @account.error?(:login)}) do %>
9
+ <div class="group">
10
+ <%= form.text_field :login, class: "input", placeholder: "Login" %>
11
+ <small class="message"><%= @account.error_message(:login) %></small>
12
+ </div>
13
+ <% end %>
14
+
15
+ <%= content_tag :div, class: %(section #{"error" if @account.error?(:password)}) do %>
16
+ <div class="group">
17
+ <%= form.password_field :password, class: "input", placeholder: "Password" %>
18
+ <small class="message"><%= @account.error_message(:password) %></small>
19
+ </div>
20
+ <% end %>
21
+
22
+ <div class="section">
23
+ <%= form.select :name, @account_options, {}, class: "select" %>
24
+ </div>
25
+
26
+ <%= form.submit "Login", class: "button" %>
27
+ <% end %>
28
+ </div>
29
+ </div>
@@ -0,0 +1,20 @@
1
+ <!DOCTYPE html>
2
+
3
+ <html lang="en">
4
+ <head>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no">
6
+
7
+ <title><%= yield :title %></title>
8
+
9
+ <meta charset="utf-8">
10
+ <meta name="description" content="A demo site.">
11
+ <meta name="author" content="Alchemists">
12
+
13
+ <%= stylesheet_link_tag "auther/application", media: "all" %>
14
+ <%= csrf_meta_tags %>
15
+ </head>
16
+
17
+ <body>
18
+ <%= yield %>
19
+ </body>
20
+ </html>
data/auther.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = "auther"
5
- spec.version = "15.0.2"
5
+ spec.version = "16.0.0"
6
6
  spec.authors = ["Brooke Kuhlmann"]
7
7
  spec.email = ["brooke@alchemists.io"]
8
8
  spec.homepage = "https://alchemists.io/projects/auther"
@@ -23,11 +23,9 @@ Gem::Specification.new do |spec|
23
23
  spec.signing_key = Gem.default_key_path
24
24
  spec.cert_chain = [Gem.default_cert_path]
25
25
 
26
- spec.required_ruby_version = [">= 3.2", "<= 3.3"]
27
- spec.add_dependency "rails", "~> 7.0"
28
- spec.add_dependency "refinements", "~> 11.0"
29
- spec.add_dependency "sass-rails", "~> 6.0"
30
- spec.add_dependency "slim-rails", "~> 3.5"
26
+ spec.required_ruby_version = "~> 3.3"
27
+ spec.add_dependency "rails", "~> 7.1"
28
+ spec.add_dependency "refinements", "~> 12.0"
31
29
 
32
30
  spec.files = Dir["*.gemspec", "app/**/*", "config/**/*", "lib/**/*"]
33
31
  spec.extra_rdoc_files = Dir["README*", "LICENSE*"]
@@ -4,7 +4,7 @@ module Auther
4
4
  # Manages account authentication.
5
5
  class Authenticator
6
6
  # rubocop:disable Metrics/ParameterLists
7
- def initialize secret, account_model, account_presenter, logger: Auther::NullLogger.new(STDOUT)
7
+ def initialize secret, account_model, account_presenter, logger: LOGGER
8
8
  @cipher = Auther::Cipher.new secret
9
9
  @account_model = account_model
10
10
  @account_presenter = account_presenter
@@ -41,9 +41,7 @@ module Auther
41
41
  false
42
42
  end
43
43
 
44
- def authentic_name?
45
- account_presenter.name == account_model.name
46
- end
44
+ def authentic_name? = account_presenter.name == account_model.name
47
45
 
48
46
  def authentic_login?
49
47
  authentic? account_model.encrypted_login, account_presenter.login, "login"
data/lib/auther/cipher.rb CHANGED
@@ -12,21 +12,15 @@ module Auther
12
12
  {secret:, login: cipher.encrypt(login), password: cipher.encrypt(password)}
13
13
  end
14
14
 
15
- def self.key_length
16
- ActiveSupport::MessageEncryptor.key_len
17
- end
15
+ def self.key_length = ActiveSupport::MessageEncryptor.key_len
18
16
 
19
17
  def initialize secret
20
18
  @encryptor = ActiveSupport::MessageEncryptor.new secret
21
19
  end
22
20
 
23
- def encrypt data
24
- encryptor.encrypt_and_sign data
25
- end
21
+ def encrypt(data) = encryptor.encrypt_and_sign data
26
22
 
27
- def decrypt data
28
- encryptor.decrypt_and_verify data
29
- end
23
+ def decrypt(data) = encryptor.decrypt_and_verify data
30
24
 
31
25
  private
32
26
 
data/lib/auther/engine.rb CHANGED
@@ -5,7 +5,7 @@ module Auther
5
5
  class Engine < ::Rails::Engine
6
6
  isolate_namespace Auther
7
7
 
8
- config.auther_settings = {}
8
+ config.auther = {}
9
9
  config.action_view.field_error_proc = proc { |html_tag, _| html_tag.html_safe }
10
10
 
11
11
  config.to_prepare do
@@ -16,7 +16,7 @@ module Auther
16
16
 
17
17
  initializer "auther.initialize" do |app|
18
18
  app.config.assets.precompile.append "auther/application.css" unless Rails.env.test?
19
- app.config.app_middleware.use Gatekeeper, app.config.auther_settings
19
+ app.config.app_middleware.use Gatekeeper, app.config.auther
20
20
  app.config.filter_parameters += %i[login password]
21
21
  end
22
22
  end
@@ -2,7 +2,6 @@
2
2
 
3
3
  module Auther
4
4
  # Rack middleware that guards access to sensitive routes.
5
- # rubocop:disable Metrics/ClassLength
6
5
  class Gatekeeper
7
6
  attr_reader :application, :environment, :settings
8
7
 
@@ -28,13 +27,9 @@ module Auther
28
27
 
29
28
  private
30
29
 
31
- def session
32
- environment.fetch "rack.session"
33
- end
30
+ def session = environment.fetch "rack.session"
34
31
 
35
- def request
36
- Rack::Request.new environment
37
- end
32
+ def request = Rack::Request.new environment
38
33
 
39
34
  def response
40
35
  status, headers, body = application.call environment
@@ -77,9 +72,7 @@ module Auther
77
72
  account
78
73
  end
79
74
 
80
- def clean_paths paths
81
- paths.map { |path| path.chomp "/" }
82
- end
75
+ def clean_paths(paths) = paths.map { |path| path.chomp "/" }
83
76
 
84
77
  def excluded_paths
85
78
  paths = settings.accounts.map { |account| clean_paths account.fetch(:paths) }
@@ -134,5 +127,4 @@ module Auther
134
127
  end
135
128
  end
136
129
  end
137
- # rubocop:enable Metrics/ClassLength
138
130
  end
@@ -5,13 +5,9 @@ module Auther
5
5
  class Keymaster
6
6
  attr_reader :account_name
7
7
 
8
- def self.namespace
9
- "auther"
10
- end
8
+ def self.namespace = "auther"
11
9
 
12
- def self.redirect_url_key delimiter: "_"
13
- [namespace, "redirect", "url"] * delimiter
14
- end
10
+ def self.redirect_url_key(delimiter: "_") = [namespace, "redirect", "url"] * delimiter
15
11
 
16
12
  def self.get_account_name session = {}
17
13
  matching_keys = session.keys.select { |key| key.to_s =~ /auther.+login/ }
@@ -28,13 +24,9 @@ module Auther
28
24
  @account_name = account_name
29
25
  end
30
26
 
31
- def login_key
32
- build_key "login"
33
- end
27
+ def login_key = build_key "login"
34
28
 
35
- def password_key
36
- build_key "password"
37
- end
29
+ def password_key = build_key "password"
38
30
 
39
31
  private
40
32
 
@@ -3,7 +3,7 @@
3
3
  module Auther
4
4
  # Represents Auther settings.
5
5
  Settings = Struct.new :title, :label, :secret, :accounts, :url, :logger, keyword_init: true do
6
- def initialize *arguments
6
+ def initialize(*)
7
7
  super
8
8
 
9
9
  self[:title] ||= "Authorization"
@@ -11,11 +11,9 @@ module Auther
11
11
  self[:secret] ||= ""
12
12
  self[:accounts] ||= []
13
13
  self[:url] ||= "/login"
14
- self[:logger] ||= Auther::NullLogger.new STDOUT
14
+ self[:logger] ||= LOGGER
15
15
  end
16
16
 
17
- def find_account name
18
- accounts.find { |account| account.fetch(:name) == name }
19
- end
17
+ def find_account(name) = accounts.find { |account| account.fetch(:name) == name }
20
18
  end
21
19
  end
data/lib/auther.rb CHANGED
@@ -5,6 +5,9 @@ require "auther/cipher"
5
5
  require "auther/engine"
6
6
  require "auther/gatekeeper"
7
7
  require "auther/keymaster"
8
- require "auther/null_logger"
9
8
  require "auther/settings"
10
- require "slim-rails"
9
+ require "logger"
10
+
11
+ module Auther
12
+ LOGGER = Logger.new(nil).freeze
13
+ end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- Rails.application.config.auther_settings = {
3
+ Rails.application.config.auther = {
4
4
  accounts: [
5
5
  {
6
6
  name: "admin",
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: auther
3
3
  version: !ruby/object:Gem::Version
4
- version: 15.0.2
4
+ version: 16.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brooke Kuhlmann
@@ -35,7 +35,7 @@ cert_chain:
35
35
  3n5C8/6Zh9DYTkpcwPSuIfAga6wf4nXc9m6JAw8AuMLaiWN/r/2s4zJsUHYERJEu
36
36
  gZGm4JqtuSg8pYjPeIJxS960owq+SfuC+jxqmRA54BisFCv/0VOJi7tiJVY=
37
37
  -----END CERTIFICATE-----
38
- date: 2023-11-15 00:00:00.000000000 Z
38
+ date: 2024-01-01 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: rails
@@ -43,56 +43,28 @@ dependencies:
43
43
  requirements:
44
44
  - - "~>"
45
45
  - !ruby/object:Gem::Version
46
- version: '7.0'
46
+ version: '7.1'
47
47
  type: :runtime
48
48
  prerelease: false
49
49
  version_requirements: !ruby/object:Gem::Requirement
50
50
  requirements:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: '7.0'
53
+ version: '7.1'
54
54
  - !ruby/object:Gem::Dependency
55
55
  name: refinements
56
56
  requirement: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: '11.0'
60
+ version: '12.0'
61
61
  type: :runtime
62
62
  prerelease: false
63
63
  version_requirements: !ruby/object:Gem::Requirement
64
64
  requirements:
65
65
  - - "~>"
66
66
  - !ruby/object:Gem::Version
67
- version: '11.0'
68
- - !ruby/object:Gem::Dependency
69
- name: sass-rails
70
- requirement: !ruby/object:Gem::Requirement
71
- requirements:
72
- - - "~>"
73
- - !ruby/object:Gem::Version
74
- version: '6.0'
75
- type: :runtime
76
- prerelease: false
77
- version_requirements: !ruby/object:Gem::Requirement
78
- requirements:
79
- - - "~>"
80
- - !ruby/object:Gem::Version
81
- version: '6.0'
82
- - !ruby/object:Gem::Dependency
83
- name: slim-rails
84
- requirement: !ruby/object:Gem::Requirement
85
- requirements:
86
- - - "~>"
87
- - !ruby/object:Gem::Version
88
- version: '3.5'
89
- type: :runtime
90
- prerelease: false
91
- version_requirements: !ruby/object:Gem::Requirement
92
- requirements:
93
- - - "~>"
94
- - !ruby/object:Gem::Version
95
- version: '3.5'
67
+ version: '12.0'
96
68
  description:
97
69
  email:
98
70
  - brooke@alchemists.io
@@ -104,14 +76,13 @@ extra_rdoc_files:
104
76
  files:
105
77
  - LICENSE.adoc
106
78
  - README.adoc
107
- - app/assets/stylesheets/auther/application.scss
108
- - app/assets/stylesheets/auther/auther.scss
79
+ - app/assets/stylesheets/auther/application.css
109
80
  - app/controllers/auther/base_controller.rb
110
81
  - app/controllers/auther/session_controller.rb
111
82
  - app/models/auther/account.rb
112
83
  - app/presenters/auther/account.rb
113
- - app/views/auther/session/new.html.slim
114
- - app/views/layouts/auther/auth.html.slim
84
+ - app/views/auther/session/new.html.erb
85
+ - app/views/layouts/auther/auth.html.erb
115
86
  - auther.gemspec
116
87
  - config/routes.rb
117
88
  - lib/auther.rb
@@ -120,7 +91,6 @@ files:
120
91
  - lib/auther/engine.rb
121
92
  - lib/auther/gatekeeper.rb
122
93
  - lib/auther/keymaster.rb
123
- - lib/auther/null_logger.rb
124
94
  - lib/auther/settings.rb
125
95
  - lib/generators/auther/credentials/credentials_generator.rb
126
96
  - lib/generators/auther/install/install_generator.rb
@@ -142,10 +112,7 @@ require_paths:
142
112
  - lib
143
113
  required_ruby_version: !ruby/object:Gem::Requirement
144
114
  requirements:
145
- - - ">="
146
- - !ruby/object:Gem::Version
147
- version: '3.2'
148
- - - "<="
115
+ - - "~>"
149
116
  - !ruby/object:Gem::Version
150
117
  version: '3.3'
151
118
  required_rubygems_version: !ruby/object:Gem::Requirement
@@ -154,7 +121,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
154
121
  - !ruby/object:Gem::Version
155
122
  version: '0'
156
123
  requirements: []
157
- rubygems_version: 3.4.22
124
+ rubygems_version: 3.5.3
158
125
  signing_key:
159
126
  specification_version: 4
160
127
  summary: Enhances Rails with multi-account, form-based, database-less, application-wide
metadata.gz.sig CHANGED
Binary file
@@ -1 +0,0 @@
1
- @import "auther";
@@ -1,112 +0,0 @@
1
- $auther-blue-light: hsla(215, 55%, 54%, 1.00);
2
- $auther-blue-dark: hsla(214, 58%, 38%, 1.00);
3
- $auther-red: hsla(9, 87%, 54%, 1.00);
4
- $auther-white: hsla(0, 0%, 100%, 1.00);
5
- $auther-grey-light: hsla(0, 0%, 65%, 1.00);
6
- $auther-grey-dark: hsla(240, 1%, 30%, 1.00);
7
-
8
- $auther-font-family: "Verdana", sans-serif;
9
-
10
- @mixin border_radius($value: 0.3rem) {
11
- border-top-left-radius: $value;
12
- border-top-right-radius: $value;
13
- border-bottom-right-radius: $value;
14
- border-bottom-left-radius: $value;
15
- }
16
-
17
- .auther-page {
18
- display: flex;
19
- font-family: $auther-font-family;
20
- }
21
-
22
- .auther-body {
23
- align-content: center;
24
- display: flex;
25
- justify-content: center;
26
- height: 100%;
27
- width: 100%;
28
- }
29
-
30
- .auther-content {
31
- display: flex;
32
- flex-direction: column;
33
- }
34
-
35
- .auther-label {
36
- font-size: 2em;
37
- font-weight: 400;
38
- text-align: center;
39
- }
40
-
41
- .auther-form {
42
- display: flex;
43
- flex-direction: column;
44
- }
45
-
46
- .auther-form-section {
47
- display: flex;
48
- flex-direction: column;
49
- margin: 0 0 0.5rem 0;
50
- }
51
-
52
- .auther-form-group {
53
- display: flex;
54
- flex-direction: column;
55
- }
56
-
57
- .auther-form-input {
58
- @include border_radius();
59
-
60
- color: $auther-grey-dark;
61
- border: 0.09rem solid $auther-grey-light;
62
- display: flex;
63
- font-size: 0.9rem;
64
- padding: 0.5rem;
65
- outline: none;
66
- }
67
-
68
- .auther-form-select {
69
- @include border_radius();
70
-
71
- background: transparent;
72
- color: $auther-grey-dark;
73
- display: flex;
74
- font-size: 1rem;
75
- height: 2rem;
76
- outline: none;
77
- }
78
-
79
- .auther-button {
80
- color: $auther-white;
81
- cursor: pointer;
82
- background-color: $auther-blue-light;
83
- border: none;
84
- font-size: 1rem;
85
- padding: 0.5rem;
86
- margin: 1rem 0 0 0;
87
- outline: none;
88
- width: 100%;
89
-
90
- &:active {
91
- background-color: $auther-blue-dark;
92
- }
93
- }
94
-
95
- .auther-error-message {
96
- background: $auther-red;
97
- color: $auther-white;
98
- display: none;
99
- padding: 0.3em 0.7em;
100
- }
101
-
102
- .auther-error {
103
- .auther-form-input {
104
- border-color: $auther-red;
105
- border-bottom-right-radius: 0;
106
- border-bottom-left-radius: 0;
107
- }
108
-
109
- .auther-error-message {
110
- display: flex;
111
- }
112
- }
@@ -1,22 +0,0 @@
1
- - content_for(:title) { @title }
2
-
3
- .auther-page
4
- .auther-body
5
- .auther-content
6
- h1.auther-label = "Authorization"
7
-
8
- = form_for @account, as: :account, url: "/auther/session", html: {class: "auther-form"} do |form|
9
- div class=%(auther-form-section #{"auther-error" if @account.error?(:login)})
10
- .auther-form-group
11
- = form.text_field :login, class: "auther-form-input", placeholder: "Login"
12
- small.auther-error-message = @account.error_message(:login)
13
-
14
- div class=%(auther-form-section #{"auther-error" if @account.error?(:password)})
15
- .auther-form-group
16
- = form.password_field :password, class: "auther-form-input", placeholder: "Password"
17
- small.auther-error-message = @account.error_message(:password)
18
-
19
- .auther-form-section
20
- = form.select :name, @account_options, {}, class: "auther-form-select"
21
-
22
- = form.submit "Login", class: "auther-button"
@@ -1,11 +0,0 @@
1
- doctype html
2
- html lang="en"
3
- head
4
- meta charset="utf-8"
5
- meta name="viewport" content="width=device-width, initial-scale=1.0"
6
- title = yield :title
7
-
8
- = stylesheet_link_tag "auther/application", media: "all"
9
- = csrf_meta_tags
10
- body
11
- = yield
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Auther
4
- # The default logger which purposefully does nothing at all.
5
- class NullLogger
6
- # rubocop:disable Style/RedundantInitialize
7
- def initialize _parameters
8
- end
9
- # rubocop:enable Style/RedundantInitialize
10
-
11
- def info _message
12
- end
13
-
14
- def warn _message
15
- end
16
-
17
- def error _message
18
- end
19
-
20
- def fatal _message
21
- end
22
-
23
- def debug _message
24
- end
25
- end
26
- end