stormpath-sdk 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. data/Gemfile +4 -0
  2. data/README.md +24 -0
  3. data/Rakefile +16 -0
  4. data/lib/stormpath-sdk.rb +49 -0
  5. data/lib/stormpath-sdk/auth/authentication_result.rb +17 -0
  6. data/lib/stormpath-sdk/auth/basic_authenticator.rb +42 -0
  7. data/lib/stormpath-sdk/auth/basic_login_attempt.rb +30 -0
  8. data/lib/stormpath-sdk/auth/username_password_request.rb +43 -0
  9. data/lib/stormpath-sdk/client/api_key.rb +18 -0
  10. data/lib/stormpath-sdk/client/client.rb +23 -0
  11. data/lib/stormpath-sdk/client/client_builder.rb +291 -0
  12. data/lib/stormpath-sdk/ds/data_store.rb +150 -0
  13. data/lib/stormpath-sdk/ds/resource_factory.rb +22 -0
  14. data/lib/stormpath-sdk/http/authc/sauthc1_signer.rb +216 -0
  15. data/lib/stormpath-sdk/http/http_client_request_executor.rb +69 -0
  16. data/lib/stormpath-sdk/http/request.rb +83 -0
  17. data/lib/stormpath-sdk/http/response.rb +35 -0
  18. data/lib/stormpath-sdk/resource/account.rb +110 -0
  19. data/lib/stormpath-sdk/resource/account_list.rb +17 -0
  20. data/lib/stormpath-sdk/resource/application.rb +95 -0
  21. data/lib/stormpath-sdk/resource/application_list.rb +17 -0
  22. data/lib/stormpath-sdk/resource/collection_resource.rb +76 -0
  23. data/lib/stormpath-sdk/resource/directory.rb +76 -0
  24. data/lib/stormpath-sdk/resource/directory_list.rb +15 -0
  25. data/lib/stormpath-sdk/resource/email_verification_token.rb +11 -0
  26. data/lib/stormpath-sdk/resource/error.rb +42 -0
  27. data/lib/stormpath-sdk/resource/group.rb +73 -0
  28. data/lib/stormpath-sdk/resource/group_list.rb +18 -0
  29. data/lib/stormpath-sdk/resource/group_membership.rb +55 -0
  30. data/lib/stormpath-sdk/resource/group_membership_list.rb +17 -0
  31. data/lib/stormpath-sdk/resource/instance_resource.rb +13 -0
  32. data/lib/stormpath-sdk/resource/password_reset_token.rb +27 -0
  33. data/lib/stormpath-sdk/resource/resource.rb +173 -0
  34. data/lib/stormpath-sdk/resource/resource_error.rb +32 -0
  35. data/lib/stormpath-sdk/resource/status.rb +19 -0
  36. data/lib/stormpath-sdk/resource/tenant.rb +55 -0
  37. data/lib/stormpath-sdk/resource/utils.rb +16 -0
  38. data/lib/stormpath-sdk/util/assert.rb +26 -0
  39. data/lib/stormpath-sdk/util/hash.rb +17 -0
  40. data/lib/stormpath-sdk/util/request_utils.rb +57 -0
  41. data/lib/stormpath-sdk/version.rb +4 -0
  42. data/stormpath-sdk.gemspec +29 -0
  43. data/test/client/client.yml +16 -0
  44. data/test/client/clientbuilder_spec.rb +176 -0
  45. data/test/client/read_spec.rb +243 -0
  46. data/test/client/write_spec.rb +315 -0
  47. metadata +226 -0
