Something went wrong on our end
Select Git revision
isCommInterfaceValid.m
-
Tim Stadtmann authoredTim Stadtmann authored
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();
}
}
}