Enrich professor profiles and harden client policy
This commit is contained in:
@@ -23,6 +23,12 @@ public sealed class NtlmCredentialValidatorTests
|
||||
"123456",
|
||||
InstitutionalRole.Student);
|
||||
|
||||
private static readonly UserIdentity Professor = new(
|
||||
"DO123456",
|
||||
"DO",
|
||||
"123456",
|
||||
InstitutionalRole.Professor);
|
||||
|
||||
[Fact]
|
||||
public async Task RedirectAndSuccessWithoutChallengeNeverAuthorizes()
|
||||
{
|
||||
@@ -192,6 +198,94 @@ public sealed class NtlmCredentialValidatorTests
|
||||
Assert.Equal(3, handler.RequestPaths.Count);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task ProfessorProfileIsEnrichedFromSharedStaffPages()
|
||||
{
|
||||
SequenceHandler handler = new(
|
||||
Challenge(),
|
||||
Response(HttpStatusCode.OK),
|
||||
Response(
|
||||
HttpStatusCode.OK,
|
||||
"""
|
||||
<span id="ctl00_lblNombreUsuario">MARÍA DEL CARMEN</span>
|
||||
"""),
|
||||
Response(
|
||||
HttpStatusCode.OK,
|
||||
"""
|
||||
<input id="ctl00_contenedor_txtNombre" value="MARÍA DEL CARMEN" />
|
||||
<input id="ctl00_contenedor_txtApaterno" value="DE LA FUENTE" />
|
||||
<input id="ctl00_contenedor_txtAmaterno" value="O'CONNOR" />
|
||||
"""),
|
||||
Response(
|
||||
HttpStatusCode.OK,
|
||||
"""
|
||||
<input id="ctl00_contenedor_txtCalle" value="CALLE DEL SOL" />
|
||||
<input id="ctl00_contenedor_txtNoExt" value="15" />
|
||||
<input id="ctl00_contenedor_txtCP" value="01000" />
|
||||
<select id="ctl00_contenedor_ddlEstado">
|
||||
<option selected="selected">CIUDAD DE MÉXICO</option>
|
||||
</select>
|
||||
<select id="ctl00_contenedor_ddlLocalidad">
|
||||
<option selected="selected">ÁLVARO OBREGÓN</option>
|
||||
</select>
|
||||
<select id="ctl00_contenedor_ddlColonia">
|
||||
<option selected="selected">FLORIDA</option>
|
||||
</select>
|
||||
"""));
|
||||
NtlmCredentialValidator validator = CreateValidator(handler);
|
||||
|
||||
NtlmValidationResult result = await validator.ValidateAsync(
|
||||
Professor,
|
||||
"test-password",
|
||||
TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Equal(NtlmValidationStatus.Valid, result.Status);
|
||||
Assert.NotNull(result.Profile);
|
||||
Assert.Equal("María del Carmen de la Fuente O'Connor", result.Profile.DisplayName);
|
||||
Assert.Equal("María del Carmen", result.Profile.GivenName);
|
||||
Assert.Equal("de la Fuente O'Connor", result.Profile.Surname);
|
||||
Assert.Equal("Calle del Sol 15\r\nFlorida", result.Profile.StreetAddress);
|
||||
Assert.Equal("Álvaro Obregón", result.Profile.City);
|
||||
Assert.Equal("Ciudad de México", result.Profile.State);
|
||||
Assert.Equal("01000", result.Profile.PostalCode);
|
||||
Assert.Equal(
|
||||
[
|
||||
"/psulsa/",
|
||||
"/psulsa/",
|
||||
"/psulsa/menu.aspx",
|
||||
"/psulsa/gadmon/capitalhumano/datos/personales.aspx",
|
||||
"/psulsa/gadmon/capitalhumano/datos/ubicacion.aspx"
|
||||
],
|
||||
handler.RequestPaths);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task MissingProfessorStaffPageOrElementIdsPreservesMenuProfile()
|
||||
{
|
||||
SequenceHandler handler = new(
|
||||
Challenge(),
|
||||
Response(HttpStatusCode.OK),
|
||||
Response(
|
||||
HttpStatusCode.OK,
|
||||
"""
|
||||
<span id="ctl00_lblNombreUsuario">MIGUEL DE CERVANTES</span>
|
||||
"""),
|
||||
Response(HttpStatusCode.OK, "<html><body>Unrecognized layout</body></html>"),
|
||||
Response(HttpStatusCode.NotFound));
|
||||
NtlmCredentialValidator validator = CreateValidator(handler);
|
||||
|
||||
NtlmValidationResult result = await validator.ValidateAsync(
|
||||
Professor,
|
||||
"test-password",
|
||||
TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Equal(NtlmValidationStatus.Valid, result.Status);
|
||||
Assert.NotNull(result.Profile);
|
||||
Assert.Equal("Miguel de Cervantes", result.Profile.DisplayName);
|
||||
Assert.Null(result.Profile.StreetAddress);
|
||||
Assert.Equal(5, handler.RequestPaths.Count);
|
||||
}
|
||||
|
||||
private static NtlmCredentialValidator CreateValidator(SequenceHandler handler)
|
||||
{
|
||||
BrokerOptions options = new()
|
||||
|
||||
Reference in New Issue
Block a user