Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • Experimental/newSaml2
  • Fix/xxxx-migrateLogin
  • Hotfix/1234-handlingMergeToken
  • Hotfix/1354-workingFHLogin
  • Hotfix/1357-ymlFile
  • Hotfix/1370-swaggerDescription
  • Hotfix/1545-emptyUserGraphs
  • Hotfix/2087-efNet6
  • Hotfix/2103-RepositoryurlstoConsulUpdateMappingGivennameDev
  • Hotfix/2103-RepositoryurlstoConsulUpdateMappingGivennameUiv2
  • Hotfix/2169-ignoreAuthContext
  • Hotfix/2576-certificatePatch
  • Hotfix/2592-sameProvider
  • Hotfix/2775-dfnCertRollover
  • Hotfix/64-releaseUDE
  • Issue/1833-newLogin
  • Issue/1910-MigrationtoNET6.0
  • Issue/1964-tokenExpiryUIv2
  • Issue/1974-shibbolethLogout
  • Issue/2078-renamingEntitlementAcceptStaff
  • Issue/2078-renamingEntitlementAcceptStaffUiv2
  • Issue/2115-extendParsingPairwiseId
  • Issue/2147-exchangingCoscineCertificate
  • Issue/2147-exchangingCoscineCertificate-step2
  • Issue/2147-exchangingCoscineCertificate-step3
  • Issue/2309-docs
  • Issue/2325-fixApiTokenMerging
  • Issue/3003-stsInstitute
  • Issue/40-rdsQuotaForUKA
  • Product/1149-dfnaai
  • Product/1287-dotnet5Sharepoint
  • Product/1290-dfnaai
  • Product/1414-fhPrivileges
  • Product/1629-onboardingOtherUniversities
  • Product/797-overhaul
  • Product/917-maintenanceFunctionality
  • Sprint/2020-20
  • Sprint/2020-21
  • Sprint/2020-22
  • Sprint/2021-01
  • Sprint/2021-03
  • Sprint/2021-05
  • Sprint/2021-06
  • Sprint/2021-08
  • Sprint/2021-10
  • Sprint/2021-11
  • Sprint/2021-19
  • Sprint/2021-20
  • Sprint/2021-23
  • Sprint/2022-01
  • Topic/1224-overhaul
  • Topic/1276-DFN-AAIFrontend
  • Topic/1278-dfnAAI
  • Topic/1297-maintenanceBanner
  • Topic/1335-dotnet5Apis
  • Topic/1425-fhPrivileges
  • Topic/1711-extendResourceTypeConfiguration
  • dev
  • gitkeep
  • master
  • top
  • uiv2
  • v1.0.0
  • v1.1.0
  • v1.10.0
  • v1.10.1
  • v1.10.2
  • v1.11.0
  • v1.11.1
  • v1.11.2
  • v1.11.3
  • v1.12.0
  • v1.13.0
  • v1.14.0
  • v1.14.1
  • v1.15.0
  • v1.16.0
  • v1.16.1
  • v1.16.2
  • v1.17.0
  • v1.18.0
  • v1.2.0
  • v1.2.1
  • v1.3.0
  • v1.4.0
  • v1.5.0
  • v1.6.0
  • v1.7.0
  • v1.8.0
  • v1.8.1
  • v1.9.0
  • v1.9.1
  • v2.0.0
  • v2.0.1
  • v2.0.2
  • v2.0.3
  • v2.1.0
  • v2.2.0
  • v2.2.1
  • v2.2.2
  • v2.2.3
  • v2.2.4
  • v2.3.0
  • v2.3.1
  • v2.3.2
  • v2.3.3
  • v2.4.0
  • v2.4.1
  • v2.4.2
  • v2.4.3
  • v2.4.4
  • v3.0.0
  • v3.1.0
  • v3.1.1
  • v3.1.2
  • v3.1.3
  • v3.1.4
  • v4.0.0
  • v4.0.1
  • v4.0.2
  • v4.0.3
  • v4.0.4
  • v4.0.5
  • v4.0.6
  • v4.0.7
  • v4.0.8
  • v4.0.9
  • v4.1.0
  • v4.1.1
129 results

Target

Select target project
  • coscine/backend/apis/sts
1 result
Select Git revision
  • Experimental/newSaml2
  • Fix/xxxx-migrateLogin
  • Hotfix/1234-handlingMergeToken
  • Hotfix/1354-workingFHLogin
  • Hotfix/1357-ymlFile
  • Hotfix/1370-swaggerDescription
  • Hotfix/1545-emptyUserGraphs
  • Hotfix/2087-efNet6
  • Hotfix/2103-RepositoryurlstoConsulUpdateMappingGivennameDev
  • Hotfix/2103-RepositoryurlstoConsulUpdateMappingGivennameUiv2
  • Hotfix/2169-ignoreAuthContext
  • Hotfix/2576-certificatePatch
  • Hotfix/2592-sameProvider
  • Hotfix/2775-dfnCertRollover
  • Hotfix/64-releaseUDE
  • Issue/1833-newLogin
  • Issue/1910-MigrationtoNET6.0
  • Issue/1964-tokenExpiryUIv2
  • Issue/1974-shibbolethLogout
  • Issue/2078-renamingEntitlementAcceptStaff
  • Issue/2078-renamingEntitlementAcceptStaffUiv2
  • Issue/2115-extendParsingPairwiseId
  • Issue/2147-exchangingCoscineCertificate
  • Issue/2147-exchangingCoscineCertificate-step2
  • Issue/2147-exchangingCoscineCertificate-step3
  • Issue/2309-docs
  • Issue/2325-fixApiTokenMerging
  • Issue/3003-stsInstitute
  • Issue/40-rdsQuotaForUKA
  • Product/1149-dfnaai
  • Product/1287-dotnet5Sharepoint
  • Product/1290-dfnaai
  • Product/1414-fhPrivileges
  • Product/1629-onboardingOtherUniversities
  • Product/797-overhaul
  • Product/917-maintenanceFunctionality
  • Sprint/2020-20
  • Sprint/2020-21
  • Sprint/2020-22
  • Sprint/2021-01
  • Sprint/2021-03
  • Sprint/2021-05
  • Sprint/2021-06
  • Sprint/2021-08
  • Sprint/2021-10
  • Sprint/2021-11
  • Sprint/2021-19
  • Sprint/2021-20
  • Sprint/2021-23
  • Sprint/2022-01
  • Topic/1224-overhaul
  • Topic/1276-DFN-AAIFrontend
  • Topic/1278-dfnAAI
  • Topic/1297-maintenanceBanner
  • Topic/1335-dotnet5Apis
  • Topic/1425-fhPrivileges
  • Topic/1711-extendResourceTypeConfiguration
  • dev
  • gitkeep
  • master
  • top
  • uiv2
  • v1.0.0
  • v1.1.0
  • v1.10.0
  • v1.10.1
  • v1.10.2
  • v1.11.0
  • v1.11.1
  • v1.11.2
  • v1.11.3
  • v1.12.0
  • v1.13.0
  • v1.14.0
  • v1.14.1
  • v1.15.0
  • v1.16.0
  • v1.16.1
  • v1.16.2
  • v1.17.0
  • v1.18.0
  • v1.2.0
  • v1.2.1
  • v1.3.0
  • v1.4.0
  • v1.5.0
  • v1.6.0
  • v1.7.0
  • v1.8.0
  • v1.8.1
  • v1.9.0
  • v1.9.1
  • v2.0.0
  • v2.0.1
  • v2.0.2
  • v2.0.3
  • v2.1.0
  • v2.2.0
  • v2.2.1
  • v2.2.2
  • v2.2.3
  • v2.2.4
  • v2.3.0
  • v2.3.1
  • v2.3.2
  • v2.3.3
  • v2.4.0
  • v2.4.1
  • v2.4.2
  • v2.4.3
  • v2.4.4
  • v3.0.0
  • v3.1.0
  • v3.1.1
  • v3.1.2
  • v3.1.3
  • v3.1.4
  • v4.0.0
  • v4.0.1
  • v4.0.2
  • v4.0.3
  • v4.0.4
  • v4.0.5
  • v4.0.6
  • v4.0.7
  • v4.0.8
  • v4.0.9
  • v4.1.0
  • v4.1.1
