Skip to content
Snippets Groups Projects
Select Git revision
  • 1cd9f4b2a05c1ee28d80d3850251b47d58d6428a
  • master default protected
  • dev protected
  • Issue/3003-stsInstitute
  • gitkeep
  • Hotfix/2775-dfnCertRollover
  • Hotfix/2592-sameProvider
  • Hotfix/1234-handlingMergeToken
  • Hotfix/2576-certificatePatch
  • Issue/2309-docs
  • Issue/2325-fixApiTokenMerging
  • Issue/1974-shibbolethLogout
  • Fix/xxxx-migrateLogin
  • Hotfix/2169-ignoreAuthContext
  • Experimental/newSaml2
  • Issue/2147-exchangingCoscineCertificate-step2
  • Issue/2147-exchangingCoscineCertificate
  • Issue/2147-exchangingCoscineCertificate-step3
  • uiv2
  • Issue/2115-extendParsingPairwiseId
  • Hotfix/2103-RepositoryurlstoConsulUpdateMappingGivennameUiv2
  • v4.1.1
  • v4.1.0
  • v4.0.9
  • v4.0.8
  • v4.0.7
  • v4.0.6
  • v4.0.5
  • v4.0.4
  • v4.0.3
  • v4.0.2
  • v4.0.1
  • v4.0.0
  • v3.1.4
  • v3.1.3
  • v3.1.2
  • v3.1.1
  • v3.1.0
  • v3.0.0
  • v2.4.4
  • v2.4.3
41 results

HomeController.cs

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    HomeController.cs 3.01 KiB
    using System;
    using System.IdentityModel.Configuration;
    using System.IdentityModel.Services;
    using System.IdentityModel.Tokens;
    using System.Security.Claims;
    using Coscine.Api.STS.Security;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.AspNetCore.Http.Features;
    using Microsoft.AspNetCore.Http;
    using Coscine.Api.STS.Utils;
    using Coscine.ApiCommons;
    using Coscine.Database.Models;
    using System.Linq;
    
    namespace Coscine.Api.STS.Controllers
    {
        public class HomeController : Controller
        {
            public const string Action = "wa";
            public const string SignInString = "wsignin1.0";
            public const string SignOutString = "wsignout1.0";
            
            //[Authorize]
            [Route("/")]
            public ActionResult Index()
            {
                if (User.Identity.IsAuthenticated)
                {
                    var res = Request.Query[Action];
                    if (res.Count > 0)
                    {
                        var action = Request.Query[Action][0];
    
                        if (action == SignInString)
                        {
                            var userIdString = User.Identity.Name;
                            var userId = new Guid(userIdString);
    
                            TOSModel tosModel = new TOSModel();
                            var tosAcceptedList = tosModel.GetAllWhere((entry) => entry.UserId == userId);
                            var currentTos = Configurator.Configuration.GetStringAndWait("coscine/global/tos/version");
                            var tosAccepted = tosAcceptedList != null
                                && tosAcceptedList.Any((entry) => entry.Version == currentTos);
                            if (!tosAccepted)
                            {
                                string tosUrl = UrlGenerator.GetTOSUrl(Request, userIdString);
                                return Redirect(tosUrl);
                            }
    
                            var reqFeature = HttpContext.Features.Get<IHttpRequestFeature>();
                            var rawTarget = reqFeature.RawTarget;
                            var formData = ProcessSignIn(new Uri(Program.MainUrl + rawTarget), User);
                            return new ContentResult() { Content = formData, ContentType = "text/html" };
                        }
                    }
                }
                string loginUrl = UrlGenerator.GetLoginUrl(Request);
                return Redirect(loginUrl);
            }
    
            private string ProcessSignIn(Uri url, ClaimsPrincipal user)
            {
                var requestMessage = (SignInRequestMessage)WSFederationMessage.CreateFromUri(url);
                var signingCredentials = new X509SigningCredentials(CustomSecurityTokenService.GetCertificate());
    
                var config = new SecurityTokenServiceConfiguration(Request.Host.Value, signingCredentials);
                config.DefaultTokenLifetime = TimeSpan.FromDays(1);
                var sts = new CustomSecurityTokenService(config);
                var responseMessage = FederatedPassiveSecurityTokenServiceOperations.ProcessSignInRequest(requestMessage, user, sts);
                return responseMessage.WriteFormPost();