Skip to content

Commit

Permalink
Add methods about user in auth-server (#26)
Browse files Browse the repository at this point in the history
* feat: implemented user api

Signed-off-by: BoGyum Kim | 김보겸 <[email protected]>

* test: refactor test with fixture creation methods

Signed-off-by: BoGyum Kim | 김보겸 <[email protected]>

* refactor: remove randome username generator dependency

Signed-off-by: BoGyum Kim | 김보겸 <[email protected]>

---------

Signed-off-by: BoGyum Kim | 김보겸 <[email protected]>
  • Loading branch information
seedspirit authored Oct 26, 2024
1 parent 90edfef commit 52e4379
Show file tree
Hide file tree
Showing 18 changed files with 1,083 additions and 14 deletions.
60 changes: 53 additions & 7 deletions src/main/java/io/litmuschaos/LitmusClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@
import com.google.gson.reflect.TypeToken;
import io.litmuschaos.exception.LitmusApiException;
import io.litmuschaos.http.LitmusHttpClient;
import io.litmuschaos.request.*;
import io.litmuschaos.response.*;

import io.litmuschaos.request.CreateProjectRequest;
import io.litmuschaos.request.LeaveProjectRequest;
import io.litmuschaos.request.ListProjectRequest;
Expand Down Expand Up @@ -30,26 +33,69 @@ public class LitmusClient implements AutoCloseable {
public LitmusClient(String host, String username, String password)
throws IOException, LitmusApiException {
this.httpClient = new LitmusHttpClient(host);
this.authenticate(username, password);
LoginRequest request = LoginRequest.builder().username(username).password(password).build();
this.authenticate(request);
}

@Override
public void close() throws Exception {
this.httpClient.close();
}

// TODO - @Suyeon Jung : host, port config to LitmusAuthConfig class
public LoginResponse authenticate(String username, String password)
public LoginResponse authenticate(LoginRequest request)
throws IOException, LitmusApiException {
LoginRequest request = LoginRequest.builder()
.username(username)
.password(password)
.build();
LoginResponse response = httpClient.post("/login", request, LoginResponse.class);
this.token = response.getAccessToken();
return response;
}

public CommonResponse logout() throws IOException, LitmusApiException {
CommonResponse commonResponse = httpClient.post("/logout", token, CommonResponse.class);
this.token = "";
return commonResponse;
}

public ListTokensResponse getTokens(String userId) throws IOException, LitmusApiException {
return httpClient.get("/token/" + userId, token, ListTokensResponse.class);
}

public TokenCreateResponse createToken(TokenCreateRequest request) throws IOException, LitmusApiException {
return httpClient.post("/create_token", token, request, TokenCreateResponse.class);
}

public CommonResponse deleteToken(TokenDeleteRequest request) throws IOException, LitmusApiException {
return httpClient.post("/remove_token", token, request, CommonResponse.class);
}

public UserResponse getUser(String userId) throws IOException, LitmusApiException {
return httpClient.get("/get_user/" + userId, token, UserResponse.class);
}

public List<UserResponse> getUsers() throws IOException, LitmusApiException {
TypeToken<List<UserResponse>> typeToken = new TypeToken<>() {};
return httpClient.get("/users", token, typeToken);
}

public PasswordUpdateResponse updatePassword(PasswordUpdateRequest request) throws IOException, LitmusApiException {
return httpClient.post("/update/password", token, request, PasswordUpdateResponse.class);
}

public UserResponse createUser(UserCreateRequest request) throws IOException, LitmusApiException {
return httpClient.post("/create_user", token, request, UserResponse.class);
}

public CommonResponse resetPassword(PasswordResetRequest request) throws IOException, LitmusApiException {
return httpClient.post("/reset/password", token, request, CommonResponse.class);
}

public CommonResponse updateUserDetails(UserDetailsUpdateRequest request) throws IOException, LitmusApiException {
return httpClient.post("/update/details", token, request, CommonResponse.class);
}

public CommonResponse updateUserState(UserStateUpdateRequest request) throws IOException, LitmusApiException {
return httpClient.post("/update/state", token, request, CommonResponse.class);
}

public CapabilityResponse capabilities() throws IOException, LitmusApiException {
return httpClient.get("/capabilities", CapabilityResponse.class);
}
Expand Down
22 changes: 17 additions & 5 deletions src/main/java/io/litmuschaos/http/HttpResponseHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,12 @@ public <T> T handleResponse(Response response, Type responseType) throws LitmusA

private void handleErrorResponse(Response response) throws LitmusApiException, IOException {
String errorMessage = "";
if(response.body() != null && !response.body().string().isEmpty()) {
errorMessage = parseErrorDescription(response.body().string());
String bodyString = "";
if (response.body() != null) {
bodyString = response.body().string();
if (!bodyString.isEmpty()) {
errorMessage = parseErrorDescription(bodyString);
}
}
switch (response.code()) {
case 400:
Expand All @@ -46,9 +50,17 @@ private void handleErrorResponse(Response response) throws LitmusApiException, I
}

private String parseErrorDescription(String errorBody) {
JsonObject jsonObject = gson.fromJson(errorBody, JsonObject.class);
if (jsonObject.has("errorDescription")) {
return jsonObject.get("errorDescription").getAsString();
try {
String[] jsonObjects = errorBody.split("(?<=})(?=\\{)");

for (String jsonStr : jsonObjects) {
JsonObject jsonObject = gson.fromJson(jsonStr, JsonObject.class);
if (jsonObject.has("errorDescription")) {
return jsonObject.get("errorDescription").getAsString();
}
}
} catch (Exception e) {
return "";
}
return "";
}
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/io/litmuschaos/http/LitmusHttpClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@ public <T> T get(String url, Class<T> responseType) throws IOException, LitmusAp
return get(url, null, null, responseType);
}

public <T> T get(String url, TypeToken<T> typeToken) throws IOException, LitmusApiException {
return get(url, null, null, typeToken);
}

public <T> T get(String url, String token, Class<T> responseType) throws IOException, LitmusApiException {
return get(url, token, null, responseType);
}
Expand Down
8 changes: 8 additions & 0 deletions src/main/java/io/litmuschaos/request/LoginRequest.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,12 @@ public LoginRequest build() {
return new LoginRequest(this);
}
}

public String getUsername() {
return username;
}

public String getPassword() {
return password;
}
}
47 changes: 47 additions & 0 deletions src/main/java/io/litmuschaos/request/PasswordResetRequest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package io.litmuschaos.request;

import io.litmuschaos.util.Builder;

public class PasswordResetRequest {

private final String username;
private final String newPassword;

private PasswordResetRequest(PasswordResetRequestBuilder builder) {
this.username = builder.username;
this.newPassword = builder.newPassword;
}

public String getUsername() {
return username;
}

public String getNewPassword() {
return newPassword;
}

public static class PasswordResetRequestBuilder implements Builder<PasswordResetRequest> {
private String username;
private String newPassword;

public PasswordResetRequestBuilder() {}

public PasswordResetRequestBuilder username(String username) {
this.username = username;
return this;
}

public PasswordResetRequestBuilder newPassword(String newPassword) {
this.newPassword = newPassword;
return this;
}

public PasswordResetRequest build() {
return new PasswordResetRequest(this);
}
}

public static PasswordResetRequestBuilder builder() {
return new PasswordResetRequestBuilder();
}
}
63 changes: 63 additions & 0 deletions src/main/java/io/litmuschaos/request/PasswordUpdateRequest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package io.litmuschaos.request;

import io.litmuschaos.util.Builder;

public class PasswordUpdateRequest {

private final String username;

private final String oldPassword;

private final String newPassword;

private PasswordUpdateRequest(PasswordUpdateRequestBuilder builder) {
this.username = builder.username;
this.oldPassword = builder.oldPassword;
this.newPassword = builder.newPassword;
}

public String getUsername() {
return username;
}

public String getOldPassword() {
return oldPassword;
}

public String getNewPassword() {
return newPassword;
}

public static class PasswordUpdateRequestBuilder implements Builder<PasswordUpdateRequest> {
private String username;

private String oldPassword;

private String newPassword;

public PasswordUpdateRequestBuilder(){}

public PasswordUpdateRequestBuilder username(String username){
this.username = username;
return this;
}

public PasswordUpdateRequestBuilder oldPassword(String oldPassword){
this.oldPassword = oldPassword;
return this;
}

public PasswordUpdateRequestBuilder newPassword(String newPassword){
this.newPassword = newPassword;
return this;
}

public PasswordUpdateRequest build(){
return new PasswordUpdateRequest(this);
}
}

public static PasswordUpdateRequestBuilder builder(){
return new PasswordUpdateRequestBuilder();
}
}
59 changes: 59 additions & 0 deletions src/main/java/io/litmuschaos/request/TokenCreateRequest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package io.litmuschaos.request;

import io.litmuschaos.util.Builder;

public class TokenCreateRequest {
// Field names in token dto follow snake case convention to maintain consistency with chaos center API response format
private final String user_id;
private final String name;
private final Integer days_until_expiration;

private TokenCreateRequest(TokenCreateRequestBuilder builder) {
this.user_id = builder.userID;
this.name = builder.name;
this.days_until_expiration = builder.daysUntilExpiration;
}

public String getUserID() {
return user_id;
}

public String getName() {
return name;
}

public Integer getDaysUntilExpiration() {
return days_until_expiration;
}

public static class TokenCreateRequestBuilder implements Builder<TokenCreateRequest> {
private String userID;
private String name;
private Integer daysUntilExpiration;

public TokenCreateRequestBuilder() {}

public TokenCreateRequestBuilder userID(String userId) {
this.userID = userId;
return this;
}

public TokenCreateRequestBuilder name(String name) {
this.name = name;
return this;
}

public TokenCreateRequestBuilder daysUntilExpiration(Integer daysUntilExpiration) {
this.daysUntilExpiration = daysUntilExpiration;
return this;
}

public TokenCreateRequest build() {
return new TokenCreateRequest(this);
}
}

public static TokenCreateRequestBuilder builder() {
return new TokenCreateRequestBuilder();
}
}
47 changes: 47 additions & 0 deletions src/main/java/io/litmuschaos/request/TokenDeleteRequest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package io.litmuschaos.request;

import io.litmuschaos.util.Builder;

public class TokenDeleteRequest {
private final String userID;
private final String token;

private TokenDeleteRequest(TokenDeleteRequestBuilder builder) {
this.userID = builder.userID;
this.token = builder.token;
}

public String getUserID() {
return userID;
}

public String getName() {
return token;
}


public static class TokenDeleteRequestBuilder implements Builder<TokenDeleteRequest> {
private String userID;
private String token;

public TokenDeleteRequestBuilder() {}

public TokenDeleteRequestBuilder userID(String userId) {
this.userID = userId;
return this;
}

public TokenDeleteRequestBuilder token(String token) {
this.token = token;
return this;
}

public TokenDeleteRequest build() {
return new TokenDeleteRequest(this);
}
}

public static TokenDeleteRequestBuilder builder() {
return new TokenDeleteRequestBuilder();
}
}
Loading

0 comments on commit 52e4379

Please sign in to comment.