mais-access 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 8fd2f7a2d92c5596bcfdb2d2111be8fe2fc4459fabe3d6e115b7b47e8a074ec1
4
+ data.tar.gz: 5aaed8b2a843e12cf11c76b049d9cf7647f43e95fe4e7d38e08c876e27f6cf34
5
+ SHA512:
6
+ metadata.gz: '089bc20e78a520d9998191dfc2613634088d29650af93b624cc40da7eaf302671cd8ae0eb776b250deda471a2f39f4eaecd1545cd6dc8af0167521e4c3fbe09f'
7
+ data.tar.gz: ef599828d6c87e138e406407ac98cd96fee6c897978db6b875b88fa53849e07e7583c35595c76e56ffad7593b971ba78a2f2b1cf05ec26570184b051e1407f63
data/.gitattributes ADDED
@@ -0,0 +1,2 @@
1
+ # Auto detect text files and perform LF normalization
2
+ * text=auto
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ /node_modules
2
+ *.gem
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "https://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in parceler.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,11 @@
1
+ # MAIS Access
2
+
3
+ A simple gem that enforces HTTP Basic Authentication for account holders in the MAIS business management and information system.
4
+
5
+ ## License
6
+
7
+ Copyright � 2019 [Elias Gabriel](https://eliasfgabriel.com/), [sdbase](http://sdbase.com/)
8
+
9
+ This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
10
+
11
+ To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/ or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
@@ -0,0 +1,18 @@
1
+ module MaisAccess
2
+ class Railtie < ::Rails::Railtie
3
+ initializer('mais.middleware') do |app|
4
+ # Hook into ActionController's loading process
5
+ ActiveSupport.on_load(:action_controller) do
6
+ require 'mais-access/dispatcher'
7
+ include MaisAccess::Dispatcher
8
+
9
+ # Mark the `mais_user` reader method (defined in Mais::Dispatcher) as a
10
+ # helper so that it can be accessed from a view
11
+ helper_method :mais_user
12
+
13
+ # Force a MAIS user authentication check on every request
14
+ before_action :authenticate_mais_user!
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,33 @@
1
+ module MaisAccess
2
+ module Dispatcher
3
+ require 'net/http'
4
+ require 'uri'
5
+ require 'json'
6
+ require 'mais-access/user'
7
+
8
+ attr_reader :mais_user
9
+
10
+ MAIS_CLIENT = ENV['MAIS_CLIENT']
11
+
12
+ def authenticate_mais_user!
13
+ # Prompt the user for HTTP Basic credentials, or authenticate if they are cached in the session
14
+ authenticate_or_request_with_http_basic("access - MAIS - #{MAIS_CLIENT}") do |login, password|
15
+ begin
16
+ # Get the credentials and POST them to `accounts.scenycwork.net/authenticate`
17
+ response = Net::HTTP.post_form(URI("#{ENV['MAIS_ACCOUNTS_HOSTNAME']}/authenticate"), { "username" => login, "password" => password })
18
+ # Parse the JSON response
19
+ body = JSON.parse(response.body)
20
+
21
+ # If the user is valid, set the current mais user and passes the filter action
22
+ if response.code == '200' && body["authenticated"]
23
+ @mais_user = MaisAccess::User.new(body["user"])
24
+ return true
25
+ end
26
+ rescue => e
27
+ Rails.logger.info(e)
28
+ # Something went wrong, so save our butts and don't them in.
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module MaisAccess
4
+ # An abstract class used to store the currently authenticated MAIS user. An instance of
5
+ # this class is initialized everytime `authenticate_mais_user!` completes successfully.
6
+ # The current MAIS user can be accessed anytime via the `mais_user` method.
7
+ class User
8
+ attr_reader :username, :full_name
9
+
10
+ def initialize(*params)
11
+ params = params[0]
12
+ @username = params["username"]
13
+ @full_name = params["full_name"]
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,27 @@
1
+ lib = File.expand_path("lib", __dir__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+
4
+ Gem::Specification.new do |spec|
5
+ spec.name = "mais-access"
6
+ spec.version = "1.0.6"
7
+ spec.platform = Gem::Platform::RUBY
8
+ spec.author = "Elias Gabriel"
9
+ spec.email = "me@eliasfgabriel.com"
10
+ spec.summary = "A MAIS(tm) authentication middleware."
11
+ spec.description = "A simple gem that provides HTTP Basic Authentication for users registered with the MAIS(tm) accounts application."
12
+ spec.homepage = "https://github.com/sdbase/mais-access"
13
+ spec.license = "CC-BY-NC-SA-4.0"
14
+
15
+ spec.metadata["homepage_uri"] = spec.metadata["source_code_uri"] = spec.homepage
16
+ spec.extra_rdoc_files = ["README.md"]
17
+
18
+ spec.require_paths = ["lib"]
19
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
20
+ `git ls-files -z`.split("\x0")
21
+ end
22
+
23
+ spec.add_dependency "rails", '>= 4.0.2'
24
+
25
+ spec.add_development_dependency "bundler", '~> 2.0'
26
+ spec.add_development_dependency "rake", '~> 10.0'
27
+ end
metadata ADDED
@@ -0,0 +1,97 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mais-access
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.6
5
+ platform: ruby
6
+ authors:
7
+ - Elias Gabriel
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-02-18 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 4.0.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 4.0.2
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '2.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '2.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '10.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '10.0'
55
+ description: A simple gem that provides HTTP Basic Authentication for users registered
56
+ with the MAIS(tm) accounts application.
57
+ email: me@eliasfgabriel.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files:
61
+ - README.md
62
+ files:
63
+ - ".gitattributes"
64
+ - ".gitignore"
65
+ - Gemfile
66
+ - README.md
67
+ - lib/mais-access.rb
68
+ - lib/mais-access/dispatcher.rb
69
+ - lib/mais-access/user.rb
70
+ - mais-access.gemspec
71
+ homepage: https://github.com/sdbase/mais-access
72
+ licenses:
73
+ - CC-BY-NC-SA-4.0
74
+ metadata:
75
+ source_code_uri: https://github.com/sdbase/mais-access
76
+ homepage_uri: https://github.com/sdbase/mais-access
77
+ post_install_message:
78
+ rdoc_options: []
79
+ require_paths:
80
+ - lib
81
+ required_ruby_version: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ required_rubygems_version: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ requirements: []
92
+ rubyforge_project:
93
+ rubygems_version: 2.7.6.2
94
+ signing_key:
95
+ specification_version: 4
96
+ summary: A MAIS(tm) authentication middleware.
97
+ test_files: []