prooflink_connect 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,3 @@
1
+ pkg/*
2
+ *.gem
3
+ .bundle
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source :gemcutter
2
+
3
+ # Specify your gem's dependencies in prooflink_connect.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,16 @@
1
+ Prooflink Connect
2
+ =================
3
+
4
+ Library to connect to the prooflink identity service provider
5
+
6
+ Installation
7
+ ------------
8
+
9
+ * Add gem 'prooflink_connect' to your Gemfile
10
+ * run 'bundle install'
11
+
12
+ Usage
13
+ -----
14
+
15
+ To make use of this gem you need an account on prooflink with an api key
16
+ Adjust the prooflink configuration settings in your environment.rb:
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,43 @@
1
+ module ProoflinkConnect
2
+ class Assertion
3
+ attr_accessor :token
4
+
5
+ def initialize(token)
6
+ @token = token
7
+ end
8
+
9
+ def auth_info
10
+ url = URI.parse("#{ProoflinkConnect.config.protocol}://#{[ProoflinkConnect.config.subdomain, ProoflinkConnect.config.provider_endpoint].compact.join(".")}/client_assertions/auth_info/")
11
+ # query = partial_query.dup
12
+ query = {}
13
+ query['format'] = 'json'
14
+ query['token'] = @token
15
+ query['api_key'] = ProoflinkConnect.config.api_key
16
+
17
+ http = Net::HTTP.new(url.host, url.port)
18
+
19
+ if url.scheme == 'https'
20
+ http.use_ssl = true
21
+ end
22
+ data = query.map { |k,v|
23
+ "#{CGI::escape k.to_s}=#{CGI::escape v.to_s}"
24
+ }.join('&')
25
+
26
+ resp = http.post(url.path, data)
27
+ if resp.code == '200'
28
+ begin
29
+ data = JSON.parse(resp.body)
30
+ return PortableContacts::Person.new(data['entry'])
31
+ rescue JSON::ParserError => err
32
+ raise AuthinfoException.new(resp), 'Unable to parse JSON response' + resp.body.inspect
33
+ end
34
+ else
35
+ raise AuthinfoException, "Unexpected HTTP status code from server: #{resp.code}"
36
+ end
37
+ # PortableContacts::Person.new(data['entry'])
38
+ end
39
+
40
+ class AuthinfoException < ::StandardError
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,17 @@
1
+ module ProoflinkConnect
2
+ class Configuration
3
+ include Singleton
4
+
5
+ @@defaults = {
6
+ :provider_endpoint => "prooflink.local",
7
+ :subdomain => "example",
8
+ :protocol => "https"
9
+ }
10
+
11
+ def initialize
12
+ @@defaults.each_pair{|k,v| self.send("#{k}=",v)}
13
+ end
14
+
15
+ attr_accessor :provider_endpoint, :subdomain, :api_key, :protocol
16
+ end
17
+ end
@@ -0,0 +1,10 @@
1
+ class Collection < Array
2
+ attr_reader :total_entries, :per_page, :start_index
3
+
4
+ def initialize(data)
5
+ super data["entry"].collect{|e| PortableContacts::Person.new(e) }
6
+ @total_entries=data["totalResults"].to_i
7
+ @per_page=data["itemsPerPage"].to_i
8
+ @start_index=data["startIndex"].to_i
9
+ end
10
+ end
@@ -0,0 +1,64 @@
1
+ module ProoflinkConnect::PortableContacts
2
+ class Person
3
+
4
+ # Encapsulates a person. Each of the portable contact and opensocial contact fields has a rubyfied (underscored) accessor method.
5
+ #
6
+ # @person = @person.display_name
7
+ #
8
+
9
+ def initialize(data={})
10
+ @data=data
11
+ end
12
+
13
+ SINGULAR_FIELDS = [
14
+ # Portable contacts singular fields
15
+ :id, :display_name, :name, :nickname, :published, :updated, :birthday, :anniversary,
16
+ :gender, :note, :preferred_username, :utc_offset, :connected,
17
+
18
+ # OpenSocial singular fields
19
+ :about_me, :body_type, :current_location, :drinker, :ethnicity, :fashion, :happiest_when,
20
+ :humor, :living_arrangement, :looking_for, :profile_song, :profile_video, :relationship_status,
21
+ :religion, :romance, :scared_of, :sexual_orientation, :smoker, :status
22
+ ]
23
+ PLURAL_FIELDS = [
24
+ # Portable contacts plural fields
25
+ :emails, :urls, :phone_numbers, :ims, :photos, :tags, :relationships, :addresses,
26
+ :organizations, :accounts,
27
+
28
+ # OpenSocial plural fields
29
+ :activities, :books, :cars, :children, :food, :heroes, :interests, :job_interests,
30
+ :languages, :languages_spoken, :movies, :music, :pets, :political_views, :quotes,
31
+ :sports, :turn_offs, :turn_ons, :tv_shows
32
+ ]
33
+
34
+ ENTRY_FIELDS = SINGULAR_FIELDS + PLURAL_FIELDS
35
+
36
+ def [](key)
37
+ @data[key.to_s.camelize(:lower)]
38
+ end
39
+
40
+ # primary email address
41
+ def email
42
+ @email||= begin
43
+ (emails.detect {|e| e['primary']=='true '} || emails.first)["value"] unless emails.empty?
44
+ end
45
+ end
46
+
47
+ def id
48
+ self["id"]
49
+ end
50
+
51
+ protected
52
+
53
+ def method_missing(method,*args)
54
+ if respond_to?(method)
55
+ return self[method]
56
+ end
57
+ super
58
+ end
59
+
60
+ def respond_to?(method)
61
+ ENTRY_FIELDS.include?(method) || @data.has_key?(method.to_s.camelize(:lower)) || super
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,5 @@
1
+ module ProoflinkConnect
2
+ module PortableContacts
3
+ autoload :Person, "prooflink_connect/portable_contacts/person"
4
+ end
5
+ end
@@ -0,0 +1,3 @@
1
+ module ProoflinkConnect
2
+ VERSION = "0.0.2"
3
+ end
@@ -0,0 +1,18 @@
1
+ module ProoflinkConnect
2
+ autoload :Configuration, "prooflink_connect/configuration"
3
+ autoload :Assertion, "prooflink_connect/assertion"
4
+ autoload :PortableContacts, "prooflink_connect/portable_contacts"
5
+
6
+ def self.config
7
+ Configuration.instance
8
+ end
9
+
10
+ def self.configure
11
+ yield config
12
+ end
13
+
14
+ def self.embedded(options = {})
15
+ options = {:subdomain => ProoflinkConnect.config.subdomain, :token_url => 'https://example.com/auth/callbacks'}.merge(options)
16
+ "<iframe src='#{ProoflinkConnect.config.protocol}://#{[options[:subdomain], ProoflinkConnect.config.provider_endpoint].compact.join(".")}/authentications/embedded?token_url=#{options[:token_url]}' style='width: 500px; height: 220px; border: 0;display: block' ></iframe>".html_safe
17
+ end
18
+ end
@@ -0,0 +1,22 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path("../lib/prooflink_connect/version", __FILE__)
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = "prooflink_connect"
6
+ s.version = ProoflinkConnect::VERSION
7
+ s.platform = Gem::Platform::RUBY
8
+ s.authors = ["Chiel Wester"]
9
+ s.email = "chiel.wester@holder.nl"
10
+ s.homepage = "https://github.com/chielwester/prooflink_connect"
11
+ s.summary = "Make a connection to the prooflink connect api"
12
+ s.description = "Make a connection to the prooflink connect api for single sign on authentication"
13
+
14
+ s.required_rubygems_version = ">= 1.3.6"
15
+ s.rubyforge_project = "prooflink_connect"
16
+
17
+ s.add_development_dependency "bundler", ">= 1.0.0"
18
+
19
+ s.files = `git ls-files`.split("\n")
20
+ s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
21
+ s.require_path = 'lib'
22
+ end
metadata ADDED
@@ -0,0 +1,95 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: prooflink_connect
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 2
10
+ version: 0.0.2
11
+ platform: ruby
12
+ authors:
13
+ - Chiel Wester
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-01-17 00:00:00 +01:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: bundler
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 23
30
+ segments:
31
+ - 1
32
+ - 0
33
+ - 0
34
+ version: 1.0.0
35
+ type: :development
36
+ version_requirements: *id001
37
+ description: Make a connection to the prooflink connect api for single sign on authentication
38
+ email: chiel.wester@holder.nl
39
+ executables: []
40
+
41
+ extensions: []
42
+
43
+ extra_rdoc_files: []
44
+
45
+ files:
46
+ - .gitignore
47
+ - Gemfile
48
+ - README.md
49
+ - Rakefile
50
+ - lib/prooflink_connect.rb
51
+ - lib/prooflink_connect/assertion.rb
52
+ - lib/prooflink_connect/configuration.rb
53
+ - lib/prooflink_connect/portable_contacts.rb
54
+ - lib/prooflink_connect/portable_contacts/collection.rb
55
+ - lib/prooflink_connect/portable_contacts/person.rb
56
+ - lib/prooflink_connect/version.rb
57
+ - prooflink_connect.gemspec
58
+ has_rdoc: true
59
+ homepage: https://github.com/chielwester/prooflink_connect
60
+ licenses: []
61
+
62
+ post_install_message:
63
+ rdoc_options: []
64
+
65
+ require_paths:
66
+ - lib
67
+ required_ruby_version: !ruby/object:Gem::Requirement
68
+ none: false
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ hash: 3
73
+ segments:
74
+ - 0
75
+ version: "0"
76
+ required_rubygems_version: !ruby/object:Gem::Requirement
77
+ none: false
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ hash: 23
82
+ segments:
83
+ - 1
84
+ - 3
85
+ - 6
86
+ version: 1.3.6
87
+ requirements: []
88
+
89
+ rubyforge_project: prooflink_connect
90
+ rubygems_version: 1.4.1
91
+ signing_key:
92
+ specification_version: 3
93
+ summary: Make a connection to the prooflink connect api
94
+ test_files: []
95
+