oxd-ruby 0.1.3

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.
Files changed (81) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +3 -0
  5. data/CODE_OF_CONDUCT.md +13 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.md +116 -0
  9. data/Rakefile +7 -0
  10. data/demosite/.gitignore +17 -0
  11. data/demosite/Gemfile +49 -0
  12. data/demosite/Gemfile.lock +190 -0
  13. data/demosite/README.md +172 -0
  14. data/demosite/Rakefile +6 -0
  15. data/demosite/app/assets/images/.keep +0 -0
  16. data/demosite/app/assets/javascripts/application.js +17 -0
  17. data/demosite/app/assets/javascripts/bootstrap.js.coffee +3 -0
  18. data/demosite/app/assets/stylesheets/application.css +16 -0
  19. data/demosite/app/assets/stylesheets/bootstrap_and_overrides.css +7 -0
  20. data/demosite/app/controllers/application_controller.rb +14 -0
  21. data/demosite/app/controllers/concerns/.keep +0 -0
  22. data/demosite/app/controllers/home_controller.rb +38 -0
  23. data/demosite/app/helpers/application_helper.rb +2 -0
  24. data/demosite/app/mailers/.keep +0 -0
  25. data/demosite/app/models/.keep +0 -0
  26. data/demosite/app/models/concerns/.keep +0 -0
  27. data/demosite/app/views/home/index.html.erb +127 -0
  28. data/demosite/app/views/layouts/application.html.erb +14 -0
  29. data/demosite/bin/bundle +3 -0
  30. data/demosite/bin/rails +9 -0
  31. data/demosite/bin/rake +9 -0
  32. data/demosite/bin/setup +29 -0
  33. data/demosite/bin/spring +15 -0
  34. data/demosite/config.ru +4 -0
  35. data/demosite/config/application.rb +26 -0
  36. data/demosite/config/boot.rb +3 -0
  37. data/demosite/config/database.yml +25 -0
  38. data/demosite/config/environment.rb +5 -0
  39. data/demosite/config/environments/development.rb +41 -0
  40. data/demosite/config/environments/production.rb +79 -0
  41. data/demosite/config/environments/test.rb +42 -0
  42. data/demosite/config/initializers/assets.rb +11 -0
  43. data/demosite/config/initializers/backtrace_silencers.rb +7 -0
  44. data/demosite/config/initializers/cookies_serializer.rb +3 -0
  45. data/demosite/config/initializers/filter_parameter_logging.rb +4 -0
  46. data/demosite/config/initializers/inflections.rb +16 -0
  47. data/demosite/config/initializers/mime_types.rb +4 -0
  48. data/demosite/config/initializers/oxd_config.rb +19 -0
  49. data/demosite/config/initializers/session_store.rb +3 -0
  50. data/demosite/config/initializers/wrap_parameters.rb +14 -0
  51. data/demosite/config/locales/en.bootstrap.yml +23 -0
  52. data/demosite/config/locales/en.yml +23 -0
  53. data/demosite/config/routes.rb +62 -0
  54. data/demosite/config/secrets.yml +22 -0
  55. data/demosite/db/seeds.rb +7 -0
  56. data/demosite/lib/assets/.keep +0 -0
  57. data/demosite/lib/tasks/.keep +0 -0
  58. data/demosite/log/.keep +0 -0
  59. data/demosite/public/404.html +67 -0
  60. data/demosite/public/422.html +67 -0
  61. data/demosite/public/500.html +66 -0
  62. data/demosite/public/favicon.ico +0 -0
  63. data/demosite/public/robots.txt +5 -0
  64. data/demosite/test/controllers/.keep +0 -0
  65. data/demosite/test/fixtures/.keep +0 -0
  66. data/demosite/test/helpers/.keep +0 -0
  67. data/demosite/test/integration/.keep +0 -0
  68. data/demosite/test/mailers/.keep +0 -0
  69. data/demosite/test/models/.keep +0 -0
  70. data/demosite/test/test_helper.rb +10 -0
  71. data/demosite/vendor/assets/javascripts/.keep +0 -0
  72. data/demosite/vendor/assets/stylesheets/.keep +0 -0
  73. data/lib/generators/oxd/config_generator.rb +22 -0
  74. data/lib/generators/oxd/templates/oxd_config.rb +19 -0
  75. data/lib/oxd-ruby.rb +11 -0
  76. data/lib/oxd/client_oxd_commands.rb +147 -0
  77. data/lib/oxd/config.rb +94 -0
  78. data/lib/oxd/oxd_connector.rb +133 -0
  79. data/lib/oxd/version.rb +4 -0
  80. data/oxd-ruby.gemspec +24 -0
  81. metadata +180 -0
