LiveIdentity 0.0.1 → 0.0.2

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.
@@ -22,14 +22,45 @@ class LiveIdentity
22
22
  :hrAuthRequired => :HRESULT,
23
23
  :hrRequestStatus => :HRESULT,
24
24
  :hrUIError => :HRESULT,
25
- :wszWebFlowUrl => :LPWSTR,
25
+ :wszWebFlowUrl => :LPWSTR
26
26
  })
27
+
28
+ def AuthState
29
+ self[:hrAuthState]
30
+ end
31
+
32
+ def AuthRequired
33
+ self[:hrAuthRequired]
34
+ end
35
+
36
+ def RequestStatus
37
+ self[:hrRequestStatus]
38
+ end
39
+
40
+ def WebFlowUrl
41
+ @WebFlowUrl ||= read_wide_string(self[:wszWebFlowUrl])
42
+ end
43
+
44
+ def WebFlowUrl= (webFlowUrl)
45
+ @WebFlowUrl = webFlowUrl
46
+ self[:wszWebFlowUrl] = StringToWSTR(webFlowUrl)
47
+ end
48
+
49
+ def to_s
50
+ "AuthState: #{WinCommon::Errors::HRESULT::GetNameCode(AuthState())}\n" +
51
+ "AuthRequired: #{WinCommon::Errors::HRESULT::GetNameCode(AuthRequired())}\n" +
52
+ "RequestStatus: #{WinCommon::Errors::HRESULT::GetNameCode(RequestStatus())}"
53
+ end
54
+
55
+ def IsAuthenticated?
56
+ RequestStatus() >= 0 && AuthState() >= 0
57
+ end
27
58
  end
28
59
 
29
60
  class PASSPORT_NAME_VALUE_PAIR < FFI::Struct
30
61
  layout({
31
62
  :szName => :LPWSTR,
32
- :szValue => :LPWSTR,
63
+ :szValue => :LPWSTR
33
64
  })
34
65
  end
35
66
 
@@ -59,28 +90,209 @@ class LiveIdentity
59
90
 
60
91
  class RSTParams < FFI::Struct
61
92
  layout({
62
- :cbSize => :DWORD,
93
+ :cbSize => :DWORD,
63
94
  :wzServiceTarget => :LPCWSTR,
64
95
  :wzServicePolicy => :LPCWSTR,
65
- :dwTokenFlags => :DWORD,
66
- :dwTokenParam => :DWORD
96
+ :dwTokenFlags => :DWORD,
97
+ :dwTokenParam => :DWORD
67
98
  })
99
+
100
+ def self.build(data, address = nil)
101
+ param = IDCRL::RSTParams.new(address)
102
+ param[:cbSize] = self.size
103
+ param[:wzServiceTarget] = FFI::MemoryPointer.from_string(StringToWSTR(data[:ServiceTarget].to_s))
104
+ param[:wzServicePolicy] = FFI::MemoryPointer.from_string(StringToWSTR(data[:ServicePolicy].to_s))
105
+ param[:dwTokenFlags] = 0
106
+ param[:dwTokenParam] = 0
107
+ param[:dwTokenFlags] = data[:TokenFlags] if data.has_key?(:TokenFlags)
108
+ param[:dwTokenParam] = data[:TokenParam] if data.has_key?(:TokenParam)
109
+ param
110
+ end
68
111
  end
69
112
 
70
113
  class PASSPORTCREDCUSTOMUI < FFI::Struct
71
114
  layout({
72
- :cElements => :LONG,
115
+ :cElements => :LONG,
73
116
  :customValues => :LPWSTR
74
117
  })
75
118
  end
76
119
 
77
120
  class MultiRSTParams < FFI::Struct
78
121
  layout({
79
- :dwRSTParamsCount => :DWORD,
80
- :pRSTParams => :pointer, # *RSTParams[]
122
+ :dwRSTParamsCount => :DWORD,
123
+ :pRSTParams => :pointer, # *RSTParams[]
81
124
  :dwMultiRSTParamsFlags => :DWORD
82
125
  })