129 results
Show changes
Commits on Source (5)
...@@ -60,7 +60,7 @@ namespace Coscine.Api.STS.Controllers ...@@ -60,7 +60,7 @@ namespace Coscine.Api.STS.Controllers
var mapping = externalIdModel.GetAllWhere((map) => map.ExternalId1 == ORCiD && map.ExternalAuthenticatorId == orcidAuthItem.Id); var mapping = externalIdModel.GetAllWhere((map) => map.ExternalId1 == ORCiD && map.ExternalAuthenticatorId == orcidAuthItem.Id);
var userModel = new UserModel(); var userModel = new UserModel();
User user; User user;
if (mapping.Count() > 0) if (mapping.Any())
{ {
var userId = mapping.First().UserId; var userId = mapping.First().UserId;
user = userModel.GetById(userId); user = userModel.GetById(userId);
......
using Coscine.Database.DataModel; using Coscine.Api.STS.Data;
using Coscine.Database.Models;
using Coscine.Api.STS.Data;
using Coscine.Api.STS.Utils; using Coscine.Api.STS.Utils;
using Coscine.Database.DataModel;
using Coscine.Database.Models;
using Coscine.Metadata;
using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using System; using System;
...@@ -14,10 +15,12 @@ namespace Coscine.Api.STS.Controllers ...@@ -14,10 +15,12 @@ namespace Coscine.Api.STS.Controllers
public class ShibbolethController : Controller public class ShibbolethController : Controller
{ {
private readonly SignInManager<CoscineUser> _signInManager; private readonly SignInManager<CoscineUser> _signInManager;
private readonly RdfStoreConnector _rdfStoreConnector;
public ShibbolethController(SignInManager<CoscineUser> signInManager) public ShibbolethController(SignInManager<CoscineUser> signInManager)
{ {
_signInManager = signInManager; _signInManager = signInManager;
_rdfStoreConnector = new RdfStoreConnector(Program.Configuration.GetString("coscine/local/virtuoso/additional/url"));
} }
[Route("[controller]/callback")] [Route("[controller]/callback")]
...@@ -40,20 +43,20 @@ namespace Coscine.Api.STS.Controllers ...@@ -40,20 +43,20 @@ namespace Coscine.Api.STS.Controllers
var externalIdModel = new ExternalIdModel(); var externalIdModel = new ExternalIdModel();
var entity = info.Principal.FindFirstValue(ShibbolethAttributeMapping.Identifier); var entity = info.Principal.FindFirstValue(ShibbolethAttributeMapping.Identifier);
var identifier = entity.Substring(entity.IndexOf(">") + 1); var identifier = entity[(entity.IndexOf(">") + 1)..];
identifier = identifier.Substring(0, identifier.IndexOf("<")); identifier = identifier.Substring(0, identifier.IndexOf("<"));
var organization = entity.Substring(entity.IndexOf("NameQualifier=\"") + "NameQualifier=\"".Length); var entityId = entity[(entity.IndexOf("NameQualifier=\"") + "NameQualifier=\"".Length)..];
organization = organization.Substring(0, organization.IndexOf("\"")); entityId = entityId.Substring(0, entityId.IndexOf("\""));
var mapping = externalIdModel.GetAllWhere((map) => var mapping = externalIdModel.GetAllWhere((map) =>
map.ExternalId1 == identifier map.ExternalId1 == identifier
&& map.ExternalAuthenticatorId == shibbolethAuthItem.Id && map.ExternalAuthenticatorId == shibbolethAuthItem.Id
&& map.Organization == organization && map.Organization == entityId
); );
User user; User user;
var userModel = new UserModel(); var userModel = new UserModel();
if (mapping.Count() > 0) if (mapping.Any())
{ {
var userId = mapping.First().UserId; var userId = mapping.First().UserId;
user = userModel.GetById(userId); user = userModel.GetById(userId);
...@@ -66,11 +69,36 @@ namespace Coscine.Api.STS.Controllers ...@@ -66,11 +69,36 @@ namespace Coscine.Api.STS.Controllers
{ {
ExternalId1 = identifier, ExternalId1 = identifier,
ExternalAuthenticatorId = shibbolethAuthItem.Id, ExternalAuthenticatorId = shibbolethAuthItem.Id,
Organization = organization, Organization = entityId,
UserId = user.Id UserId = user.Id
}); });
} }
var userGraphName = $"{_rdfStoreConnector.UserUrlPrefix}/{user.Id}";
// Make sure the user graph exists.
_rdfStoreConnector.EnsureGraph(userGraphName);
// Get organization.
var organization = _rdfStoreConnector.GetOrganization(entityId, identifier);
// Can only update data if an org was found.
if(organization != null)
{
// Drop old membership infromation.
_rdfStoreConnector.RemoveMembershipData(userGraphName, organization);
// Reverse lookup...
var eduPersonScopedAffiliation = info.Principal.FindFirstValue(ShibbolethAttributeMapping.LabelMapping.FirstOrDefault(x => x.Value == "Entitlement").Key);
if (eduPersonScopedAffiliation.StartsWith("employee@")
// Check for test shib (employee user is actually member...).
|| (eduPersonScopedAffiliation.StartsWith("member@") && entityId == "https://login-test.rz.rwth-aachen.de/shibboleth"))
{
// Add membership information.
_rdfStoreConnector.AddMemebershipData(userGraphName, organization);
}
}
var coscineUser = new CoscineUser() var coscineUser = new CoscineUser()
{ {
UserName = user.Id.ToString(), UserName = user.Id.ToString(),
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
<GenerateDocumentationFile>true</GenerateDocumentationFile> <GenerateDocumentationFile>true</GenerateDocumentationFile>
<TargetFramework>net5.0</TargetFramework> <TargetFramework>net5.0</TargetFramework>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo> <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<Version>2.1.0</Version></PropertyGroup> <Version>2.2.0</Version></PropertyGroup>
<PropertyGroup> <PropertyGroup>
<Authors>RWTH Aachen University</Authors> <Authors>RWTH Aachen University</Authors>
<Company>IT Center, RWTH Aachen University</Company> <Company>IT Center, RWTH Aachen University</Company>
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
<PackageReference Include="Coscine.Action" Version="2.*-*" /> <PackageReference Include="Coscine.Action" Version="2.*-*" />
<PackageReference Include="Coscine.ActiveDirectory" Version="2.*-*" /> <PackageReference Include="Coscine.ActiveDirectory" Version="2.*-*" />
<PackageReference Include="Coscine.ApiCommons" Version="2.*-*" /> <PackageReference Include="Coscine.ApiCommons" Version="2.*-*" />
<PackageReference Include="Coscine.Metadata" Version="2.1.0-topic-1425-fhpri0003" />
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="3.1.12" /> <PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="3.1.12" />
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="3.1.12" /> <PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="3.1.12" />
<PackageReference Include="Microsoft.IdentityModel.Tokens.Saml" Version="6.8.0" /> <PackageReference Include="Microsoft.IdentityModel.Tokens.Saml" Version="6.8.0" />
......