finnow/finnow-api/source/auth/api.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);
}