Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Extensions/Signum.Alerts/Signum.Alerts.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

<PackageReference Include="Signum.Analyzer" Version="3.2.0" />
<PackageReference Include="Signum.MSBuildTask" Version="9.0.0" />
<PackageReference Include="Signum.TSGenerator" Version="9.2.1" />
<PackageReference Include="Signum.TSGenerator" Version="10.0.3" />
</ItemGroup>

<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
<PackageReference Include="Microsoft.Graph" Version="5.94.0" />
<PackageReference Include="Signum.Analyzer" Version="3.2.0" />
<PackageReference Include="Signum.MSBuildTask" Version="9.0.0" />
<PackageReference Include="Signum.TSGenerator" Version="9.2.1" />
<PackageReference Include="Signum.TSGenerator" Version="10.0.3" />
</ItemGroup>

<ItemGroup>
Expand Down
33 changes: 30 additions & 3 deletions Extensions/Signum.Authorization.ResetPassword/ResetPassword.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,16 @@ import { useLocation, useParams } from 'react-router'
import { useStateWithPromise } from '@framework/Hooks'
import { QueryString } from '@framework/QueryString'
import { LoginAuthMessage } from '../Signum.Authorization/Signum.Authorization'

import { ResetPasswordAuthMessage } from './Signum.Authorization.ResetPassword'

export default function ResetPassword(): React.JSX.Element {
const location = useLocation();

const [modelState, setModelState] = useStateWithPromise<ModelState | undefined>(undefined);

const [success, setSuccess] = React.useState<boolean>(false);
const [successRequestNewLink, setSuccessRquestNewLink] = React.useState<boolean>(false);
const [showRequestNewLink, setShowRequestNewLink] = React.useState<boolean>(false);

const newPassword = React.useRef<HTMLInputElement>(null);
const newPassword2 = React.useRef<HTMLInputElement>(null);
Expand Down Expand Up @@ -47,13 +50,14 @@ export default function ResetPassword(): React.JSX.Element {
if (ex.modelState)
setModelState(ex.modelState);
}
else
setShowRequestNewLink(true);

throw ex;
}
}
}


function validateNewPassword(): boolean {
if (!newPassword.current!.value) {
setModelState({ "newPassword": [LoginAuthMessage.PasswordMustHaveAValue.niceToString()] });
Expand All @@ -79,6 +83,19 @@ export default function ResetPassword(): React.JSX.Element {
return ms && ms[field] && ms[field].length > 0 ? ms[field][0] : undefined;
}

if (successRequestNewLink) {
return (
<div className="container sf-request-new-link">
<div className="row">
<div className="col-md-6 offset-md-3">
<h2 className="sf-entity-title">{ResetPasswordAuthMessage.RequestNewLink.niceToString()}</h2>
<p>{ResetPasswordAuthMessage.NewLinkToResetPasswordHasBeenSentSuccessfully.niceToString()}</p>
</div>
</div>
</div>
);
}

if (success || code == "OK") {
return (
<div className="container sf-reset-password">
Expand Down Expand Up @@ -111,10 +128,20 @@ export default function ResetPassword(): React.JSX.Element {
</div>

</div>
<button type="submit" className="btn btn-primary" id="changePassword">{LoginAuthMessage.ChangePassword.niceToString()}</button>
<div className="d-flex">
<button type="submit" className="btn btn-primary" id="changePassword">{LoginAuthMessage.ChangePassword.niceToString()}</button>
{showRequestNewLink &&
<button className="btn btn-secondary ms-auto" id="requestNewLink" onClick={handleRequestNewLinkClick}>{ResetPasswordAuthMessage.RequestNewLink.niceToString()}</button>}
</div>
</form>
</div>
</div>
</div>
);

function handleRequestNewLinkClick(e: React.MouseEvent<any>) {
e.preventDefault();
ResetPasswordClient.API.requestNewLink(code)
.then(() => setSuccessRquestNewLink(true));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,14 @@ export namespace ResetPasswordClient {
return ajaxPost({ url: "/api/auth/forgotPasswordEmail" }, request);
}

export function resetPassword(request: ResetPasswordRequest): Promise<AuthClient.API.LoginResponse > {
export function resetPassword(request: ResetPasswordRequest): Promise<AuthClient.API.LoginResponse> {
return ajaxPost({ url: "/api/auth/resetPassword" }, request);
}

export function requestNewLink(code: string): Promise<void> {
return ajaxPost({ url: "/api/auth/requestNewLink" }, code);
}

export interface ResetPasswordRequest {
code: string;
newPassword: string;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,15 @@ public ActionResult<LoginResponse> ResetPassword([Required, FromBody] ResetPassw
return new LoginResponse { userEntity = rpr.User, token = AuthTokenServer.CreateToken(rpr.User), authenticationType = "resetPassword" };
}

[HttpPost("api/auth/requestNewLink"), SignumAllowAnonymous]
public void RequestNewLink([Required, FromBody] string code)
{
if (string.IsNullOrWhiteSpace(code))
throw new ApplicationException(ResetPasswordMessage.TheCodeOfYourLinkIsIncorrect.NiceToString());

ResetPasswordRequestLogic.RequestNewLink(code);
}

private BadRequestObjectResult ModelError(string field, string error)
{
ModelState.AddModelError(field, error);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,9 @@ public class ResetPasswordRequestEntity : Entity
return null;

if (this.Used)
return ResetPasswordMessage.TheCodeOfYourLinkHasAlreadyBeenUsed.NiceToString();
return $"{ResetPasswordMessage.TheCodeOfYourLinkHasAlreadyBeenUsed.NiceToString()}. {ResetPasswordAuthMessage.PleaseConsiderRequestingANewLink.NiceToString()}";

return ResetPasswordMessage.YourResetPasswordRequestHasExpired.NiceToString();
return $"{ResetPasswordMessage.YourResetPasswordRequestHasExpired.NiceToString()}. {ResetPasswordAuthMessage.PleaseConsiderRequestingANewLink.NiceToString()}";
}
}

Expand All @@ -45,7 +45,6 @@ public static class ResetPasswordRequestOperation
public static readonly ExecuteSymbol<ResetPasswordRequestEntity> Execute;
}


public enum ResetPasswordMessage
{
[Description("You recently requested a new password")]
Expand All @@ -71,6 +70,14 @@ public enum ResetPasswordMessage
IfEmailIsValidWeWillSendYouAnEmailToResetYourPassword,
}

[AllowUnauthenticated]
public enum ResetPasswordAuthMessage
{
PleaseConsiderRequestingANewLink,
RequestNewLink,
NewLinkToResetPasswordHasBeenSentSuccessfully,
}

public class ResetPasswordException : Exception
{
public ResetPasswordException() { }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,21 @@ public static ResetPasswordRequestEntity ResetPasswordRequestExecute(string code
}
}

public static void RequestNewLink(string code)
{
using (AuthLogic.Disable())
{
var rpr = Database.Query<ResetPasswordRequestEntity>()
.Where(r => r.Code == code)
.SingleOrDefaultEx();

if (rpr == null)
throw new ResetPasswordException(ResetPasswordMessage.TheCodeOfYourLinkIsIncorrect.NiceToString());

SendResetPasswordRequestEmail(rpr.User.Email!);
}
}

public static void SendResetPasswordRequestEmail(string email)
{
try
Expand Down Expand Up @@ -213,7 +228,7 @@ private static void CancelExcess(UserEntity user, int maxValidCodes)
.Execute();
}

private static void CancelResetPasswordReques(UserEntity user)
private static void CancelResetPasswordRequests(UserEntity user)
{
Database.Query<ResetPasswordRequestEntity>()
.Where(r => r.User.Is(user) && r.IsValid)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

<PackageReference Include="Signum.Analyzer" Version="3.2.0" />
<PackageReference Include="Signum.MSBuildTask" Version="9.0.0" />
<PackageReference Include="Signum.TSGenerator" Version="9.2.1" />
<PackageReference Include="Signum.TSGenerator" Version="10.0.3" />
</ItemGroup>

<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,12 @@ import * as Operations from '../../Signum/React/Signum.Operations'
import * as Authorization from '../Signum.Authorization/Signum.Authorization'


export namespace ResetPasswordAuthMessage {
export const PleaseConsiderRequestingANewLink: MessageKey = new MessageKey("ResetPasswordAuthMessage", "PleaseConsiderRequestingANewLink");
export const RequestNewLink: MessageKey = new MessageKey("ResetPasswordAuthMessage", "RequestNewLink");
export const NewLinkToResetPasswordHasBeenSentSuccessfully: MessageKey = new MessageKey("ResetPasswordAuthMessage", "NewLinkToResetPasswordHasBeenSentSuccessfully");
}

export namespace ResetPasswordMessage {
export const YouRecentlyRequestedANewPassword: MessageKey = new MessageKey("ResetPasswordMessage", "YouRecentlyRequestedANewPassword");
export const YourUsernameIs: MessageKey = new MessageKey("ResetPasswordMessage", "YourUsernameIs");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,11 @@
<Member Name="YourResetPasswordRequestHasExpired" Description="Su solicitud de contraseña de restablecimiento ha caducado" />
<Member Name="YourUsernameIs" Description="Tu nombre de usuario es:" />
</Type>
<Type Name="ResetPasswordAuthMessage">
<Member Name="PleaseConsiderRequestingANewLink" Description="Considere solicitar un nuevo enlace" />
<Member Name="RequestNewLink" Description="Solicitar nuevo enlace" />
<Member Name="NewLinkToResetPasswordHasBeenSentSuccessfully" Description="Le hemos enviado un nuevo correo electrónico para restablecer su contraseña" />
</Type>
<Type Name="ResetPasswordRequestEntity" Description="Solicitud reseteo contraseña" Gender="f">
<Member Name="Code" Description="Código" />
<Member Name="IsValid" Description="Es válido" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

<PackageReference Include="Signum.Analyzer" Version="3.2.0" />
<PackageReference Include="Signum.MSBuildTask" Version="9.0.0" />
<PackageReference Include="Signum.TSGenerator" Version="9.2.1" />
<PackageReference Include="Signum.TSGenerator" Version="10.0.3" />
</ItemGroup>

<ItemGroup>
Expand Down
1 change: 0 additions & 1 deletion Extensions/Signum.Caching/CacheLogic.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
using Signum.API;
using Signum.Authorization;
using Signum.Authorization.Rules;
using DocumentFormat.OpenXml.Office2013.Drawing.Chart;
using Signum.Caching;

namespace Signum.Cache;
Expand Down
2 changes: 1 addition & 1 deletion Extensions/Signum.Caching/Signum.Caching.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
<PackageReference Include="Microsoft.Data.SqlClient" Version="6.1.2" />
<PackageReference Include="Signum.Analyzer" Version="3.2.0" />
<PackageReference Include="Signum.MSBuildTask" Version="9.0.0" />
<PackageReference Include="Signum.TSGenerator" Version="9.2.1" />
<PackageReference Include="Signum.TSGenerator" Version="10.0.3" />
</ItemGroup>

<ItemGroup>
Expand Down
2 changes: 1 addition & 1 deletion Extensions/Signum.Calendar/Signum.Calendar.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

<PackageReference Include="Signum.Analyzer" Version="3.2.0" />
<PackageReference Include="Signum.MSBuildTask" Version="9.0.0" />
<PackageReference Include="Signum.TSGenerator" Version="9.2.1" />
<PackageReference Include="Signum.TSGenerator" Version="10.0.3" />
</ItemGroup>

<ItemGroup>
Expand Down
2 changes: 1 addition & 1 deletion Extensions/Signum.Chart/Signum.Chart.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@

<PackageReference Include="Signum.Analyzer" Version="3.2.0" />
<PackageReference Include="Signum.MSBuildTask" Version="9.0.0" />
<PackageReference Include="Signum.TSGenerator" Version="9.2.1" />
<PackageReference Include="Signum.TSGenerator" Version="10.0.3" />
</ItemGroup>

<ItemGroup>
Expand Down
2 changes: 1 addition & 1 deletion Extensions/Signum.CodeMirror/Signum.CodeMirror.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

<PackageReference Include="Signum.Analyzer" Version="3.2.0" />
<PackageReference Include="Signum.MSBuildTask" Version="9.0.0" />
<PackageReference Include="Signum.TSGenerator" Version="9.2.1" />
<PackageReference Include="Signum.TSGenerator" Version="10.0.3" />
<PackageReference Include="Microsoft.CSharp" Version="4.7.0" />
<PackageReference Include="DocumentFormat.OpenXml" Version="3.3.0" />
</ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

<PackageReference Include="Signum.Analyzer" Version="3.2.0" />
<PackageReference Include="Signum.MSBuildTask" Version="9.0.0" />
<PackageReference Include="Signum.TSGenerator" Version="9.2.1" />
<PackageReference Include="Signum.TSGenerator" Version="10.0.3" />
</ItemGroup>

<ItemGroup>
Expand Down
2 changes: 1 addition & 1 deletion Extensions/Signum.Dashboard/Signum.Dashboard.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

<PackageReference Include="Signum.Analyzer" Version="3.2.0" />
<PackageReference Include="Signum.MSBuildTask" Version="9.0.0" />
<PackageReference Include="Signum.TSGenerator" Version="9.2.1" />
<PackageReference Include="Signum.TSGenerator" Version="10.0.3" />
</ItemGroup>

<ItemGroup>
Expand Down
2 changes: 1 addition & 1 deletion Extensions/Signum.DiffLog/Signum.DiffLog.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

<PackageReference Include="Signum.Analyzer" Version="3.2.0" />
<PackageReference Include="Signum.MSBuildTask" Version="9.0.0" />
<PackageReference Include="Signum.TSGenerator" Version="9.2.1" />
<PackageReference Include="Signum.TSGenerator" Version="10.0.3" />
</ItemGroup>

<ItemGroup>
Expand Down
2 changes: 1 addition & 1 deletion Extensions/Signum.Dynamic/Signum.Dynamic.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

<PackageReference Include="Signum.Analyzer" Version="3.2.0" />
<PackageReference Include="Signum.MSBuildTask" Version="9.0.0" />
<PackageReference Include="Signum.TSGenerator" Version="9.2.1" />
<PackageReference Include="Signum.TSGenerator" Version="10.0.3" />
</ItemGroup>

<ItemGroup>
Expand Down
2 changes: 1 addition & 1 deletion Extensions/Signum.Eval/Signum.Eval.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

<PackageReference Include="Signum.Analyzer" Version="3.2.0" />
<PackageReference Include="Signum.MSBuildTask" Version="9.0.0" />
<PackageReference Include="Signum.TSGenerator" Version="9.2.1" />
<PackageReference Include="Signum.TSGenerator" Version="10.0.3" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.14.0" />
<PackageReference Include="Microsoft.CSharp" Version="4.7.0" />
<PackageReference Include="DocumentFormat.OpenXml" Version="3.3.0" />
Expand Down
2 changes: 1 addition & 1 deletion Extensions/Signum.Excel/Signum.Excel.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@

<PackageReference Include="Signum.Analyzer" Version="3.2.0" />
<PackageReference Include="Signum.MSBuildTask" Version="9.0.0" />
<PackageReference Include="Signum.TSGenerator" Version="9.2.1" />
<PackageReference Include="Signum.TSGenerator" Version="10.0.3" />
<PackageReference Include="DocumentFormat.OpenXml" Version="3.3.0" />
</ItemGroup>

Expand Down
20 changes: 13 additions & 7 deletions Extensions/Signum.Files/FilesController.cs
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
using Azure.Core;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System.IO;
using Microsoft.Net.Http.Headers;
using Signum.Utilities.Reflection;
using System.Collections.Concurrent;
using System.Security.Cryptography;
using System.Reflection.Metadata.Ecma335;
using Azure.Core;
using System.IO;

namespace Signum.Files;

Expand All @@ -24,7 +24,7 @@ public FileStreamResult DownloadFilePath(string filePathId)
{
var filePath = Database.Retrieve<FilePathEntity>(PrimaryKey.Parse(filePathId, typeof(FilePathEntity)));

Response.Headers.CacheControl = $"max-age={FilePathLogic.MaxAge(filePath)}, private";
Response.GetTypedHeaders().CacheControl = FilesCacheControl(filePath);

return MimeMapping.GetFileStreamResult(filePath.OpenRead(), filePath.FileName);
}
Expand Down Expand Up @@ -53,11 +53,17 @@ public FileStreamResult DownloadFilePath(string filePathId)
if (fpe == null)
return null;

Response.Headers.CacheControl = $"max-age={FilePathLogic.MaxAge(fpe)}, private";
Response.GetTypedHeaders().CacheControl = FilesCacheControl(fpe);

return MimeMapping.GetFileStreamResult(fpe.OpenRead(), fpe.FileName);
return MimeMapping.GetFileStreamResult(fpe.OpenRead(), fpe.FileName);
}

private static CacheControlHeaderValue FilesCacheControl(IFilePath fpe) => new()
{
Private = true,
MaxAge = TimeSpan.FromSeconds(FilePathLogic.MaxAge(fpe))
};

static ConcurrentDictionary<PropertyRoute, Func<PrimaryKey, string?, FilePathEmbedded?>> queryBuilderCache =
new ConcurrentDictionary<PropertyRoute, Func<PrimaryKey, string?, FilePathEmbedded?>>();

Expand Down
2 changes: 1 addition & 1 deletion Extensions/Signum.Files/Signum.Files.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

<PackageReference Include="Signum.Analyzer" Version="3.2.0" />
<PackageReference Include="Signum.MSBuildTask" Version="9.0.0" />
<PackageReference Include="Signum.TSGenerator" Version="9.2.1" />
<PackageReference Include="Signum.TSGenerator" Version="10.0.3" />
</ItemGroup>

<ItemGroup>
Expand Down
Loading