83
126
  end
127
+
128
+ class PassportCredUIInfo < FFI::Struct
129
+ layout({
130
+ :hwndParent => :HWND,
131
+ :ptPosition => IDCRL::POINT,
132
+ :szSize => IDCRL::SIZE,
133
+ :bShow => :BOOL
134
+ })
135
+ end
136
+
137
+ class SSO_UIParam < FFI::Struct
138
+ layout({
139
+ :cbsize => :DWORD,
140
+ :dwReserved => :DWORD,
141
+ :hwndParent => :HWND,
142
+ :pReserved => :UINT_PTR,
143
+ :wszServiceName => :LPCWSTR,
144
+ :rgbReserved => [:BYTE, 16],
145
+ :rghReserved => [:UINT_PTR, 45]
146
+ })
147
+ end
148
+
149
+ class CertSet < FFI::Struct
150
+ layout({
151
+ :pCertContext => :PCERT_CONTEXT,
152
+ :pCACertContext => :PCERT_CONTEXT,
153
+ :cbPOP => :DWORD,
154
+ :pbPOP => :PBYTE
155
+ })
156
+
157
+ def self.build
158
+ certSet = CertSet.new
159
+ certSet[:pCertContext] = FFI::MemoryPointer.new(:pointer)
160
+ certSet[:pCACertContext] = FFI::MemoryPointer.new(:pointer)
161
+ certSet[:cbPOP] = 0
162
+ certSet[:pbPOP] = FFI::MemoryPointer.new(:PBYTE)
163
+ certSet
164
+ end
165
+
166
+ def CertContext
167
+ @CertContext ||= CERT_CONTEXT.new(self[:pCertContext])
168
+ end
169
+
170
+ def CertContext= (certContext)
171
+ @CertContext = certContext
172
+ self[:pCertContext] = FFI::MemoryPointer.new(certContext)
173
+ end
174
+
175
+ def CACertContext
176
+ @CertContext ||= CERT_CONTEXT.new(self[:pCACertContext])
177
+ end
178
+
179
+ def CACertContext= (caCertContext)
180
+ @CACertContext = caCertContext
181
+ self[:pCACertContext] = FFI::MemoryPointer.new(caCertContext)
182
+ end
183
+
184
+ def POP
185
+ @POP ||= self[:pbPOP].read_string(self[:cbPOP])
186
+ end
187
+
188
+ def POP= (pop)
189
+ @POP = pop
190
+ self[:cbPOP] = pop.bytesize
191
+ self[:pbPOP] = FFI::MemoryPointer.from_string(pop)
192
+ end
193
+
194
+ end
195
+
196
+ class MD5Data < FFI::Struct
197
+ layout({
198
+ :szMD5Url => :LPWSTR,
199
+ :szPostData => :LPWSTR
200
+ })
201
+
202
+ def MD5Url
203
+ @MD5Url ||= read_wide_string(self[:szMD5Url])
204
+ end
205
+
206
+ def MD5Url= (md5Url)
207
+ @MD5Url = md5Url
208
+ self[:szMD5Url] = StringToWSTR(md5Url)
209
+ end
210
+
211
+ def PostData
212
+ @PostData ||= read_wide_string(self[:szPostData])
213
+ end
214
+
215
+ def PostData= (postData)
216
+ @PostData = postData
217
+ self[:szPostData] = StringToWSTR(postData)
218
+ end
219
+ end
220
+
221
+ class SHA1 < FFI::Struct
222
+ layout({
223
+ :szSHA1Url => :LPWSTR,
224
+ :szSHA1PostData => :LPWSTR
225
+ })
226
+
227
+ def SHA1Url
228
+ @SHA1Url ||= read_wide_string(self[:szSHA1Url])
229
+ end
230
+
231
+ def SHA1Url= (sha1Url)
232
+ @SHA1Url = sha1Url
233
+ self[:szSHA1Url] = StringToWSTR(sha1Url)
234
+ end
235
+
236
+ def SHA1PostData
237
+ @SHA1PostData ||= read_wide_string(self[:szSHA1PostData])
238
+ end
239
+
240
+ def SHA1PostData= (sha1PostData)
241
+ @SHA1PostData = sha1PostData
242
+ self[:szSHA1PostData] = StringToWSTR(sha1PostData)
243
+ end
244
+ end
245
+
246
+ class AuthState < FFI::Struct
247
+ layout({
248
+ :szToken => :LPWSTR,
249
+ :dwResultFlags => SERVICETOKENFLAGS,
250
+ :pbSessionKey => :LPWSTR,
251
+ :dwSessionKeyLength => :DWORD
252
+ })
253
+
254
+ def Token
255
+ @Token ||= read_wide_string(self[:szToken]) unless self[:szToken].null?
256
+ end
257
+
258
+ def Token= (token)
259
+ @Token = token
260
+ self[:szToken] = StringToWSTR(token)
261
+ end
262
+
263
+ def ResultFlags
264
+ self[:dwResultFlags]
265
+ end
266
+
267
+ def ResultFlags= (resultFlags)
268
+ self[:dwResultFlags] = resultFlags
269
+ end
270
+
271
+ def SessionKey
272
+ @SessionKey ||= read_wide_string(self[:pbSessionKey]) unless self[:pbSessionKey].null?
273
+ end
274
+
275
+ def SessionKey= (sessionKey)
276
+ @SessionKey = sessionKey
277
+ self[:pbSessionKey] = StringToWSTR(sessionKey)
278
+ end
279
+
280
+ def SessionKeyLength
281
+ self[:dwSessionKeyLength]
282
+ end
283
+
284
+ def SessionKeyLength= (sessionKeyLength)
285
+ self[:dwSessionKeyLength] = sessionKeyLength
286
+ end
287
+
288
+ def to_s
289
+ "Token: #{Token()}\n" +
290
+ "ResultFlags: #{ResultFlags()}\n" +
291
+ "SessionKey: #{SessionKey()}\n" +
292
+ "SessionKeyLength: #{SessionKeyLength()}"
293
+ end
294
+ end
295
+
84
296
  end
85
297
  end
86
298
  end
@@ -1,3 +1,3 @@
1
1
  class LiveIdentity
2
- VERSION = '0.0.1'
2
+ VERSION = '0.0.2'
3
3
  end
@@ -18,9 +18,13 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ['lib']
20
20
 
21
- spec.add_runtime_dependency 'WinCommon'
21
+ spec.add_runtime_dependency 'WinCommon', '>= 0.0.2'
22
22
  spec.add_runtime_dependency 'ffi'
23
+ spec.add_runtime_dependency 'nokogiri'
23
24
 
24
25
  spec.add_development_dependency 'bundler', '~> 1.6'
25
26
  spec.add_development_dependency 'rake'
27
+ spec.add_development_dependency 'rspec'
28
+ spec.add_development_dependency 'simplecov'
29
+ spec.add_development_dependency 'yard'
26
30
  end
metadata CHANGED
@@ -1,17 +1,31 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: LiveIdentity
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dāvis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-08 00:00:00.000000000 Z
11
+ date: 2014-05-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: WinCommon
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 0.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: 0.0.2
27
+ - !ruby/object:Gem::Dependency
28
+ name: ffi
15
29
  requirement: !ruby/object:Gem::Requirement
16
30
  requirements:
17
31
  - - ">="
@@ -25,7 +39,7 @@ dependencies:
25
39
  - !ruby/object:Gem::Version
26
40
  version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
- name: ffi
42
+ name: nokogiri
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
45
  - - ">="
@@ -66,6 +80,48 @@ dependencies:
66
80
  - - ">="
67
81
  - !ruby/object:Gem::Version
68
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: simplecov
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: yard
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
69
125
  description: Library utilizing IDCRL for Microsoft Windows Live ID authentication.
70
126
  email:
71
127
  - davispuh@gmail.com