data/lib/oxd/config.rb ADDED
@@ -0,0 +1,94 @@
1
+ require 'active_support/configurable'
2
+
3
+ # @author Inderpal Singh
4
+ # @note supports oxd-version 2.4.3
5
+ module Oxd
6
+
7
+ # Configures global settings for Oxd
8
+ # @yield config
9
+ # @example
10
+ # Oxd.configure do |config|
11
+ # config.oxd_host_ip = '127.0.0.1'
12
+ # end
13
+ def self.configure(&block)
14
+ @config ||= Oxd::Configuration.new
15
+ if block_given?
16
+ yield(@config)
17
+ end
18
+ end
19
+
20
+ # Global settings for Oxd
21
+ def self.config
22
+ @config
23
+ end
24
+
25
+ # This class holds all the information about the client and the OP metadata
26
+ class Configuration
27
+ include ActiveSupport::Configurable
28
+ config_accessor :oxd_host_ip
29
+ config_accessor :oxd_host_port
30
+ config_accessor :application_type
31
+ config_accessor :authorization_redirect_uri
32
+ config_accessor :redirect_uris
33
+ config_accessor :post_logout_redirect_uri
34
+ config_accessor :client_logout_uris
35
+ config_accessor :logout_redirect_uri
36
+ config_accessor :grant_types
37
+ config_accessor :acr_values
38
+ config_accessor :client_jwks_uri
39
+ config_accessor :client_token_endpoint_auth_method
40
+ config_accessor :client_request_uris
41
+ config_accessor :scope
42
+ config_accessor :contacts
43
+ config_accessor :response_types
44
+ config_accessor :oxd_id
45
+
46
+ # define param_name writer
47
+ def param_name
48
+ config.param_name.respond_to?(:call) ? config.param_name.call : config.param_name
49
+ end
50
+
51
+ writer, line = 'def param_name=(value); config.param_name = value; end', __LINE__
52
+ singleton_class.class_eval writer, __FILE__, line
53
+ class_eval writer, __FILE__, line
54
+ end
55
+
56
+ #[oxd]
57
+ # oxd_host_ip : the host is generally localhost as all communication are carried out between oxd-ruby and oxd server using sockets.
58
+ # oxd_host_port: the port is the one which is configured during the oxd deployment
59
+
60
+ #[client]
61
+ # application_type: the app_type is generally 'web' although 'native' can be used for native app
62
+ # authorization_redirect_uri: [REQUIRED] this is the primary redirect URL of the website or app
63
+ # redirect_uris: [OPTIONAL, LIST] other redirect uris that the website can use - given as comma seperated values.
64
+ # => the first one is always your primary uri set in authorization_redirect_uri
65
+ # post_logout_redirect_uri: [OPTIONAL] website's public uri to call upon logout
66
+ # client_logout_uris: [REQUIRED, LIST] logout uris of the client
67
+ # grant_types: [OPTIONAL, LIST] grant types to "authorization_code" or "refresh_token"
68
+ # acr_values: [OPTIONAL, LIST] the values are "basic" and "duo"
69
+ # client_jwks_uri: [OPTIONAL]
70
+ # client_token_endpoint_auth_method: [OPTIONAL]
71
+ # client_request_uris: [OPTIONAL]
72
+ # contacts: [OPTIONAL, LIST]
73
+
74
+ # default values for config
75
+ configure do |config|
76
+ config.oxd_host_ip = '127.0.0.1'
77
+ config.oxd_host_port = 8099
78
+ config.application_type = "web"
79
+ config.authorization_redirect_uri = "https://gluu.example.com/callback"
80
+ config.redirect_uris = ["https://gluu.example.com/callback","https://gluu.example.com/callback2"]
81
+ config.post_logout_redirect_uri = "https://gluu.example.com/logout"
82
+ config.client_logout_uris = ["https://gluu.example.com/callback"]
83
+ config.logout_redirect_uri = 'https://gluu.example.com/logout'
84
+ config.grant_types = []
85
+ config.acr_values = [ "basic" ]
86
+ config.client_jwks_uri = ""
87
+ config.client_token_endpoint_auth_method = ""
88
+ config.client_request_uris = []
89
+ config.scope = [ "openid", "profile" ]
90
+ config.contacts = ["example-email@gmail.com"]
91
+ config.response_types = ["code"]
92
+ config.oxd_id = ""
93
+ end
94
+ end
@@ -0,0 +1,133 @@
1
+ require 'socket'
2
+ require 'ipaddr'
3
+
4
+ # @author Inderpal Singh
5
+ # @note supports oxd-version 2.4.3
6
+ module Oxd
7
+
8
+ # A class which takes care of the socket communication with oxD Server.
9
+ class OxdConnector
10
+
11
+ # class constructor
12
+ def initialize
13
+ @command
14
+ @response_json
15
+ @response_object
16
+ @data = Hash.new
17
+ @params = Hash.new
18
+ @response_data = Hash.new
19
+ @configuration = Oxd.config
20
+ logger(:log_msg => "Problem with json data : authorization_redirect_uri can't be blank") if @configuration.authorization_redirect_uri.empty?
21
+ logger(:log_msg => "#{@configuration.oxd_host_ip} is not a valid IP address") if (IPAddr.new(@configuration.oxd_host_ip) rescue nil).nil?
22
+ logger(:log_msg => "#{@configuration.oxd_host_port} is not a valid port for socket. Port must be integer and between from 0 to 65535") if (!@configuration.oxd_host_port.is_a?(Integer) || (@configuration.oxd_host_port < 0 && @configuration.oxd_host_port > 65535))
23
+ end
24
+
25
+ # Checks the validity of command that is to be passed to oxd-server
26
+ def validate_command
27
+ command_types = ['get_authorization_url','update_site_registration', 'get_tokens_by_code','get_user_info', 'register_site', 'get_logout_uri','get_authorization_code']
28
+ if (!command_types.include?(@command))
29
+ logger(:log_msg => "Command: #{@command} does not exist! Exiting process.")
30
+ end
31
+ end
32
+
33
+ # method to communicate with the oxD server
34
+ # @param request [JSON] representation of the JSON command string
35
+ # @param char_count [Integer] number of characters to read from response
36
+ # @return response from the oxD Server
37
+ def oxd_socket_request(request, char_count = 8192)
38
+ host = @configuration.oxd_host_ip # The web server
39
+ port = @configuration.oxd_host_port # Default HTTP port
40
+
41
+ if(!socket = TCPSocket.new(host, port) ) # Connect to Oxd server
42
+ logger(:log_msg => "Socket Error : Couldn't connect to socket ")
43
+ else
44
+ logger(:log_msg => "Client: socket::socket_connect connected : #{request}", :error => "")
45
+ end
46
+
47
+ socket.print(request) # Send request
48
+ response = socket.recv(char_count) # Read response
49
+ if(response)
50
+ logger(:log_msg => "Client: oxd_socket_response: #{response}", :error => "")
51
+ else
52
+ logger(:log_msg => "Client: oxd_socket_response : Error socket reading process.")
53
+ end
54
+ # close connection
55
+ if(socket.close)
56
+ logger(:log_msg => "Client: oxd_socket_connection : disconnected.", :error => "")
57
+ end
58
+ return response
59
+ end
60
+
61
+ # method to send commands to the oxD server and to recieve the response via {#oxd_socket_request}
62
+ # @return [JSON] @response_object : response from the oxd server in JSON form
63
+ def request
64
+ validate_command
65
+ jsondata = getData.to_json
66
+ if(!is_json? (jsondata))
67
+ logger(:log_msg => "Sending parameters must be JSON. Exiting process.")
68
+ end
69
+ length = jsondata.length
70
+ if( length <= 0 )
71
+ logger(:log_msg => "JSON data length must be more than zero. Exiting process.")
72
+ else
73
+ length = length <= 999 ? sprintf('0%d', length) : length
74
+ end
75
+ @response_json = oxd_socket_request((length + jsondata).encode("UTF-8"))
76
+ @response_json.sub!(@response_json[0..3], "")
77
+
78
+ if (@response_json)
79
+ response = JSON.parse(@response_json)
80
+ if (response['status'] == 'error')
81
+ logger(:log_msg => "OxD Server Error : #{response['data']['error_description']}")
82
+ elsif (response['status'] == 'ok')
83
+ @response_object = JSON.parse(@response_json)
84
+ end
85
+ else
86
+ logger(:log_msg => "Response is empty. Exiting process.")
87
+ end
88
+ return @response_object
89
+ end
90
+
91
+ # extracts 'data' parameter from @response_object
92
+ # @return [Mixed] @response_data
93
+ def getResponseData
94
+ if (!@response_object)
95
+ @response_data = 'Data is empty';
96
+ else
97
+ @response_data = @response_object['data']
98
+ end
99
+ return @response_data
100
+ end
101
+
102
+ # combines command and command parameters for socket request
103
+ # @return [Array] @data
104
+ def getData
105
+ @data = {'command' => @command, 'params' => @params}
106
+ return @data
107
+ end
108
+
109
+ # checks whether the passed string is in JSON format or not
110
+ # @param string_to_validate [String]
111
+ # @return [Boolean]
112
+ def is_json? (string_to_validate)
113
+ begin
114
+ !!JSON.parse(string_to_validate)
115
+ rescue
116
+ false
117
+ end
118
+ end
119
+
120
+ # Logs server response and errors to log file
121
+ # @param log_msg [Hash] response to print in log file
122
+ # @param error [Hash] error message to print in log file
123
+ # @raise RuntimeError
124
+ def logger(args={})
125
+ # Initialize Log file
126
+ # Location : app_root/log/oxd-ruby.log
127
+ @logger ||= Logger.new("log/oxd-ruby.log")
128
+ @logger.info(args[:log_msg])
129
+
130
+ raise (args[:error] || args[:log_msg]) if args[:error] != ""
131
+ end
132
+ end
133
+ end
@@ -0,0 +1,4 @@
1
+ # Gem version
2
+ module Oxd
3
+ VERSION = "0.1.3"
4
+ end
data/oxd-ruby.gemspec ADDED
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'oxd/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "oxd-ruby"
8
+ spec.version = Oxd::VERSION
9
+ spec.authors = ["inderpal6785"]
10
+ spec.email = ["inderpal6785@gmail.com"]
11
+
12
+ spec.summary = %q{Ruby Client Library for Oxd Server - OpenID Connect Client RP Middleware, which organizes authentication and registration of users.}
13
+ spec.homepage = "https://github.com/GluuFederation/oxd-ruby"
14
+
15
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
16
+ spec.bindir = "exe"
17
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.add_development_dependency "bundler", "~> 1.8"
21
+ spec.add_development_dependency "rake", "~> 10.0"
22
+ spec.add_development_dependency "rspec"
23
+ spec.add_development_dependency "rspec-rails"
24
+ end
metadata ADDED
@@ -0,0 +1,180 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: oxd-ruby
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.3
5
+ platform: ruby
6
+ authors:
7
+ - inderpal6785
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2016-06-24 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.8'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.8'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec-rails
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description:
70
+ email:
71
+ - inderpal6785@gmail.com
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - ".gitignore"
77
+ - ".rspec"
78
+ - ".travis.yml"
79
+ - CODE_OF_CONDUCT.md
80
+ - Gemfile
81
+ - LICENSE.txt
82
+ - README.md
83
+ - Rakefile
84
+ - demosite/.gitignore
85
+ - demosite/Gemfile
86
+ - demosite/Gemfile.lock
87
+ - demosite/README.md
88
+ - demosite/Rakefile
89
+ - demosite/app/assets/images/.keep
90
+ - demosite/app/assets/javascripts/application.js
91
+ - demosite/app/assets/javascripts/bootstrap.js.coffee
92
+ - demosite/app/assets/stylesheets/application.css
93
+ - demosite/app/assets/stylesheets/bootstrap_and_overrides.css
94
+ - demosite/app/controllers/application_controller.rb
95
+ - demosite/app/controllers/concerns/.keep
96
+ - demosite/app/controllers/home_controller.rb
97
+ - demosite/app/helpers/application_helper.rb
98
+ - demosite/app/mailers/.keep
99
+ - demosite/app/models/.keep
100
+ - demosite/app/models/concerns/.keep
101
+ - demosite/app/views/home/index.html.erb
102
+ - demosite/app/views/layouts/application.html.erb
103
+ - demosite/bin/bundle
104
+ - demosite/bin/rails
105
+ - demosite/bin/rake
106
+ - demosite/bin/setup
107
+ - demosite/bin/spring
108
+ - demosite/config.ru
109
+ - demosite/config/application.rb
110
+ - demosite/config/boot.rb
111
+ - demosite/config/database.yml
112
+ - demosite/config/environment.rb
113
+ - demosite/config/environments/development.rb
114
+ - demosite/config/environments/production.rb
115
+ - demosite/config/environments/test.rb
116
+ - demosite/config/initializers/assets.rb
117
+ - demosite/config/initializers/backtrace_silencers.rb
118
+ - demosite/config/initializers/cookies_serializer.rb
119
+ - demosite/config/initializers/filter_parameter_logging.rb
120
+ - demosite/config/initializers/inflections.rb
121
+ - demosite/config/initializers/mime_types.rb
122
+ - demosite/config/initializers/oxd_config.rb
123
+ - demosite/config/initializers/session_store.rb
124
+ - demosite/config/initializers/wrap_parameters.rb
125
+ - demosite/config/locales/en.bootstrap.yml
126
+ - demosite/config/locales/en.yml
127
+ - demosite/config/routes.rb
128
+ - demosite/config/secrets.yml
129
+ - demosite/db/seeds.rb
130
+ - demosite/lib/assets/.keep
131
+ - demosite/lib/tasks/.keep
132
+ - demosite/log/.keep
133
+ - demosite/public/404.html
134
+ - demosite/public/422.html
135
+ - demosite/public/500.html
136
+ - demosite/public/favicon.ico
137
+ - demosite/public/robots.txt
138
+ - demosite/test/controllers/.keep
139
+ - demosite/test/fixtures/.keep
140
+ - demosite/test/helpers/.keep
141
+ - demosite/test/integration/.keep
142
+ - demosite/test/mailers/.keep
143
+ - demosite/test/models/.keep
144
+ - demosite/test/test_helper.rb
145
+ - demosite/vendor/assets/javascripts/.keep
146
+ - demosite/vendor/assets/stylesheets/.keep
147
+ - lib/generators/oxd/config_generator.rb
148
+ - lib/generators/oxd/templates/oxd_config.rb
149
+ - lib/oxd-ruby.rb
150
+ - lib/oxd/client_oxd_commands.rb
151
+ - lib/oxd/config.rb
152
+ - lib/oxd/oxd_connector.rb
153
+ - lib/oxd/version.rb
154
+ - oxd-ruby.gemspec
155
+ homepage: https://github.com/GluuFederation/oxd-ruby
156
+ licenses: []
157
+ metadata: {}
158
+ post_install_message:
159
+ rdoc_options: []
160
+ require_paths:
161
+ - lib
162
+ required_ruby_version: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ required_rubygems_version: !ruby/object:Gem::Requirement
168
+ requirements:
169
+ - - ">="
170
+ - !ruby/object:Gem::Version
171
+ version: '0'
172
+ requirements: []
173
+ rubyforge_project:
174
+ rubygems_version: 2.4.6
175
+ signing_key:
176
+ specification_version: 4
177
+ summary: Ruby Client Library for Oxd Server - OpenID Connect Client RP Middleware,
178
+ which organizes authentication and registration of users.
179
+ test_files: []
180
+ has_rdoc: