Skip to content

Commit 8f3d0a0

Browse files
committed
Merge pull request #7 from alanquillin/AddUserAgentHttpHeaderToAllAPIRequests
[Delivers #43559413 #43555603 #43555605 #43555607] Added User Agent header and new IdentityProvider tests
2 parents b6f91ce + 742e1d4 commit 8f3d0a0

16 files changed

Lines changed: 280 additions & 25 deletions

lib/SimpleRestServices.dll

512 Bytes
Binary file not shown.

lib/SimpleRestServices.pdb

0 Bytes
Binary file not shown.

src/corelib/Core/Domain/NewUser.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
using System.Runtime.Serialization;
2+
3+
namespace net.openstack.Core.Domain
4+
{
5+
[DataContract]
6+
public class NewUser
7+
{
8+
[DataMember(Name = "OS-KSADM:password")]
9+
public string Password { get; set; }
10+
11+
[DataMember(Name = "id", EmitDefaultValue = true)]
12+
public string Id { get; set; }
13+
14+
[DataMember(Name = "username")]
15+
public string Username { get; set; }
16+
17+
[DataMember(Name = "email")]
18+
public string Email { get; set; }
19+
20+
[DataMember(Name = "enabled")]
21+
public bool Enabled { get; set; }
22+
}
23+
}

src/corelib/Core/Domain/User.cs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,19 @@ namespace net.openstack.Core.Domain
66
[DataContract]
77
public class User
88
{
9-
109
[DataMember(Name = "RAX-AUTH:defaultRegion")]
1110
public string DefaultRegion { get; set; }
1211

13-
[DataMember]
12+
[DataMember(Name="id", EmitDefaultValue = true)]
1413
public string Id { get; set; }
1514

16-
[DataMember]
15+
[DataMember(Name="username")]
1716
public string Username { get; set; }
1817

19-
[DataMember]
18+
[DataMember(Name="email")]
2019
public string Email { get; set; }
2120

22-
[DataMember]
21+
[DataMember(Name = "enabled")]
2322
public bool Enabled { get; set; }
24-
2523
}
2624
}

src/corelib/Core/IIdentityProvider.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public interface IIdentityProvider
1313
User[] ListUsers(CloudIdentity identity);
1414
User GetUserByName(CloudIdentity identity, string name);
1515
User GetUser(CloudIdentity identity, string id);
16-
User AddUser(CloudIdentity identity, User user);
16+
NewUser AddUser(CloudIdentity identity, NewUser user);
1717
User UpdateUser(CloudIdentity identity, User user);
1818
bool DeleteUser(CloudIdentity identity, string userId);
1919

src/corelib/Providers/Rackspace/GeographicalIdentityProvider.cs

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.Collections.Generic;
33
using System.Linq;
4+
using System.Reflection;
45
using Newtonsoft.Json;
56
using Newtonsoft.Json.Linq;
67
using SimpleRestServices.Client;
@@ -215,18 +216,27 @@ public User GetUser(CloudIdentity identity, string userId)
215216
return response.Data.User;
216217
}
217218

218-
public User AddUser(CloudIdentity identity, User user)
219+
public NewUser AddUser(CloudIdentity identity, NewUser newUser)
219220
{
220-
var response = ExecuteRESTRequest<UserResponse>(identity, "/v2.0/users", HttpMethod.POST, new AddUserRequest { User = user });
221+
newUser.Id = null;
222+
223+
var response = ExecuteRESTRequest<NewUserResponse>(identity, "/v2.0/users", HttpMethod.POST, new AddUserRequest { User = newUser });
221224

222225
if (response == null || response.Data == null)
223226
return null;
224227

225-
return response.Data.User;
228+
// If the user specifies a password, then the password will not be in the response, so we need to fill it in on the return object.
229+
if (string.IsNullOrWhiteSpace(response.Data.NewUser.Password))
230+
response.Data.NewUser.Password = newUser.Password;
231+
232+
return response.Data.NewUser;
226233
}
227234

228235
public User UpdateUser(CloudIdentity identity, User user)
229236
{
237+
if(user == null || string.IsNullOrWhiteSpace(user.Id))
238+
throw new ArgumentException("The User or User.Id values cannot be null.");
239+
230240
var urlPath = string.Format("v2.0/users/{0}", user.Id);
231241

232242
var updateUserRequest = new UpdateUserRequest { User = user };
@@ -378,7 +388,7 @@ protected virtual Response ExecuteRESTRequest(CloudIdentity identity, string url
378388
bodyStr = JsonConvert.SerializeObject(body, new JsonSerializerSettings{NullValueHandling = NullValueHandling.Ignore});
379389
}
380390

381-
var response = _restService.Execute<T>(url, method, bodyStr, headers, queryStringParameter, new JsonRequestSettings() { RetryCount = retryCount, RetryDelayInMS = retryDelay, Non200SuccessCodes = new[] { 401, 409 } });
391+
var response = _restService.Execute<T>(url, method, bodyStr, headers, queryStringParameter, new JsonRequestSettings() { RetryCount = retryCount, RetryDelayInMS = retryDelay, Non200SuccessCodes = new[] { 401, 409 }, UserAgent = ProviderBase.GetUserAgentHeaderValue()});
382392

383393
// on errors try again 1 time.
384394
if (response.StatusCode == 401 && !isRetry && !isTokenRequest)

src/corelib/Providers/Rackspace/IdentityProvider.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,10 +67,10 @@ public User GetUser(CloudIdentity identity, string userId)
6767
return provider.GetUser(identity, userId);
6868
}
6969

70-
public User AddUser(CloudIdentity identity, User user)
70+
public NewUser AddUser(CloudIdentity identity, NewUser newUser)
7171
{
7272
var provider = GetProvider(identity);
73-
return provider.AddUser(identity, user);
73+
return provider.AddUser(identity, newUser);
7474
}
7575

7676
public User UpdateUser(CloudIdentity identity, User user)
@@ -168,7 +168,7 @@ private IExtendedIdentityProvider GetProvider(CloudIdentity identity)
168168
var rackspaceCloudIdentity = identity as RackspaceCloudIdentity;
169169

170170
if (rackspaceCloudIdentity == null)
171-
throw new InvalidCloudIdentityException(string.Format("Invalid Identity object. Rackspace Identoty service requires an instance of type: {0}", typeof(RackspaceCloudIdentity)));
171+
_factory.Get(CloudInstance.Default);
172172

173173
return _factory.Get(rackspaceCloudIdentity.CloudInstance);
174174
}

src/corelib/Providers/Rackspace/Objects/Request/AddUserRequest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@ namespace net.openstack.Providers.Rackspace.Objects.Request
77
internal class AddUserRequest
88
{
99
[DataMember(Name = "user")]
10-
public User User { get; set; }
10+
public NewUser User { get; set; }
1111
}
1212
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
using System;
22
using System.Collections.Generic;
33
using System.Linq;
4+
using System.Runtime.Serialization;
45
using System.Text;
56
using net.openstack.Core.Domain;
67

78
namespace net.openstack.Providers.Rackspace.Objects.Request
89
{
10+
[DataContract]
911
internal class UpdateUserRequest
1012
{
13+
[DataMember(Name = "user")]
1114
public User User { get; set; }
1215
}
1316
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
using System.Runtime.Serialization;
2+
using net.openstack.Core.Domain;
3+
4+
namespace net.openstack.Providers.Rackspace.Objects.Response
5+
{
6+
[DataContract]
7+
internal class NewUserResponse
8+
{
9+
[DataMember(Name = "user")]
10+
public NewUser NewUser { get; set; }
11+
}
12+
}

0 commit comments

Comments
 (0)