diff --git a/ACUtils.AXRepository/ACUtils.AXRepository.csproj b/ACUtils.AXRepository/ACUtils.AXRepository.csproj index 9a71e8e..5c5931a 100644 --- a/ACUtils.AXRepository/ACUtils.AXRepository.csproj +++ b/ACUtils.AXRepository/ACUtils.AXRepository.csproj @@ -5,8 +5,8 @@ Andrea Cattaneo true false - 1.0.0.140 - 1.0.0.140 + 1.0.0.141 + 1.0.0.141 Utility per gestione classi documentali Arxivar it true diff --git a/ACUtils.AXRepository/ArxivarRepository.cs b/ACUtils.AXRepository/ArxivarRepository.cs index f7c3693..4dfff97 100644 --- a/ACUtils.AXRepository/ArxivarRepository.cs +++ b/ACUtils.AXRepository/ArxivarRepository.cs @@ -32,8 +32,10 @@ public class ArxivarRepository private long? _impersonateUserId; private string _token; - private string _refresh_token; + private string _refreshToken; + private string _tokenManagement; + private string _refreshTokenManagement; private WCFConnectorManager GetWcf() { @@ -71,7 +73,7 @@ private WCFConnectorManager GetWcf() private ArxivarNextManagement.Client.Configuration configurationManagement => new ArxivarNextManagement.Client.Configuration() { - ApiKey = new Dictionary() { { "Authorization", _token } }, + ApiKey = new Dictionary() { { "Authorization", _tokenManagement } }, ApiKeyPrefix = new Dictionary() { { "Authorization", "Bearer" } }, BasePath = _managementUrl, }; @@ -264,25 +266,48 @@ public ACUtils.AXRepository.ArxivarNext.Model.UserProfileDTO GetAddressBookEntry #endregion #region auth - private void Login() + + private AuthenticationTokenDTO _login(List scopeList = null) { - if (string.IsNullOrEmpty(_token)) // TODO: test se è necessario il refresh del token - { - var authApi = new ArxivarNext.Api.AuthenticationApi(_apiUrl); - var auth = authApi.AuthenticationGetToken( + var authApi = new ArxivarNext.Api.AuthenticationApi(_apiUrl); + var auth = authApi.AuthenticationGetToken( new AuthenticationTokenRequestDTO( username: _username, password: _password, clientId: _appId, clientSecret: _appSecret, - impersonateUserId: _impersonateUserId.HasValue ? System.Convert.ToInt32(_impersonateUserId) : default(int?) + impersonateUserId: _impersonateUserId.HasValue ? System.Convert.ToInt32(_impersonateUserId) : default(int?), + scopeList: scopeList ) ); + return auth; + } + + + private void Login() + { + if (string.IsNullOrEmpty(_token)) // TODO: test se è necessario il refresh del token + { + var auth = _login(); _token = auth.AccessToken; - _refresh_token = auth.RefreshToken; + _refreshToken = auth.RefreshToken; + } + } + + + private void LoginManagment() + { + if (string.IsNullOrEmpty(_tokenManagement)) + { + var scopeList = new List { "ArxManagement" }; + var auth = _login(scopeList); + _tokenManagement = auth.AccessToken; + _refreshTokenManagement = auth.RefreshToken; } } + + #endregion @@ -1166,7 +1191,7 @@ public UserInfoDTO UserGet(string aoo, string username) throw new NotFoundException($"user '{aoo}\\{username}' not found"); } var userApi = new ArxivarNext.Api.UsersApi(configuration); - var userId = result.Columns.GetValue("UTENTE"); + var userId = result.GetValue("UTENTE"); return userApi.UsersGet(userId); } @@ -1198,6 +1223,7 @@ public bool UserCreate( { this._logger?.Information($"Creazione utente {username}"); Login(); + LoginManagment(); var userApi = new ArxivarNext.Api.UsersApi(configuration); var usersManagementApi = new ArxivarNextManagement.Api.UsersManagementApi(configurationManagement); @@ -1222,6 +1248,9 @@ public bool UserCreate( Type3 = 0, } ); + + + if (groups != null) { var existingGroups = userApi.UsersGetGroups(); @@ -1275,13 +1304,15 @@ public bool UserCreateIfNotExists( public bool UserAddGroup(string aoo, string username, string groupName) { Login(); + LoginManagment(); var usersManagementApi = new ArxivarNextManagement.Api.UsersManagementApi(configurationManagement); var userApi = new ArxivarNext.Api.UsersApi(configuration); var user = UserGet(aoo, username); var existingGroups = userApi.UsersGetGroups(); - var group = existingGroups.FirstOrDefault(g => - g.Description.Equals(groupName, StringComparison.CurrentCultureIgnoreCase)); + var group = existingGroups.FirstOrDefault( + g => g.Description.Equals(groupName, StringComparison.CurrentCultureIgnoreCase) + ); if (group == null) { throw new NotFoundException($"Arxivar group '{groupName}' not found"); @@ -1289,7 +1320,6 @@ public bool UserAddGroup(string aoo, string username, string groupName) var userGroups = usersManagementApi.UsersManagementGetUserGroups(user.User); if (!userGroups.Any(g => g.Description.Equals(groupName, StringComparison.CurrentCultureIgnoreCase))) { - userGroups.Add(new UserSimpleDTO(user: group.Id, description: group.Description)); usersManagementApi.UsersManagementSetUserGroups(userId: user.User, groups: userGroups); return true; diff --git a/ACUtils.AXRepository/AxExt.cs b/ACUtils.AXRepository/AxExt.cs index ffd0a82..a459390 100644 --- a/ACUtils.AXRepository/AxExt.cs +++ b/ACUtils.AXRepository/AxExt.cs @@ -12,12 +12,12 @@ public static class AxExt public static EditProfileSchemaDTO SetState(this EditProfileSchemaDTO self, string stateName) { - self.SetState(stateName); + self.Fields.SetState(stateName); return self; } public static MaskProfileSchemaDTO SetState(this MaskProfileSchemaDTO self, string stateName) { - self.SetState(stateName); + self.Fields.SetState(stateName); return self; } public static void SetState(this List fields, string stateName) @@ -210,7 +210,7 @@ public static void SetField(this List fields, string name, object public static MaskProfileSchemaDTO SetToField(this MaskProfileSchemaDTO self, UserProfileDTO value) { - self.SetToField(value); + self.Fields.SetToField(value); return self; } @@ -228,7 +228,7 @@ public static void SetToField(this List fields, UserProfileDTO val public static MaskProfileSchemaDTO SetFromField(this MaskProfileSchemaDTO self, UserProfileDTO value) { - self.SetFromField(value); + self.Fields.SetFromField(value); return self; } public static void SetFromField(this List fields, UserProfileDTO value) @@ -236,21 +236,32 @@ public static void SetFromField(this List fields, UserProfileDTO v fields.SetField("From", value); } - public static UserSearchDTO SetString(this UserSearchDTO self, string name, object value, int operator_ = 3) + public static UserSearchDTO SetString(this UserSearchDTO self, string name, string value, int operator_ = 3) { self.StringFields.Set(name: name, value: value, operator_: operator_); return self; } - public static void Set(this List fields, string name, object value, int operator_ = 3) + public static void Set(this List fields, string name, string value, int operator_ = 3) { var field = fields.First(i => i.Name.Equals(name, StringComparison.CurrentCultureIgnoreCase)); field.Operator = operator_; - field.Valore1 = Convert.ToString(value); + field.Valore1 = value; } + public static UserSearchDTO SetInt(this UserSearchDTO self, string name, int? value, int operator_ = 3) + { + self.IntFields.Set(name: name, value: value, operator_: operator_); + return self; + } + public static void Set(this List fields, string name, int? value, int operator_ = 3) + { + var field = fields.First(i => i.Name.Equals(name, StringComparison.CurrentCultureIgnoreCase)); + field.Operator = operator_; + field.Valore1 = value; + } public static SearchDTO Set(this SearchDTO self, string name, object value, int operator_ = 3) { - self.Set(name: name, value: value, operator_: operator_); + self.Fields.Set(name: name, value: value, operator_: operator_); return self; } public static void Set(this List fields, string name, object value, int operator_ = 3)