diff --git a/pom.xml b/pom.xml
index 0627f58..dd14219 100644
--- a/pom.xml
+++ b/pom.xml
@@ -103,6 +103,11 @@
flyway-core
compile
+
+ com.spencerwi
+ Either.java
+ 2.2.0
+
diff --git a/src/main/frontend/admin/pages/user/ViewUsers.ts b/src/main/frontend/admin/pages/user/ViewUsers.ts
index d16fe6c..d377bee 100644
--- a/src/main/frontend/admin/pages/user/ViewUsers.ts
+++ b/src/main/frontend/admin/pages/user/ViewUsers.ts
@@ -2,6 +2,7 @@ import moment from "moment";
import { capitalize } from "../../../common/util/Util";
import { AdminUserDTO } from "../../../common/dto/AdminUserDTO";
import log from "loglevel";
+import { createApiHeaders } from "../../../common/ajax/util";
export async function viewUsers(authToken: string) {
// const users = await getOtherUsers(authToken);
@@ -46,7 +47,18 @@ export async function viewUsers(authToken: string) {
extend: "selectedSingle",
text: "Delete User",
action: (e, dt, button, config) => {
- log.error("Not implemented yet");
+ const selectedRow = dt.row({ selected: true });
+ const username = (selectedRow.data() as AdminUserDTO).userName;
+ fetch(`/api/admin/delete/users/${username}`, {
+ headers: createApiHeaders(authToken),
+ method: "DELETE",
+ }).then((resp) => {
+ if (resp.status === 200) {
+ selectedRow.remove();
+ log.info("User deleted successfully");
+ dt.draw();
+ }
+ });
},
},
{
diff --git a/src/main/java/org/ros/chatto/controller/AdminRESTController.java b/src/main/java/org/ros/chatto/controller/AdminRESTController.java
index 04e915b..6b98ace 100644
--- a/src/main/java/org/ros/chatto/controller/AdminRESTController.java
+++ b/src/main/java/org/ros/chatto/controller/AdminRESTController.java
@@ -2,20 +2,21 @@ package org.ros.chatto.controller;
import java.security.Principal;
import java.time.Instant;
-import java.util.Date;
import java.util.List;
import javax.validation.Valid;
+import com.spencerwi.either.Result;
+
import org.ros.chatto.dto.AdminUserDTO;
import org.ros.chatto.dto.ChatMessageDTO;
import org.ros.chatto.dto.ReencryptionDTO;
import org.ros.chatto.service.AdminService;
import org.ros.chatto.service.ChatService;
import org.ros.chatto.service.UserService;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
@@ -70,4 +71,17 @@ public class AdminRESTController {
public List getAllOtherUsers(Principal principal) {
return adminService.getOtherUsers(principal.getName());
}
+
+ @DeleteMapping("/delete/users/{userName}")
+ public ResponseEntity> deleteUser(@PathVariable String userName) {
+ Result res = adminService.deleteUser(userName);
+ if (res.isOk()) {
+ return ResponseEntity.ok()
+ .body("Deleted User with name - " + userName);
+ } else {
+ return ResponseEntity.badRequest().body(
+ "An error occured while trying to delete user with name - "
+ + userName);
+ }
+ }
}
diff --git a/src/main/java/org/ros/chatto/service/AdminService.java b/src/main/java/org/ros/chatto/service/AdminService.java
index ababd91..bd29928 100644
--- a/src/main/java/org/ros/chatto/service/AdminService.java
+++ b/src/main/java/org/ros/chatto/service/AdminService.java
@@ -1,20 +1,33 @@
package org.ros.chatto.service;
-import java.security.Principal;
import java.util.List;
+import java.util.Optional;
+
+import com.spencerwi.either.Result;
import org.ros.chatto.dto.AdminUserDTO;
+import org.ros.chatto.model.ChatUser;
import org.ros.chatto.repository.UserRepository;
import org.springframework.stereotype.Service;
import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
@Service
@RequiredArgsConstructor
+@Slf4j
public class AdminService {
private final UserRepository userRepository;
public List getOtherUsers(String principal) {
return userRepository.getOtherUsers(principal);
}
+
+ public Result deleteUser(String userName) {
+ Optional user = userRepository.findByUserName(userName);
+ return Result.attempt(() -> user.get()).map((u) -> {
+ userRepository.delete(u);
+ return (Void) null;
+ });
+ }
}
\ No newline at end of file
diff --git a/src/main/java/org/ros/chatto/service/UserService.java b/src/main/java/org/ros/chatto/service/UserService.java
index 931aec9..a8abb2f 100644
--- a/src/main/java/org/ros/chatto/service/UserService.java
+++ b/src/main/java/org/ros/chatto/service/UserService.java
@@ -28,4 +28,5 @@ public interface UserService {
public void incrementUserSession(String userName);
public UserSession decrementUserSession(String userName);
+
}
diff --git a/src/main/java/org/ros/chatto/service/UserServiceImpl.java b/src/main/java/org/ros/chatto/service/UserServiceImpl.java
index 99e5737..bc469f6 100644
--- a/src/main/java/org/ros/chatto/service/UserServiceImpl.java
+++ b/src/main/java/org/ros/chatto/service/UserServiceImpl.java
@@ -194,4 +194,14 @@ public class UserServiceImpl implements UserService {
return user.getUserRoles().stream().map(ur -> ur.getRole())
.collect(Collectors.toSet());
}
+
+ public void deleteUser(String userName) {
+ //
+ Optional user = userRepository.findByUserName(userName);
+ user.ifPresentOrElse(u -> {
+ userRepository.delete(u);
+ }, () -> {
+ log.error("User with name {} not found for deletion", userName);
+ });
+ }
}