47 lines
1.6 KiB
D
47 lines
1.6 KiB
D
/// API endpoints for authentication-related functions, like registration and login.
|
|
module auth.api;
|
|
|
|
import handy_http_primitives;
|
|
import handy_http_data.json;
|
|
import handy_http_handlers.path_handler;
|
|
import slf4d;
|
|
|
|
import auth.model;
|
|
import auth.data;
|
|
import auth.service;
|
|
import auth.data_impl_fs;
|
|
|
|
@PathMapping(HttpMethod.GET, "/api/me")
|
|
void getMyUser(ref ServerHttpRequest request, ref ServerHttpResponse response) {
|
|
AuthContext auth = getAuthContext(request);
|
|
response.writeBodyString(auth.user.username);
|
|
}
|
|
|
|
@PathMapping(HttpMethod.DELETE, "/api/me")
|
|
void deleteMyUser(ref ServerHttpRequest request, ref ServerHttpResponse response) {
|
|
AuthContext auth = getAuthContext(request);
|
|
UserRepository userRepo = new FileSystemUserRepository();
|
|
deleteUser(auth.user, userRepo);
|
|
infoF!"Deleted user: %s"(auth.user.username);
|
|
}
|
|
|
|
@PathMapping(HttpMethod.GET, "/api/me/token")
|
|
void getNewToken(ref ServerHttpRequest request, ref ServerHttpResponse response) {
|
|
AuthContext auth = getAuthContext(request);
|
|
string token = generateTokenForUser(auth.user);
|
|
response.writeBodyString(token);
|
|
infoF!"Generated token for user: %s"(auth.user.username);
|
|
}
|
|
|
|
struct PasswordChangeRequest {
|
|
string currentPassword;
|
|
string newPassword;
|
|
}
|
|
|
|
@PathMapping(HttpMethod.POST, "/api/me/password")
|
|
void changeMyPassword(ref ServerHttpRequest request, ref ServerHttpResponse response) {
|
|
AuthContext auth = getAuthContext(request);
|
|
PasswordChangeRequest data = readJsonBodyAs!PasswordChangeRequest(request);
|
|
changePassword(auth.user, new FileSystemUserRepository(), data.currentPassword, data.newPassword);
|
|
}
|