Skip to content
Snippets Groups Projects

BREAKING: New Login Behavior for UIv2 (coscine/issues#1833)

Merged Benedikt Heinrichs requested to merge Issue/1833-newLogin into uiv2
6 files
+ 52
107
Compare changes
  • Side-by-side
  • Inline
Files
6
using System;
using System;
using System.Security.Claims;
using System.Security.Claims;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Http.Features;
using Microsoft.AspNetCore.Http;
using Coscine.Api.STS.Utils;
using Coscine.Api.STS.Utils;
using Coscine.ApiCommons;
using Coscine.ApiCommons;
using Coscine.Database.Models;
using Coscine.Database.Models;
using System.Linq;
using System.Linq;
using Coscine.ActiveDirectory;
using Coscine.ActiveDirectory;
using System.Net.Http;
using System.Net.Http;
using System.Web;
using System.Collections.Generic;
using Newtonsoft.Json;
using Coscine.JwtHandler;
using System.Text;
namespace Coscine.Api.STS.Controllers
namespace Coscine.Api.STS.Controllers
{
{
public class HomeController : Controller
public class HomeController : Controller
{
{
private static HttpClient _httpClient = new HttpClient();
private static readonly HttpClient _httpClient = new();
public const string Action = "wa";
public const string SignInString = "wsignin1.0";
public const string SignOutString = "wsignout1.0";
//[Authorize]
[Route("/")]
[Route("/")]
public ActionResult Index()
public ActionResult Index()
{
{
if (User.Identity.IsAuthenticated)
if (User.Identity.IsAuthenticated)
{
{
var res = Request.Query[Action];
var userIdString = User.Identity.Name;
if (res.Count > 0)
var userId = new Guid(userIdString);
{
var action = Request.Query[Action][0];
if (action == SignInString)
{
var userIdString = User.Identity.Name;
var userId = new Guid(userIdString);
if (Request.Cookies.ContainsKey(MergeController.MERGETOKENKEY))
if (Request.Cookies.ContainsKey(MergeController.MERGETOKENKEY))
{
{
string mergeCallbackUrl = UrlGenerator.MergeCallbackRedirectUrl();
string mergeCallbackUrl = UrlGenerator.MergeCallbackRedirectUrl();
return Redirect(mergeCallbackUrl);
return Redirect(mergeCallbackUrl);
}
}
if (!AreTOSAccepted(userId))
if (!AreTOSAccepted(userId))
{
{
string tosUrl = UrlGenerator.GetTOSUrl(Request, userIdString);
string tosUrl = UrlGenerator.GetTOSUrl(Request, userIdString);
return Redirect(tosUrl);
return Redirect(tosUrl);
}
}
var reqFeature = HttpContext.Features.Get<IHttpRequestFeature>();
ProcessSignIn(User);
var rawTarget = reqFeature.RawTarget;
var formData = ProcessSignIn(new Uri(Program.MainUrl + rawTarget), User);
var redirects = Request.Query["redirect"];
return new ContentResult() { Content = formData, ContentType = "text/html" };
if (redirects.Count > 0)
}
{
 
ViewBag.Redirect = redirects[0];
}
}
 
else
 
{
 
ViewBag.Redirect = "/";
 
}
 
 
var dictionary = new Dictionary<string, string>
 
{
 
{ "UserId", userId.ToString() }
 
};
 
var jwtHandler = new JWTHandler(Program.Configuration);
 
ViewBag.Token = jwtHandler.GenerateJwtToken(dictionary);
 
 
// STS Exit Point
 
return View();
}
}
string loginUrl = UrlGenerator.GetLoginUrl(Request);
string loginUrl = UrlGenerator.GetLoginUrl(Request);
return Redirect(loginUrl);
return Redirect(loginUrl);
@@ -71,41 +71,12 @@ namespace Coscine.Api.STS.Controllers
@@ -71,41 +71,12 @@ namespace Coscine.Api.STS.Controllers
&& tosAcceptedList.Any((entry) => entry.Version == currentTos);
&& tosAcceptedList.Any((entry) => entry.Version == currentTos);
}
}
private string ProcessSignIn(Uri url, ClaimsPrincipal user)
private void ProcessSignIn(ClaimsPrincipal user)
{
{
var userModel = new UserModel();
var userModel = new UserModel();
var realUser = userModel.GetById(Guid.Parse(user.Identity.Name));
var realUser = userModel.GetById(Guid.Parse(user.Identity.Name));
ADHandler.AddUser(realUser, Program.Configuration);
ADHandler.AddUser(realUser, Program.Configuration);
var userObject = new
{
realUser.DisplayName,
realUser.Id,
realUser.EmailAddress
};
var signInInstance = new
{
User = new
{
Claims = user.Claims,
Identities = user.Identities,
Identitiy = user.Identity
},
UserObject = userObject
};
var uri = $"http://localhost:{Program.Configuration.GetStringAndWait("coscine/apis/Coscine.Api.LegacySTS/port")}/sts/processSignIn/{HttpUtility.UrlEncode(url.ToString())}/{HttpUtility.UrlEncode(Request.Host.Value)}";
var content = new StringContent(JsonConvert.SerializeObject(signInInstance, Formatting.Indented,
new JsonSerializerSettings
{
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
}),
Encoding.UTF8, "application/json");
var result = _httpClient.PostAsync(uri, content).Result;
return result.Content.ReadAsStringAsync().Result;
}
}
}
}
}
}
Loading