Skip to content
Snippets Groups Projects
Commit b1711334 authored by Marcel Nellesen's avatar Marcel Nellesen
Browse files

Merge branch 'Sprint/2020-14' into 'master'

Sprint/2020 14

See merge request coscine/api/sts!56
parents f8d541b7 b2452168
Branches
Tags v1.14.1
1 merge request!56Sprint/2020 14
......@@ -32,7 +32,7 @@ namespace Coscine.Api.STS.Controllers
switch (loginMethodClaim.Value)
{
case "orcid":
string orcidUrl = UrlGenerator.ORCiDRedirectUrl();
string orcidUrl = ORCiDHandler.GetORCiDOAuthUrl() + UrlGenerator.ORCiDRedirectUrl();
return Redirect(orcidUrl);
case "shibboleth":
string shibbolethUrl = UrlGenerator.ShibbolethRedirectUrl();
......
......@@ -9,9 +9,10 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Coscine.ActiveDirectory" Version="1.2.0-topic-861-mergea0001" />
<PackageReference Include="Coscine.ApiCommons" Version="1.8.0" />
<PackageReference Include="Coscine.Database" Version="1.22.0" />
<PackageReference Include="Coscine.Action" Version="1.14.0" />
<PackageReference Include="Coscine.ActiveDirectory" Version="1.2.0" />
<PackageReference Include="Coscine.ApiCommons" Version="1.9.0" />
<PackageReference Include="Coscine.Database" Version="1.22.2" />
<PackageReference Include="Microsoft.AspNetCore" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.Authentication" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.Abstractions" Version="2.2.0" />
......@@ -31,7 +32,7 @@
<PackageReference Include="System.DirectoryServices.AccountManagement" Version="4.6.0" />
<PackageReference Include="System.DirectoryServices.Protocols" Version="4.6.0" />
<PackageReference Include="Sustainsys.Saml2.AspNetCore2" Version="2.3.0" />
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="5.5.0" />
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="5.6.0" />
</ItemGroup>
<ItemGroup>
......
......@@ -36,7 +36,12 @@ namespace Coscine.Api.STS
.AddCookie()
.AddSaml2(options =>
{
options.SPOptions.EntityId = new EntityId(Program.MainUrl + "/Saml2");
options.SPOptions.EntityId = new EntityId(
Program.Configuration.GetStringAndWait(
"coscine/global/shibboleth/entityid",
Program.HostUrl + "/Shibboleth"
)
);
options.SPOptions.PublicOrigin = new Uri(Program.HostUrl);
options.SPOptions.ModulePath = Program.ApiPath + "/Saml2";
options.SPOptions.Compatibility.UnpackEntitiesDescriptorInIdentityProviderMetadata = true;
......
using Coscine.ActiveDirectory;
using Coscine.Action;
using Coscine.Action.EventArgs;
using Coscine.ActiveDirectory;
using Coscine.Configuration;
using Coscine.Database.DataModel;
using Coscine.Database.Models;
using LinqToDB.Tools;
......@@ -9,29 +12,42 @@ namespace Coscine.Api.STS.Utils
public class MergeUtil
{
private readonly ExternalIdModel _externalIdModel;
private readonly ProjectModel _projectModel;
private readonly ProjectRoleModel _projectRoleModel;
private readonly ResourceModel _resourceModel;
private readonly RoleModel _roleModel;
private readonly TOSModel _tosModel;
private readonly UserModel _userModel;
private readonly UserDisciplineModel _userDisciplineModel;
public MergeUtil()
private readonly Emitter _emitter;
public MergeUtil() : this(Program.Configuration)
{
}
public MergeUtil(IConfiguration configuration)
{
_externalIdModel = new ExternalIdModel();
_projectModel = new ProjectModel();
_projectRoleModel = new ProjectRoleModel();
_resourceModel = new ResourceModel();
_roleModel = new RoleModel();
_tosModel = new TOSModel();
_userModel = new UserModel();
_userDisciplineModel = new UserDisciplineModel();
_emitter = new Emitter(configuration);
}
public void MergeFromUserIntoUser(User mergeFromUser, User mergeIntoUser)
{
MergeExternalId(mergeIntoUser, mergeFromUser);
MergeProjectRole(mergeIntoUser, mergeFromUser);
MergeUserDiscipline(mergeIntoUser, mergeFromUser);
MergeResourceOwner(mergeIntoUser, mergeFromUser);
MergeTOSAccepted(mergeIntoUser, mergeFromUser);
// ExternalId gets merged last, in case something goes wrong
MergeExternalId(mergeIntoUser, mergeFromUser);
DeleteUser(mergeFromUser);
}
......@@ -58,8 +74,10 @@ namespace Coscine.Api.STS.Utils
private void MergeProjectRole(User mergeIntoUser, User mergeFromUser)
{
foreach (var projectRole in _projectRoleModel.GetAllWhere((entry) => entry.UserId == mergeFromUser.Id))
foreach (var projectRole in _projectRoleModel.GetAllWhere((entry) => entry.UserId == mergeFromUser.Id && entry.Project.Deleted == false))
{
var project = _projectModel.GetById(projectRole.ProjectId);
var role = _roleModel.GetById(projectRole.RoleId);
// Check if entry already exists
if (_projectRoleModel.GetAllWhere(
(entry) =>
......@@ -67,12 +85,35 @@ namespace Coscine.Api.STS.Utils
&& entry.ProjectId == projectRole.ProjectId
).Count() == 0)
{
_emitter.EmitUserRemove(new UserEventArgs(Program.Configuration)
{
Project = project,
Role = role,
User = mergeFromUser,
SilentMode = true
});
projectRole.UserId = mergeIntoUser.Id;
_projectRoleModel.Update(projectRole);
_emitter.EmitUserAdd(new UserEventArgs(Program.Configuration)
{
Project = project,
Role = role,
User = mergeIntoUser,
SilentMode = true
});
}
else
{
_projectRoleModel.Delete(projectRole);
_emitter.EmitUserRemove(new UserEventArgs(Program.Configuration)
{
Project = project,
Role = role,
User = mergeFromUser,
SilentMode = true
});
}
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment