diff options
author | 杨宇千 <crupest@outlook.com> | 2019-10-21 13:41:46 +0800 |
---|---|---|
committer | 杨宇千 <crupest@outlook.com> | 2019-10-21 13:41:46 +0800 |
commit | ea8dd31e88aaf13af1f51e764623d6a7c73fb429 (patch) | |
tree | 705580fda162d3a2667f288ddb8092e8fba09703 /Timeline | |
parent | 1ce632ad3c093bd60e4c75dd4229266604012729 (diff) | |
download | timeline-ea8dd31e88aaf13af1f51e764623d6a7c73fb429.tar.gz timeline-ea8dd31e88aaf13af1f51e764623d6a7c73fb429.tar.bz2 timeline-ea8dd31e88aaf13af1f51e764623d6a7c73fb429.zip |
...
Diffstat (limited to 'Timeline')
-rw-r--r-- | Timeline/Controllers/TokenController.cs | 4 | ||||
-rw-r--r-- | Timeline/Controllers/UserController.cs | 39 | ||||
-rw-r--r-- | Timeline/Models/Http/Common.cs | 42 | ||||
-rw-r--r-- | Timeline/Resources/Controllers/UserController.en.resx | 9 | ||||
-rw-r--r-- | Timeline/Resources/Controllers/UserController.resx | 15 | ||||
-rw-r--r-- | Timeline/Resources/Controllers/UserController.zh.resx | 9 |
6 files changed, 87 insertions, 31 deletions
diff --git a/Timeline/Controllers/TokenController.cs b/Timeline/Controllers/TokenController.cs index d708127a..cf32a562 100644 --- a/Timeline/Controllers/TokenController.cs +++ b/Timeline/Controllers/TokenController.cs @@ -56,7 +56,7 @@ namespace Timeline.Controllers [HttpPost("create")]
[AllowAnonymous]
- public async Task<IActionResult> Create([FromBody] CreateTokenRequest request)
+ public async Task<ActionResult<CreateTokenResponse>> Create([FromBody] CreateTokenRequest request)
{
void LogFailure(string reason, Exception? e = null)
{
@@ -102,7 +102,7 @@ namespace Timeline.Controllers [HttpPost("verify")]
[AllowAnonymous]
- public async Task<IActionResult> Verify([FromBody] VerifyTokenRequest request)
+ public async Task<ActionResult<VerifyTokenResponse>> Verify([FromBody] VerifyTokenRequest request)
{
void LogFailure(string reason, Exception? e = null, params (string, object?)[] otherProperties)
{
diff --git a/Timeline/Controllers/UserController.cs b/Timeline/Controllers/UserController.cs index b01d06fb..6afc890c 100644 --- a/Timeline/Controllers/UserController.cs +++ b/Timeline/Controllers/UserController.cs @@ -77,7 +77,7 @@ namespace Timeline.Controllers }
[HttpGet("users/{username}"), AdminAuthorize]
- public async Task<IActionResult> Get([FromRoute] string username)
+ public async Task<ActionResult<UserInfo>> Get([FromRoute] string username)
{
var user = await _userService.GetUser(username);
if (user == null)
@@ -89,7 +89,7 @@ namespace Timeline.Controllers }
[HttpPut("users/{username}"), AdminAuthorize]
- public async Task<IActionResult> Put([FromBody] UserPutRequest request, [FromRoute] string username)
+ public async Task<ActionResult<CommonPutResponse>> Put([FromBody] UserPutRequest request, [FromRoute] string username)
{
try
{
@@ -114,7 +114,7 @@ namespace Timeline.Controllers }
[HttpPatch("users/{username}"), AdminAuthorize]
- public async Task<IActionResult> Patch([FromBody] UserPatchRequest request, [FromRoute] string username)
+ public async Task<ActionResult> Patch([FromBody] UserPatchRequest request, [FromRoute] string username)
{
try
{
@@ -129,7 +129,7 @@ namespace Timeline.Controllers }
[HttpDelete("users/{username}"), AdminAuthorize]
- public async Task<IActionResult> Delete([FromRoute] string username)
+ public async Task<ActionResult<CommonDeleteResponse>> Delete([FromRoute] string username)
{
try
{
@@ -145,44 +145,45 @@ namespace Timeline.Controllers }
[HttpPost("userop/changeusername"), AdminAuthorize]
- public async Task<IActionResult> ChangeUsername([FromBody] ChangeUsernameRequest request)
+ public async Task<ActionResult> ChangeUsername([FromBody] ChangeUsernameRequest request)
{
try
{
await _userService.ChangeUsername(request.OldUsername, request.NewUsername);
- _logger.LogInformation(FormatLogMessage("A user changed username.",
- Pair("Old Username", request.OldUsername), Pair("New Username", request.NewUsername)));
+ _logger.LogInformation(Log.Format(_localizer["LogChangeUsernameSuccess"],
+ ("Old Username", request.OldUsername), ("New Username", request.NewUsername)));
return Ok();
}
catch (UserNotExistException e)
{
- _logger.LogInformation(e, FormatLogMessage("Attempt to change a non-existent user's username failed.",
- Pair("Old Username", request.OldUsername), Pair("New Username", request.NewUsername)));
- return BadRequest(new CommonResponse(ErrorCodes.ChangeUsername_NotExist, $"The user {request.OldUsername} does not exist."));
+ _logger.LogInformation(e, Log.Format(_localizer["LogChangeUsernameNotExist"],
+ ("Old Username", request.OldUsername), ("New Username", request.NewUsername)));
+ return BadRequest(new CommonResponse(ErrorCodes.Http.User.Op.ChangeUsername.NotExist, _localizer["ErrorChangeUsernameNotExist", request.OldUsername]));
}
catch (UserAlreadyExistException e)
{
- _logger.LogInformation(e, FormatLogMessage("Attempt to change a user's username to a existent one failed.",
- Pair("Old Username", request.OldUsername), Pair("New Username", request.NewUsername)));
- return BadRequest(new CommonResponse(ErrorCodes.ChangeUsername_AlreadyExist, $"The user {request.NewUsername} already exists."));
+ _logger.LogInformation(e, Log.Format(_localizer["LogChangeUsernameAlreadyExist"],
+ ("Old Username", request.OldUsername), ("New Username", request.NewUsername)));
+ return BadRequest(new CommonResponse(ErrorCodes.Http.User.Op.ChangeUsername.AlreadyExist, _localizer["ErrorChangeUsernameAlreadyExist"]));
}
// there is no need to catch bad format exception because it is already checked in model validation.
}
[HttpPost("userop/changepassword"), Authorize]
- public async Task<IActionResult> ChangePassword([FromBody] ChangePasswordRequest request)
+ public async Task<ActionResult> ChangePassword([FromBody] ChangePasswordRequest request)
{
try
{
- await _userService.ChangePassword(User.Identity.Name, request.OldPassword, request.NewPassword);
- _logger.LogInformation(FormatLogMessage("A user changed password.", Pair("Username", User.Identity.Name)));
+ await _userService.ChangePassword(User.Identity.Name!, request.OldPassword, request.NewPassword);
+ _logger.LogInformation(Log.Format(_localizer["LogChangePasswordSuccess"], ("Username", User.Identity.Name)));
return Ok();
}
catch (BadPasswordException e)
{
- _logger.LogInformation(e, FormatLogMessage("A user attempt to change password but old password is wrong.",
- Pair("Username", User.Identity.Name), Pair("Old Password", request.OldPassword)));
- return BadRequest(new CommonResponse(ErrorCodes.ChangePassword_BadOldPassword, "Old password is wrong."));
+ _logger.LogInformation(e, Log.Format(_localizer["LogChangePasswordBadPassword"],
+ ("Username", User.Identity.Name), ("Old Password", request.OldPassword)));
+ return BadRequest(new CommonResponse(ErrorCodes.Http.User.Op.ChangePassword.BadOldPassword,
+ _localizer["ErrorChangePasswordBadPassword"]));
}
// User can't be non-existent or the token is bad.
}
diff --git a/Timeline/Models/Http/Common.cs b/Timeline/Models/Http/Common.cs index 2735e43c..130439d3 100644 --- a/Timeline/Models/Http/Common.cs +++ b/Timeline/Models/Http/Common.cs @@ -61,7 +61,7 @@ namespace Timeline.Models.Http public T Data { get; set; } = default!;
}
- public static class CommonPutResponse
+ public class CommonPutResponse : CommonDataResponse<CommonPutResponse.ResponseData>
{
public class ResponseData
{
@@ -73,21 +73,32 @@ namespace Timeline.Models.Http public bool Create { get; set; }
}
- internal static CommonDataResponse<ResponseData> Create(IStringLocalizerFactory localizerFactory)
+ public CommonPutResponse()
+ {
+
+ }
+
+ public CommonPutResponse(int code, string message, bool create)
+ : base(code, message, new ResponseData(create))
+ {
+
+ }
+
+ internal static CommonPutResponse Create(IStringLocalizerFactory localizerFactory)
{
var localizer = localizerFactory.Create("Http.Common");
- return new CommonDataResponse<ResponseData>(0, localizer["ResponsePutCreate"], new ResponseData(true));
+ return new CommonPutResponse(0, localizer["ResponsePutCreate"], true);
}
- internal static CommonDataResponse<ResponseData> Modify(IStringLocalizerFactory localizerFactory)
+ internal static CommonPutResponse Modify(IStringLocalizerFactory localizerFactory)
{
var localizer = localizerFactory.Create("Http.Common");
- return new CommonDataResponse<ResponseData>(0, localizer["ResponsePutModify"], new ResponseData(false));
+ return new CommonPutResponse(0, localizer["ResponsePutModify"], false);
}
}
- public static class CommonDeleteResponse
+ public class CommonDeleteResponse : CommonDataResponse<CommonDeleteResponse.ResponseData>
{
public class ResponseData
{
@@ -99,16 +110,27 @@ namespace Timeline.Models.Http public bool Delete { get; set; }
}
- internal static CommonDataResponse<ResponseData> Delete(IStringLocalizerFactory localizerFactory)
+ public CommonDeleteResponse()
+ {
+
+ }
+
+ public CommonDeleteResponse(int code, string message, bool delete)
+ : base(code, message, new ResponseData(delete))
+ {
+
+ }
+
+ internal static CommonDeleteResponse Delete(IStringLocalizerFactory localizerFactory)
{
var localizer = localizerFactory.Create("Http.Common");
- return new CommonDataResponse<ResponseData>(0, localizer["ResponseDeleteDelete"], new ResponseData(true));
+ return new CommonDeleteResponse(0, localizer["ResponseDeleteDelete"], true);
}
- internal static CommonDataResponse<ResponseData> NotExist(IStringLocalizerFactory localizerFactory)
+ internal static CommonDeleteResponse NotExist(IStringLocalizerFactory localizerFactory)
{
var localizer = localizerFactory.Create("Http.Common");
- return new CommonDataResponse<ResponseData>(0, localizer["ResponseDeleteNotExist"], new ResponseData(false));
+ return new CommonDeleteResponse(0, localizer["ResponseDeleteNotExist"], false);
}
}
}
diff --git a/Timeline/Resources/Controllers/UserController.en.resx b/Timeline/Resources/Controllers/UserController.en.resx index f0fb372a..0bd1dfe3 100644 --- a/Timeline/Resources/Controllers/UserController.en.resx +++ b/Timeline/Resources/Controllers/UserController.en.resx @@ -117,6 +117,15 @@ <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
+ <data name="ErrorChangePasswordBadPassword" xml:space="preserve">
+ <value>Old password is wrong.</value>
+ </data>
+ <data name="ErrorChangeUsernameAlreadyExist" xml:space="preserve">
+ <value>The new username {0} already exists.</value>
+ </data>
+ <data name="ErrorChangeUsernameNotExist" xml:space="preserve">
+ <value>The old username {0} does not exist.</value>
+ </data>
<data name="ErrorGetUserNotExist" xml:space="preserve">
<value>The user does not exist.</value>
</data>
diff --git a/Timeline/Resources/Controllers/UserController.resx b/Timeline/Resources/Controllers/UserController.resx index 901f8aab..d720d1c1 100644 --- a/Timeline/Resources/Controllers/UserController.resx +++ b/Timeline/Resources/Controllers/UserController.resx @@ -117,6 +117,21 @@ <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
+ <data name="LogChangePasswordBadPassword" xml:space="preserve">
+ <value>Attempt to change password with wrong old password failed.</value>
+ </data>
+ <data name="LogChangePasswordSuccess" xml:space="preserve">
+ <value>A user has changed password.</value>
+ </data>
+ <data name="LogChangeUsernameAlreadyExist" xml:space="preserve">
+ <value>Attempt to change a user's username to a existent one failed.</value>
+ </data>
+ <data name="LogChangeUsernameNotExist" xml:space="preserve">
+ <value>Attempt to change a username of a user that does not exist failed.</value>
+ </data>
+ <data name="LogChangeUsernameSuccess" xml:space="preserve">
+ <value>A user has changed username.</value>
+ </data>
<data name="LogDeleteDelete" xml:space="preserve">
<value>A user has been deleted.</value>
</data>
diff --git a/Timeline/Resources/Controllers/UserController.zh.resx b/Timeline/Resources/Controllers/UserController.zh.resx index 519f08f6..3556083e 100644 --- a/Timeline/Resources/Controllers/UserController.zh.resx +++ b/Timeline/Resources/Controllers/UserController.zh.resx @@ -117,6 +117,15 @@ <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
+ <data name="ErrorChangePasswordBadPassword" xml:space="preserve">
+ <value>旧密码错误。</value>
+ </data>
+ <data name="ErrorChangeUsernameAlreadyExist" xml:space="preserve">
+ <value>新用户名{0}已经存在。</value>
+ </data>
+ <data name="ErrorChangeUsernameNotExist" xml:space="preserve">
+ <value>旧用户名{0}不存在。</value>
+ </data>
<data name="ErrorGetUserNotExist" xml:space="preserve">
<value>用户不存在。</value>
</data>
|