@@ -0,0 +1,83 @@
1
+ module Stormpath
2
+
3
+ module Http
4
+
5
+ class Request
6
+
7
+ include Stormpath::Util
8
+
9
+ attr_accessor :http_method, :href, :query_string, :http_headers, :body
10
+
11
+ def initialize(http_method, href, query_string, http_headers, body)
12
+
13
+ splitted = href.split '?'
14
+
15
+ if query_string.nil?
16
+ @query_string = Hash.new
17
+ else
18
+ @query_string = query_string
19
+ end
20
+
21
+ if !splitted.nil? and splitted.length > 1
22
+ @href = splitted[0]
23
+ query_string_str = splitted[1]
24
+
25
+ query_string_arr = query_string_str.split '&'
26
+
27
+ query_string_arr.each do |pair|
28
+
29
+ pair_arr = pair.split '='
30
+
31
+ @query_string.store pair_arr[0], pair_arr[1]
32
+
33
+ end
34
+
35
+ else
36
+
37
+ @href = href
38
+
39
+ end
40
+
41
+ @http_method = http_method.upcase
42
+ @http_headers = http_headers
43
+ @body = body
44
+
45
+ if !body.nil?
46
+ @http_headers.store 'Content-Length', @body.length
47
+ end
48
+
49
+ end
50
+
51
+ def resource_uri
52
+ URI href
53
+ end
54
+
55
+ def to_s_query_string canonical
56
+
57
+ result = ''
58
+
59
+ if !@query_string.empty?
60
+
61
+ @query_string.each do |key, value|
62
+
63
+ enc_key = RequestUtils.encode_url key, false, canonical
64
+ enc_value = RequestUtils.encode_url value, false, canonical
65
+
66
+ if !result.empty?
67
+ result << '&'
68
+ end
69
+
70
+ result << enc_key << '='<< enc_value
71
+
72
+ end
73
+
74
+ end
75
+
76
+ result
77
+ end
78
+
79
+ end
80
+
81
+ end
82
+
83
+ end
@@ -0,0 +1,35 @@
1
+ module Stormpath
2
+
3
+ module Http
4
+
5
+ class Response
6
+
7
+ attr_reader :http_status, :headers, :body
8
+ attr_writer :headers
9
+
10
+ def initialize http_status, content_type, body, content_length
11
+ @http_status = http_status
12
+ @headers = HTTP::Message::Headers.new
13
+ @body = body
14
+ @headers.content_type = content_type
15
+ @headers.body_size = content_length
16
+ end
17
+
18
+
19
+ def client_error?
20
+ http_status >= 400 and http_status < 500
21
+ end
22
+
23
+ def server_error?
24
+ http_status >= 500 and http_status < 600
25
+ end
26
+
27
+ def error?
28
+ client_error? or server_error?
29
+ end
30
+
31
+ end
32
+
33
+ end
34
+
35
+ end
@@ -0,0 +1,110 @@
1
+ module Stormpath
2
+
3
+ module Resource
4
+
5
+ class Account < InstanceResource
6
+
7
+ include Status
8
+
9
+ USERNAME = "username"
10
+ EMAIL = "email"
11
+ PASSWORD = "password"
12
+ GIVEN_NAME = "givenName"
13
+ MIDDLE_NAME = "middleName"
14
+ SURNAME = "surname"
15
+ STATUS = "status"
16
+ GROUPS = "groups"
17
+ DIRECTORY = "directory"
18
+ EMAIL_VERIFICATION_TOKEN = "emailVerificationToken"
19
+ GROUP_MEMBERSHIPS = "groupMemberships"
20
+
21
+ def get_username
22
+ get_property USERNAME
23
+ end
24
+
25
+ def set_username username
26
+ set_property USERNAME, username
27
+ end
28
+
29
+ def get_email
30
+ get_property EMAIL
31
+ end
32
+
33
+ def set_email email
34
+ set_property EMAIL, email
35
+ end
36
+
37
+ def set_password password
38
+ set_property PASSWORD, password
39
+ end
40
+
41
+ def get_given_name
42
+ get_property GIVEN_NAME
43
+ end
44
+
45
+ def set_given_name given_name
46
+ set_property GIVEN_NAME, given_name
47
+ end
48
+
49
+ def get_middle_name
50
+ get_property MIDDLE_NAME
51
+ end
52
+
53
+ def set_middle_name middle_name
54
+ set_property MIDDLE_NAME, middle_name
55
+ end
56
+
57
+ def get_surname
58
+ get_property SURNAME
59
+ end
60
+
61
+ def set_surname surname
62
+ set_property SURNAME, surname
63
+ end
64
+
65
+ def get_status
66
+ value = get_property STATUS
67
+
68
+ if !value.nil?
69
+ value = value.upcase
70
+ end
71
+
72
+ value
73
+ end
74
+
75
+ def set_status status
76
+
77
+ if get_status_hash.has_key? status
78
+ set_property STATUS, get_status_hash[status]
79
+ end
80
+
81
+ end
82
+
83
+ def get_groups
84
+ get_resource_property GROUPS, GroupList
85
+ end
86
+
87
+ def get_directory
88
+ get_resource_property DIRECTORY, Directory
89
+ end
90
+
91
+ def get_email_verification_token
92
+ get_resource_property EMAIL_VERIFICATION_TOKEN, EmailVerificationToken
93
+ end
94
+
95
+ def add_group group
96
+
97
+ group_membership = data_store.instantiate GroupMembership, nil
98
+ group_membership.create self, group
99
+
100
+ end
101
+
102
+ def get_group_memberships
103
+ get_resource_property GROUP_MEMBERSHIPS, GroupMembershipList
104
+ end
105
+
106
+ end
107
+
108
+ end
109
+
110
+ end
@@ -0,0 +1,17 @@
1
+ module Stormpath
2
+
3
+ module Resource
4
+
5
+ class AccountList < CollectionResource
6
+
7
+ def get_item_type
8
+
9
+ Account
10
+
11
+ end
12
+ end
13
+
14
+ end
15
+
16
+ end
17
+
@@ -0,0 +1,95 @@
1
+ module Stormpath
2
+
3
+ module Resource
4
+
5
+ class Application < InstanceResource
6
+
7
+ include Status
8
+
9
+ NAME = "name"
10
+ DESCRIPTION = "description"
11
+ STATUS = "status"
12
+ TENANT = "tenant"
13
+ ACCOUNTS = "accounts"
14
+ PASSWORD_RESET_TOKENS = "passwordResetTokens"
15
+
16
+ def get_name
17
+ get_property NAME
18
+ end
19
+
20
+ def set_name name
21
+ set_property NAME, name
22
+ end
23
+
24
+ def get_description
25
+ get_property DESCRIPTION
26
+ end
27
+
28
+ def set_description description
29
+ set_property DESCRIPTION, description
30
+ end
31
+
32
+ def get_status
33
+ value = get_property STATUS
34
+
35
+ if !value.nil?
36
+ value = value.upcase
37
+ end
38
+
39
+ value
40
+ end
41
+
42
+ def set_status status
43
+
44
+ if get_status_hash.has_key? status
45
+ set_property STATUS, get_status_hash[status]
46
+ end
47
+
48
+ end
49
+
50
+ def get_tenant
51
+ get_resource_property TENANT, Tenant
52
+ end
53
+
54
+ def get_accounts
55
+
56
+ get_resource_property ACCOUNTS, AccountList
57
+ end
58
+
59
+ def get_password_reset_token
60
+ get_resource_property PASSWORD_RESET_TOKENS, PasswordResetToken
61
+ end
62
+
63
+ def create_password_reset_token email
64
+
65
+ href = get_password_reset_token.get_href
66
+
67
+ password_reset_props = Hash.new
68
+ password_reset_props.store 'email', email
69
+
70
+ password_reset_token = data_store.instantiate PasswordResetToken, password_reset_props
71
+
72
+ data_store.create href, password_reset_token, PasswordResetToken
73
+
74
+ end
75
+
76
+ def verify_password_reset_token token
77
+
78
+ href = get_password_reset_token.get_href
79
+ href += '/' + token
80
+
81
+ data_store.get_resource href, PasswordResetToken
82
+
83
+ end
84
+
85
+ def authenticate request
86
+ response = Stormpath::Authentication::BasicAuthenticator.new data_store
87
+ response.authenticate get_href, request
88
+ end
89
+
90
+ end
91
+
92
+ end
93
+
94
+ end
95
+
@@ -0,0 +1,17 @@
1
+ module Stormpath
2
+
3
+ module Resource
4
+
5
+ class ApplicationList < CollectionResource
6
+
7
+ def get_item_type
8
+
9
+ Application
10
+
11
+ end
12
+
13
+ end
14
+
15
+ end
16
+ end
17
+
@@ -0,0 +1,76 @@
1
+ module Stormpath
2
+
3
+ module Resource
4
+
5
+ class CollectionResource < Resource
6
+
7
+ OFFSET = "offset"
8
+ LIMIT = "limit"
9
+ ITEMS = "items"
10
+
11
+ def each(&block)
12
+ get_current_page.items.each(&block)
13
+ end
14
+
15
+ protected
16
+
17
+ def get_offset
18
+ get_property OFFSET
19
+ end
20
+
21
+ def get_limit
22
+ get_property LIMIT
23
+ end
24
+
25
+ def get_current_page
26
+
27
+ value = get_property ITEMS
28
+ items = to_resource_array value
29
+
30
+ Page.new get_offset, get_limit, items
31
+ end
32
+
33
+ def to_resource clazz, properties
34
+ self.data_store.instantiate clazz, properties
35
+ end
36
+
37
+ private
38
+
39
+ def to_resource_array vals
40
+
41
+ clazz = get_item_type
42
+ items = Array.new
43
+
44
+ if vals.is_a? Array
45
+
46
+ i = 0
47
+ vals.each { |val|
48
+ resource = to_resource clazz, val
49
+ items[i] = resource
50
+ i = i + 1
51
+ }
52
+
53
+ end
54
+
55
+ items
56
+
57
+ end
58
+
59
+ end
60
+
61
+
62
+ class Page
63
+
64
+ attr_reader :offset, :limit, :items
65
+
66
+ def initialize offset, limit, items
67
+ @offset = offset
68
+ @limit = limit
69
+ @items = items
70
+ end
71
+
72
+ end
73
+
74
+ end
75
+ end
76
+
@@ -0,0 +1,76 @@
1
+ module Stormpath
2
+
3
+ module Resource
4
+
5
+ class Directory < InstanceResource
6
+
7
+ include Status
8
+
9
+ NAME = "name"
10
+ DESCRIPTION = "description"
11
+ STATUS = "status"
12
+ ACCOUNTS = "accounts"
13
+ GROUPS = "groups"
14
+ TENANT = "tenant"
15
+
16
+ def get_name
17
+ get_property NAME
18
+ end
19
+
20
+ def set_name name
21
+ set_property NAME, name
22
+ end
23
+
24
+ def get_description
25
+ get_property DESCRIPTION
26
+ end
27
+
28
+ def set_description description
29
+ set_property DESCRIPTION, description
30
+ end
31
+
32
+ def get_status
33
+ value = get_property STATUS
34
+
35
+ if !value.nil?
36
+ value = value.upcase
37
+ end
38
+
39
+ value
40
+ end
41
+
42
+ def set_status status
43
+
44
+ if get_status_hash.has_key? status
45
+ set_property STATUS, get_status_hash[status]
46
+ end
47
+
48
+ end
49
+
50
+ def create_account account, *registration_workflow_enabled
51
+ accounts = get_accounts
52
+ href = accounts.get_href
53
+ if !registration_workflow_enabled.nil? and !registration_workflow_enabled.empty?
54
+ href += '?registrationWorkflowEnabled=' + registration_workflow_enabled[0].to_s
55
+ end
56
+
57
+ data_store.create href, account, Account
58
+ end
59
+
60
+ def get_accounts
61
+ get_resource_property ACCOUNTS, AccountList
62
+ end
63
+
64
+ def get_groups
65
+ get_resource_property GROUPS, GroupList
66
+ end
67
+
68
+ def get_tenant
69
+ get_resource_property TENANT, Tenant
70
+ end
71
+
72
+ end
73
+
74
+ end
75
+ end
76
+