diff --git a/README.md b/README.md index f9a80c0..75dafe1 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Or Pdf : https://buildmedia.readthedocs.org/media/pdf/kafkawize/latest/kafkawize.pdf -Download options : https://kafkawize.readthedocs.io/en/latest/getting_started.html#download-kafkawize-3-1 +Download options : https://kafkawize.readthedocs.io/en/latest/getting_started.html#download-kafkawize Screenshots @@ -42,3 +42,5 @@ Download options : https://kafkawize.readthedocs.io/en/latest/getting_started.ht ![ImageFig17](https://github.com/kafkawize/kafkawize/blob/master/screenshots/ActivityLog.JPG) ![ImageFig18](https://github.com/kafkawize/kafkawize/blob/master/screenshots/ViewUsers.JPG) + +![ImageFig20](https://github.com/kafkawize/kafkawize/blob/master/screenshots/ViewTeams.JPG) \ No newline at end of file diff --git a/ReleaseNotes.txt b/ReleaseNotes.txt index 6f3b2f1..74c7822 100644 --- a/ReleaseNotes.txt +++ b/ReleaseNotes.txt @@ -1,4 +1,4 @@ -Kafkawize 3.1 +Kafkawize 3.2 Kafkawize is a Kafka Topic management tool (A Web application) which automates the process of creating and browsing Kafka components, by introducing roles/authorizations to users of various teams of an organization diff --git a/kafkawize-conf/environments/local/application.properties b/kafkawize-conf/environments/local/application.properties index 8185302..1ad383e 100644 --- a/kafkawize-conf/environments/local/application.properties +++ b/kafkawize-conf/environments/local/application.properties @@ -3,7 +3,7 @@ server.port:9097 server.servlet.context-path=/kafkawize # db.storetype should be "cassandra" or "rdbms" -db.storetype=rdbms +db.storetype=cassandra # cluster api properties clusterapi.url:http://localhost:9343 diff --git a/kafkawize-conf/pom.xml b/kafkawize-conf/pom.xml index f85c13c..12ae721 100644 --- a/kafkawize-conf/pom.xml +++ b/kafkawize-conf/pom.xml @@ -5,7 +5,7 @@ kafkawize com.kafkamgt.uiapi - 3.1 + 3.2 4.0.0 diff --git a/kafkawize-web/pom.xml b/kafkawize-web/pom.xml index c087f23..58f6e50 100644 --- a/kafkawize-web/pom.xml +++ b/kafkawize-web/pom.xml @@ -5,7 +5,7 @@ kafkawize com.kafkamgt.uiapi - 3.1 + 3.2 jar 4.0.0 diff --git a/kafkawize-web/src/main/java/com/kafkamgt/uiapi/controller/AclController.java b/kafkawize-web/src/main/java/com/kafkamgt/uiapi/controller/AclController.java index 4a5576d..c19d2ad 100644 --- a/kafkawize-web/src/main/java/com/kafkamgt/uiapi/controller/AclController.java +++ b/kafkawize-web/src/main/java/com/kafkamgt/uiapi/controller/AclController.java @@ -2,6 +2,7 @@ import com.kafkamgt.uiapi.dao.AclRequests; +import com.kafkamgt.uiapi.error.KafkawizeException; import com.kafkamgt.uiapi.model.AclInfo; import com.kafkamgt.uiapi.service.AclControllerService; import org.slf4j.Logger; @@ -55,18 +56,18 @@ public ResponseEntity deleteAclRequests(@RequestParam("req_no") String r } @PostMapping(value = "/execAclRequest") - public ResponseEntity approveAclRequests(@RequestParam("req_no") String req_no) { + public ResponseEntity approveAclRequests(@RequestParam("req_no") String req_no) throws KafkawizeException { return new ResponseEntity(aclControllerService.approveAclRequests(req_no), HttpStatus.OK); } @RequestMapping(value = "/getAcls", method = RequestMethod.GET, produces = {MediaType.APPLICATION_JSON_VALUE}) public ResponseEntity> getAcls(@RequestParam("env") String env, @RequestParam("pageNo") String pageNo, - @RequestParam(value="topicnamesearch",required=false) String topicNameSearch) { + @RequestParam(value="topicnamesearch",required=false) String topicNameSearch) throws KafkawizeException { return new ResponseEntity<>(aclControllerService.getAcls(env, pageNo, topicNameSearch, false), HttpStatus.OK); } @RequestMapping(value = "/getSyncAcls", method = RequestMethod.GET, produces = {MediaType.APPLICATION_JSON_VALUE}) - public ResponseEntity> getSyncAcls(@RequestParam("env") String env, @RequestParam("pageNo") String pageNo) { + public ResponseEntity> getSyncAcls(@RequestParam("env") String env, @RequestParam("pageNo") String pageNo) throws KafkawizeException { return new ResponseEntity<>(aclControllerService.getAcls(env, pageNo, null, true), HttpStatus.OK); } } diff --git a/kafkawize-web/src/main/java/com/kafkamgt/uiapi/controller/SchemaRegstryController.java b/kafkawize-web/src/main/java/com/kafkamgt/uiapi/controller/SchemaRegstryController.java index f54cc10..8818b9d 100644 --- a/kafkawize-web/src/main/java/com/kafkamgt/uiapi/controller/SchemaRegstryController.java +++ b/kafkawize-web/src/main/java/com/kafkamgt/uiapi/controller/SchemaRegstryController.java @@ -2,6 +2,7 @@ import com.kafkamgt.uiapi.dao.SchemaRequest; +import com.kafkamgt.uiapi.error.KafkawizeException; import com.kafkamgt.uiapi.service.SchemaRegstryControllerService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -48,7 +49,7 @@ public ResponseEntity deleteSchemaRequests(@RequestParam("topicName") St } @RequestMapping(value = "/execSchemaRequests", method = RequestMethod.GET, produces = {MediaType.APPLICATION_JSON_VALUE}) - public ResponseEntity execSchemaRequests(@RequestParam("topicName") String topicName) { + public ResponseEntity execSchemaRequests(@RequestParam("topicName") String topicName) throws KafkawizeException { String updateTopicReqStatus = "{\"result\":\"" + schemaRegstryControllerService.execSchemaRequests(topicName) + "\"}"; return new ResponseEntity<>(updateTopicReqStatus, HttpStatus.OK); diff --git a/kafkawize-web/src/main/java/com/kafkamgt/uiapi/controller/TopicController.java b/kafkawize-web/src/main/java/com/kafkamgt/uiapi/controller/TopicController.java index e514754..00bf107 100644 --- a/kafkawize-web/src/main/java/com/kafkamgt/uiapi/controller/TopicController.java +++ b/kafkawize-web/src/main/java/com/kafkamgt/uiapi/controller/TopicController.java @@ -3,6 +3,7 @@ import com.kafkamgt.uiapi.dao.Topic; import com.kafkamgt.uiapi.dao.TopicRequest; +import com.kafkamgt.uiapi.error.KafkawizeException; import com.kafkamgt.uiapi.model.PCStream; import com.kafkamgt.uiapi.model.TopicInfo; import com.kafkamgt.uiapi.service.TopicControllerService; @@ -72,7 +73,7 @@ public ResponseEntity deleteTopicRequests(@RequestParam("topicName") Str } @RequestMapping(value = "/execTopicRequests", method = RequestMethod.GET, produces = {MediaType.APPLICATION_JSON_VALUE}) - public ResponseEntity approveTopicRequests(@RequestParam("topicName") String topicName) { + public ResponseEntity approveTopicRequests(@RequestParam("topicName") String topicName) throws KafkawizeException { return new ResponseEntity<>(topicControllerService.approveTopicRequests(topicName), HttpStatus.OK); } diff --git a/kafkawize-web/src/main/java/com/kafkamgt/uiapi/controller/UiConfigController.java b/kafkawize-web/src/main/java/com/kafkamgt/uiapi/controller/UiConfigController.java index 7cce3e2..edfc96c 100644 --- a/kafkawize-web/src/main/java/com/kafkamgt/uiapi/controller/UiConfigController.java +++ b/kafkawize-web/src/main/java/com/kafkamgt/uiapi/controller/UiConfigController.java @@ -1,25 +1,18 @@ package com.kafkamgt.uiapi.controller; -import com.kafkamgt.uiapi.dao.Team; import com.kafkamgt.uiapi.dao.ActivityLog; import com.kafkamgt.uiapi.dao.Env; +import com.kafkamgt.uiapi.dao.Team; import com.kafkamgt.uiapi.dao.UserInfo; import com.kafkamgt.uiapi.service.ManageTopics; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import com.kafkamgt.uiapi.service.UiConfigControllerService; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.json.GsonJsonParser; -import org.springframework.http.*; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.core.userdetails.User; -import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.security.crypto.factory.PasswordEncoderFactories; -import org.springframework.security.crypto.password.PasswordEncoder; -import org.springframework.security.provisioning.InMemoryUserDetailsManager; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; -import java.util.*; +import java.util.List; @RestController @@ -28,230 +21,84 @@ public class UiConfigController { //private static Logger LOG = LoggerFactory.getLogger(UiConfigController.class); + @Autowired + private UiConfigControllerService uiConfigControllerService; + @Autowired private ManageTopics manageTopics; @RequestMapping(value = "/getEnvs", method = RequestMethod.GET, produces = {MediaType.APPLICATION_JSON_VALUE}) public ResponseEntity> getEnvs() { - return new ResponseEntity<>(manageTopics.selectAllKafkaEnvs(), HttpStatus.OK); + return new ResponseEntity<>(uiConfigControllerService.getEnvs(), HttpStatus.OK); } @RequestMapping(value = "/getSchemaRegEnvs", method = RequestMethod.GET, produces = {MediaType.APPLICATION_JSON_VALUE}) public ResponseEntity> getSchemaRegEnvs() { - return new ResponseEntity<>(manageTopics.selectAllSchemaRegEnvs(), HttpStatus.OK); + return new ResponseEntity<>(uiConfigControllerService.getSchemaRegEnvs(), HttpStatus.OK); } @RequestMapping(value = "/getAllTeams", method = RequestMethod.GET, produces = {MediaType.APPLICATION_JSON_VALUE}) public ResponseEntity> getAllTeams() { - return new ResponseEntity<>(manageTopics.selectAllTeamsOfUsers(getUserName()), HttpStatus.OK); + return new ResponseEntity<>(uiConfigControllerService.getAllTeams(), HttpStatus.OK); } @RequestMapping(value = "/getAllTeamsSU", method = RequestMethod.GET, produces = {MediaType.APPLICATION_JSON_VALUE}) public ResponseEntity> getAllTeamsSU() { - - return new ResponseEntity<>(manageTopics.selectAllTeams(), HttpStatus.OK); - } - - private final InMemoryUserDetailsManager inMemoryUserDetailsManager; - - @Autowired - public UiConfigController(InMemoryUserDetailsManager inMemoryUserDetailsManager) { - this.inMemoryUserDetailsManager = inMemoryUserDetailsManager; + return new ResponseEntity<>(uiConfigControllerService.getAllTeamsSU(), HttpStatus.OK); } @PostMapping(value = "/addNewEnv") public ResponseEntity addNewEnv(@RequestBody Env newEnv){ - - UserDetails userDetails = getUserDetails(); - - GrantedAuthority ga = userDetails.getAuthorities().iterator().next(); - String authority = ga.getAuthority(); - String json = ""; - if(authority.equals("ROLE_SUPERUSER")){} - else{ - json = "{ \"result\": \"Not Authorized\" }"; - return new ResponseEntity(json, HttpStatus.OK); - } - - newEnv.setTrustStorePwd(""); - newEnv.setKeyPwd(""); - newEnv.setKeyStorePwd(""); - newEnv.setTrustStoreLocation(""); - newEnv.setKeyStoreLocation(""); - String execRes = manageTopics.addNewEnv(newEnv); - - String envAddResult = "{\"result\":\""+execRes+"\"}"; - return new ResponseEntity(envAddResult, HttpStatus.OK); + return new ResponseEntity<>(uiConfigControllerService.addNewEnv(newEnv), HttpStatus.OK); } @PostMapping(value = "/deleteClusterRequest") public ResponseEntity deleteCluster(@RequestParam ("clusterId") String clusterId){ - String execRes = manageTopics.deleteClusterRequest(clusterId); + return new ResponseEntity<>(uiConfigControllerService.deleteCluster(clusterId), HttpStatus.OK); + } + + @PostMapping(value = "/deleteTeamRequest") + public ResponseEntity deleteTeam(@RequestParam ("teamId") String teamId){ - String envAddResult = "{\"result\":\""+execRes+"\"}"; - return new ResponseEntity<>(envAddResult, HttpStatus.OK); + return new ResponseEntity<>(uiConfigControllerService.deleteTeam(teamId), HttpStatus.OK); } @PostMapping(value = "/deleteUserRequest") public ResponseEntity deleteUser(@RequestParam ("userId") String userId){ - String envAddResult = "{\"result\":\"User cannot be deleted\"}"; - - if(userId.equals("superuser") || getUserName().equals(userId)) - return new ResponseEntity<>(envAddResult, HttpStatus.OK); - - String execRes = manageTopics.deleteUserRequest(userId); - envAddResult = "{\"result\":\""+execRes+"\"}"; - - return new ResponseEntity<>(envAddResult, HttpStatus.OK); + return new ResponseEntity<>(uiConfigControllerService.deleteUser(userId), HttpStatus.OK); } @PostMapping(value = "/addNewUser") public ResponseEntity addNewUser(@RequestBody UserInfo newUser){ - - PasswordEncoder encoder = - PasswordEncoderFactories.createDelegatingPasswordEncoder(); - inMemoryUserDetailsManager.createUser(User.withUsername(newUser.getUsername()).password(encoder.encode(newUser.getPwd())) - .roles(newUser.getRole()).build()); - - String execRes = manageTopics.addNewUser(newUser); - - String userAddResult = "{\"result\":\""+execRes+"\"}"; - return new ResponseEntity<>(userAddResult, HttpStatus.OK); + return new ResponseEntity<>(uiConfigControllerService.addNewUser(newUser), HttpStatus.OK); } @PostMapping(value = "/addNewTeam") public ResponseEntity addNewTeam(@RequestBody Team newTeam){ - - UserDetails userDetails = getUserDetails(); - - GrantedAuthority ga = userDetails.getAuthorities().iterator().next(); - String authority = ga.getAuthority(); - String json = ""; - if(authority.equals("ROLE_SUPERUSER")){} - else{ - json = "{ \"result\": \"Not Authorized\" }"; - return new ResponseEntity<>(json, HttpStatus.OK); - } - - String execRes = manageTopics.addNewTeam(newTeam); - - String teamAddResult = "{\"result\":\""+execRes+"\"}"; - return new ResponseEntity<>(teamAddResult, HttpStatus.OK); + return new ResponseEntity<>(uiConfigControllerService.addNewTeam(newTeam), HttpStatus.OK); } @PostMapping(value = "/chPwd") public ResponseEntity changePwd(@RequestParam ("changePwd") String changePwd){ - - UserDetails userDetails = getUserDetails(); - - GsonJsonParser jsonParser = new GsonJsonParser(); - Map pwdMap = jsonParser.parseMap(changePwd); - - String pwdChange = (String)pwdMap.get("pwd"); - - PasswordEncoder encoder = - PasswordEncoderFactories.createDelegatingPasswordEncoder(); - UserDetails ud = new UserDetails() { - @Override - public Collection getAuthorities() { - return userDetails.getAuthorities(); - } - - @Override - public String getPassword() { - return encoder.encode(pwdChange); - } - - @Override - public String getUsername() { - return userDetails.getUsername(); - } - - @Override - public boolean isAccountNonExpired() { - return userDetails.isAccountNonExpired(); - } - - @Override - public boolean isAccountNonLocked() { - return userDetails.isAccountNonLocked(); - } - - @Override - public boolean isCredentialsNonExpired() { - return userDetails.isCredentialsNonExpired(); - } - - @Override - public boolean isEnabled() { - return userDetails.isEnabled(); - } - }; - - inMemoryUserDetailsManager.updateUser(ud); - - String execRes = manageTopics.updatePassword(userDetails.getUsername(),pwdChange); - - String pwdChResult = "{\"result\":\""+execRes+"\"}"; - return new ResponseEntity<>(pwdChResult, HttpStatus.OK); + return new ResponseEntity<>(uiConfigControllerService.changePwd(changePwd), HttpStatus.OK); } @RequestMapping(value = "/showUserList", method = RequestMethod.GET, produces = {MediaType.APPLICATION_JSON_VALUE}) public ResponseEntity> showUsers(){ - - List userList = manageTopics.selectAllUsersInfo(); - - return new ResponseEntity<>(userList, HttpStatus.OK); + return new ResponseEntity<>(uiConfigControllerService.showUsers(), HttpStatus.OK); } @RequestMapping(value = "/getMyProfileInfo", method = RequestMethod.GET, produces = {MediaType.APPLICATION_JSON_VALUE}) public ResponseEntity getMyProfileInfo(){ - - UserInfo userList = manageTopics.getUsersInfo(getUserName()); - - return new ResponseEntity<>(userList, HttpStatus.OK); + return new ResponseEntity<>(uiConfigControllerService.getMyProfileInfo(), HttpStatus.OK); } @RequestMapping(value = "/activityLog", method = RequestMethod.GET, produces = {MediaType.APPLICATION_JSON_VALUE}) public ResponseEntity> showActivityLog(@RequestParam("env") String env, @RequestParam("pageNo") String pageNo){ - - List origActivityList = manageTopics.selectActivityLog(getUserName(), env); - - int totalRecs = origActivityList.size(); - int recsPerPage = 20; - - int requestPageNo = Integer.parseInt(pageNo); - int startVar = (requestPageNo-1) * recsPerPage; - int lastVar = (requestPageNo) * (recsPerPage); - - int totalPages = totalRecs/recsPerPage + (totalRecs%recsPerPage > 0 ? 1 : 0); - - List newList = new ArrayList<>(); - - List numList = new ArrayList<>(); - for (int k = 1; k <= totalPages; k++) { - numList.add("" + k); - } - for(int i=0;i=startVar && i(newList, HttpStatus.OK); + return new ResponseEntity<>(uiConfigControllerService.showActivityLog(env,pageNo), HttpStatus.OK); } - private String getUserName(){ - UserDetails userDetails = (UserDetails)SecurityContextHolder.getContext().getAuthentication().getPrincipal(); - return userDetails.getUsername(); - } - private UserDetails getUserDetails(){ - return (UserDetails)SecurityContextHolder.getContext().getAuthentication().getPrincipal(); - } } diff --git a/kafkawize-web/src/main/java/com/kafkamgt/uiapi/controller/UiControllerLogin.java b/kafkawize-web/src/main/java/com/kafkamgt/uiapi/controller/UiControllerLogin.java index 1425854..805afb5 100644 --- a/kafkawize-web/src/main/java/com/kafkamgt/uiapi/controller/UiControllerLogin.java +++ b/kafkawize-web/src/main/java/com/kafkamgt/uiapi/controller/UiControllerLogin.java @@ -3,17 +3,12 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.http.HttpStatus; -import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.stereotype.Controller; -import org.springframework.ui.Model; import org.springframework.ui.ModelMap; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.servlet.ModelAndView; - -import javax.servlet.http.HttpServletRequest; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; @Controller public class UiControllerLogin { diff --git a/kafkawize-web/src/main/java/com/kafkamgt/uiapi/helpers/HandleDbRequests.java b/kafkawize-web/src/main/java/com/kafkamgt/uiapi/helpers/HandleDbRequests.java index aa48a86..926d44e 100644 --- a/kafkawize-web/src/main/java/com/kafkamgt/uiapi/helpers/HandleDbRequests.java +++ b/kafkawize-web/src/main/java/com/kafkamgt/uiapi/helpers/HandleDbRequests.java @@ -91,6 +91,8 @@ public interface HandleDbRequests { public String deleteUserRequest(String userId); + public String deleteTeamRequest(String teamId); + public String deleteSchemaRequest(String topicName, String schemaVersion, String env); public String deletePrevAclRecs(List aclReqs); diff --git a/kafkawize-web/src/main/java/com/kafkamgt/uiapi/helpers/db/cassandra/DeleteData.java b/kafkawize-web/src/main/java/com/kafkamgt/uiapi/helpers/db/cassandra/DeleteData.java index 5d40c85..f4f9a05 100644 --- a/kafkawize-web/src/main/java/com/kafkamgt/uiapi/helpers/db/cassandra/DeleteData.java +++ b/kafkawize-web/src/main/java/com/kafkamgt/uiapi/helpers/db/cassandra/DeleteData.java @@ -75,6 +75,15 @@ public String deleteUserRequest(String userId){ return "success"; } + public String deleteTeamRequest(String teamId){ + + Clause eqclause = QueryBuilder.eq("team",teamId); + Delete.Where deleteQuery = QueryBuilder.delete().all().from(keyspace,"teams") + .where(eqclause); + session.execute(deleteQuery); + return "success"; + } + public String deletePrevAclRecs(List aclReqs){ //if( (aclListItem.get("resourceName").equals(aclSotItem.getTopicname()) || diff --git a/kafkawize-web/src/main/java/com/kafkamgt/uiapi/helpers/db/cassandra/HandleDbRequestsCassandra.java b/kafkawize-web/src/main/java/com/kafkamgt/uiapi/helpers/db/cassandra/HandleDbRequestsCassandra.java index 408c6f4..6918435 100644 --- a/kafkawize-web/src/main/java/com/kafkamgt/uiapi/helpers/db/cassandra/HandleDbRequestsCassandra.java +++ b/kafkawize-web/src/main/java/com/kafkamgt/uiapi/helpers/db/cassandra/HandleDbRequestsCassandra.java @@ -238,6 +238,11 @@ public String deleteUserRequest(String userId) { return cassandraDeleteHelper.deleteUserRequest(userId); } + @Override + public String deleteTeamRequest(String teamId) { + return cassandraDeleteHelper.deleteTeamRequest(teamId); + } + public String deleteSchemaRequest(String topicName, String schemaVersion, String env){ return cassandraDeleteHelper.deleteSchemaRequest(topicName,schemaVersion, env); } diff --git a/kafkawize-web/src/main/java/com/kafkamgt/uiapi/helpers/db/cassandra/InsertData.java b/kafkawize-web/src/main/java/com/kafkamgt/uiapi/helpers/db/cassandra/InsertData.java index 241bd69..571ffe2 100644 --- a/kafkawize-web/src/main/java/com/kafkamgt/uiapi/helpers/db/cassandra/InsertData.java +++ b/kafkawize-web/src/main/java/com/kafkamgt/uiapi/helpers/db/cassandra/InsertData.java @@ -46,12 +46,12 @@ public String insertIntoRequestTopic(TopicRequest topicRequest){ tableName = "topic_requests"; topicReqType = "Producer"; insertstat = "INSERT INTO " + keyspace + "."+tableName+"(topicname,partitions,replicationfactor,env,teamname,appname,topictype,requestor," + - "requesttime, acl_ip, acl_ssl, remarks, topicstatus) " + - "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?);"; + "requesttime, remarks, topicstatus) " + + "VALUES (?,?,?,?,?,?,?,?,?,?,?);"; PreparedStatement statement = session.prepare(insertstat); BoundStatement boundStatement = new BoundStatement(statement); session.execute(boundStatement.bind(topicRequest.getTopicname(), topicRequest.getTopicpartitions(), topicRequest.getReplicationfactor(), topicRequest.getEnvironment(), topicRequest.getTeamname(), topicRequest.getAppname(), - topicReqType, topicRequest.getUsername(), new Date(), topicRequest.getAcl_ip(), topicRequest.getAcl_ssl(), topicRequest.getRemarks(), "created")); + topicReqType, topicRequest.getUsername(), new Date(), topicRequest.getRemarks(), "created")); // Activity log insertIntoActivityLogTopic(topicRequest); diff --git a/kafkawize-web/src/main/java/com/kafkamgt/uiapi/helpers/db/rdbms/DeleteDataJdbc.java b/kafkawize-web/src/main/java/com/kafkamgt/uiapi/helpers/db/rdbms/DeleteDataJdbc.java index f12d824..f881976 100644 --- a/kafkawize-web/src/main/java/com/kafkamgt/uiapi/helpers/db/rdbms/DeleteDataJdbc.java +++ b/kafkawize-web/src/main/java/com/kafkamgt/uiapi/helpers/db/rdbms/DeleteDataJdbc.java @@ -25,6 +25,9 @@ public class DeleteDataJdbc { @Autowired(required = false) EnvRepo envRepo; + @Autowired(required=false) + TeamRepo teamRepo; + @Autowired(required=false) AclRequestsRepo aclRequestsRepo; @@ -85,6 +88,13 @@ public String deleteUserRequest(String userId){ return "success"; } + public String deleteTeamRequest(String teamId){ + Team team = new Team(); + team.setTeamname(teamId); + teamRepo.delete(team); + return "success"; + } + public String deletePrevAclRecs(List aclsToBeDeleted){ List allAcls = Lists.newArrayList(aclRepo.findAll()); diff --git a/kafkawize-web/src/main/java/com/kafkamgt/uiapi/helpers/db/rdbms/HandleDbRequestsJdbc.java b/kafkawize-web/src/main/java/com/kafkamgt/uiapi/helpers/db/rdbms/HandleDbRequestsJdbc.java index 5402427..d213e45 100644 --- a/kafkawize-web/src/main/java/com/kafkamgt/uiapi/helpers/db/rdbms/HandleDbRequestsJdbc.java +++ b/kafkawize-web/src/main/java/com/kafkamgt/uiapi/helpers/db/rdbms/HandleDbRequestsJdbc.java @@ -204,6 +204,11 @@ public String deleteUserRequest(String userId) { return jdbcDeleteHelper.deleteUserRequest(userId); } + @Override + public String deleteTeamRequest(String teamId) { + return jdbcDeleteHelper.deleteTeamRequest(teamId); + } + public String deleteSchemaRequest(String topicName, String schemaVersion, String env){ return jdbcDeleteHelper.deleteSchemaRequest(topicName,schemaVersion, env); } diff --git a/kafkawize-web/src/main/java/com/kafkamgt/uiapi/service/AclControllerService.java b/kafkawize-web/src/main/java/com/kafkamgt/uiapi/service/AclControllerService.java index c91732c..e4f0685 100644 --- a/kafkawize-web/src/main/java/com/kafkamgt/uiapi/service/AclControllerService.java +++ b/kafkawize-web/src/main/java/com/kafkamgt/uiapi/service/AclControllerService.java @@ -4,13 +4,12 @@ import com.kafkamgt.uiapi.dao.Acl; import com.kafkamgt.uiapi.dao.AclRequests; import com.kafkamgt.uiapi.dao.Env; +import com.kafkamgt.uiapi.error.KafkawizeException; import com.kafkamgt.uiapi.model.AclInfo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.stereotype.Service; @@ -30,20 +29,14 @@ public class AclControllerService { ManageTopics createTopicHelper; @Autowired - ClusterApiService clusterApiService; - - private String getUserName(){ - UserDetails userDetails = (UserDetails)SecurityContextHolder.getContext().getAuthentication().getPrincipal(); - return userDetails.getUsername(); - } + private UtilService utilService; - private UserDetails getUserDetails(){ - return (UserDetails)SecurityContextHolder.getContext().getAuthentication().getPrincipal(); - } + @Autowired + ClusterApiService clusterApiService; public String createAcl(AclRequests aclReq) { - aclReq.setUsername(getUserName()); + aclReq.setUsername(utilService.getUserName()); String execRes = createTopicHelper.requestForAcl(aclReq); return "{\"result\":\""+execRes+"\"}"; @@ -51,14 +44,8 @@ public String createAcl(AclRequests aclReq) { public String updateSyncAcls(String updateSyncAcls, String envSelected) { - UserDetails userDetails = getUserDetails(); - - GrantedAuthority ga = userDetails.getAuthorities().iterator().next(); - String authority = ga.getAuthority(); - if(authority.equals("ROLE_SUPERUSER")){} - else{ + if(!utilService.checkAuthorizedSU()) return "{ \"result\": \"Not Authorized\" }"; - } StringTokenizer strTkr = new StringTokenizer(updateSyncAcls,"\n"); String topicSel=null,teamSelected=null,consumerGroup=null,aclIp=null,aclSsl=null,aclType=null,tmpToken=null; @@ -100,11 +87,11 @@ public String updateSyncAcls(String updateSyncAcls, String envSelected) { } public List getAclRequests() { - return createTopicHelper.getAllAclRequests(getUserName()); + return createTopicHelper.getAllAclRequests(utilService.getUserName()); } public List getCreatedAclRequests() { - return createTopicHelper.getCreatedAclRequests(getUserName()); + return createTopicHelper.getCreatedAclRequests(utilService.getUserName()); } public String deleteAclRequests(String req_no) { @@ -112,7 +99,7 @@ public String deleteAclRequests(String req_no) { return "{\"result\":\""+deleteTopicReqStatus+"\"}"; } - public String approveAclRequests(String req_no) { + public String approveAclRequests(String req_no) throws KafkawizeException { AclRequests aclReq = createTopicHelper.selectAcl(req_no); @@ -121,23 +108,14 @@ public String approveAclRequests(String req_no) { String updateAclReqStatus = response.getBody(); if(response.getBody().equals("success")) - updateAclReqStatus = createTopicHelper.updateAclRequest(aclReq,getUserName()); + updateAclReqStatus = createTopicHelper.updateAclRequest(aclReq,utilService.getUserName()); return "{\"result\":\""+updateAclReqStatus+"\"}"; } - public List getAcls(String env, String pageNo, String topicNameSearch, boolean isSyncAcls) { + public List getAcls(String env, String pageNo, String topicNameSearch, boolean isSyncAcls) throws KafkawizeException { - UserDetails userDetails = getUserDetails(); - - GrantedAuthority ga = userDetails.getAuthorities().iterator().next(); - String authority = ga.getAuthority(); - - if(authority.equals("ROLE_USER") || authority.equals("ROLE_ADMIN") || authority.equals("ROLE_SUPERUSER")){} - else{ - List topicsList1 = new ArrayList(); - return topicsList1; - } + UserDetails userDetails = utilService.getUserDetails(); if(topicNameSearch != null) topicNameSearch = topicNameSearch.trim(); @@ -182,7 +160,7 @@ public List applyFiltersAcls(String env, List> a List teamList = new ArrayList<>(); if(isSyncAcls) { - createTopicHelper.selectAllTeamsOfUsers(getUserName()) + createTopicHelper.selectAllTeamsOfUsers(utilService.getUserName()) .forEach(teamS -> teamList.add(teamS.getTeamname())); } @@ -289,8 +267,4 @@ public int counterIncrement() topicCounter++; return topicCounter; } - - - - } diff --git a/kafkawize-web/src/main/java/com/kafkamgt/uiapi/service/ClusterApiService.java b/kafkawize-web/src/main/java/com/kafkamgt/uiapi/service/ClusterApiService.java index ad10d59..2c12bd3 100644 --- a/kafkawize-web/src/main/java/com/kafkamgt/uiapi/service/ClusterApiService.java +++ b/kafkawize-web/src/main/java/com/kafkamgt/uiapi/service/ClusterApiService.java @@ -45,19 +45,24 @@ public class ClusterApiService { String uriPostSchema = "/topics/postSchema"; - public List> getAcls(String bootstrapHost){ - String uri = clusterConnUrl + uriGetAcls + bootstrapHost; - RestTemplate restTemplate = new RestTemplate(); + public List> getAcls(String bootstrapHost) throws KafkawizeException { + List> aclListOriginal = null; + try { + String uri = clusterConnUrl + uriGetAcls + bootstrapHost; + RestTemplate restTemplate = new RestTemplate(); - HttpHeaders headers = createHeaders(clusterApiUser, clusterApiPwd); - headers.setContentType(MediaType.APPLICATION_JSON); + HttpHeaders headers = createHeaders(clusterApiUser, clusterApiPwd); + headers.setContentType(MediaType.APPLICATION_JSON); - headers.add("Accept", MediaType.APPLICATION_JSON_VALUE); - HttpEntity>> entity = new HttpEntity<>(headers); + headers.add("Accept", MediaType.APPLICATION_JSON_VALUE); + HttpEntity>> entity = new HttpEntity<>(headers); - ResponseEntity resultBody = restTemplate.exchange - (uri, HttpMethod.GET, entity, Set.class); - List> aclListOriginal = new ArrayList(resultBody.getBody()); + ResponseEntity resultBody = restTemplate.exchange + (uri, HttpMethod.GET, entity, Set.class); + aclListOriginal = new ArrayList(resultBody.getBody()); + }catch(Exception e){ + throw new KafkawizeException("Could not load acls. Check Cluster Api connection. "+e.toString()); + } return aclListOriginal; } @@ -84,78 +89,90 @@ public List getAllTopics(String bootstrapHost) throws Exception{ return topicsList; } - public ResponseEntity approveTopicRequests(String topicName, TopicRequest topicRequest){ - - RestTemplate restTemplate = new RestTemplate(); - - MultiValueMap params= new LinkedMultiValueMap<>(); + public ResponseEntity approveTopicRequests(String topicName, TopicRequest topicRequest) throws KafkawizeException { + ResponseEntity response; + try { + RestTemplate restTemplate = new RestTemplate(); - Env envSelected= createTopicHelper.selectEnvDetails(topicRequest.getEnvironment()); - String bootstrapHost=envSelected.getHost()+":"+envSelected.getPort(); - params.add("env",bootstrapHost); + MultiValueMap params = new LinkedMultiValueMap<>(); - params.add("topicName",topicName); - params.add("partitions", topicRequest.getTopicpartitions()); - params.add("rf", topicRequest.getReplicationfactor()); - params.add("acl_ip", topicRequest.getAcl_ip()); - params.add("acl_ssl", topicRequest.getAcl_ssl()); + Env envSelected = createTopicHelper.selectEnvDetails(topicRequest.getEnvironment()); + String bootstrapHost = envSelected.getHost() + ":" + envSelected.getPort(); + params.add("env", bootstrapHost); - HttpHeaders headers = new HttpHeaders();//createHeaders("user1", "pwd"); - headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); + params.add("topicName", topicName); + params.add("partitions", topicRequest.getTopicpartitions()); + params.add("rf", topicRequest.getReplicationfactor()); +// params.add("acl_ip", topicRequest.getAcl_ip()); +// params.add("acl_ssl", topicRequest.getAcl_ssl()); - HttpEntity> request = new HttpEntity<>(params, headers); + HttpHeaders headers = new HttpHeaders();//createHeaders("user1", "pwd"); + headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); - ResponseEntity response = restTemplate.postForEntity( clusterConnUrl + uriCreateTopics, request , String.class ); + HttpEntity> request = new HttpEntity<>(params, headers); + response = restTemplate.postForEntity(clusterConnUrl + uriCreateTopics, request, String.class); + }catch(Exception e){ + throw new KafkawizeException("Could not approve topic request. Check Cluster Api connection. "+e.toString()); + } return response; } - public ResponseEntity approveAclRequests(AclRequests aclReq){ - String env = aclReq.getEnvironment(); - String uri = clusterConnUrl + uriCreateAcls; - RestTemplate restTemplate = new RestTemplate(); - - MultiValueMap params= new LinkedMultiValueMap(); + public ResponseEntity approveAclRequests(AclRequests aclReq) throws KafkawizeException { + ResponseEntity response; + try { + String env = aclReq.getEnvironment(); + String uri = clusterConnUrl + uriCreateAcls; + RestTemplate restTemplate = new RestTemplate(); - Env envSelected= createTopicHelper.selectEnvDetails(env); - String bootstrapHost=envSelected.getHost()+":"+envSelected.getPort(); - params.add("env",bootstrapHost); - params.add("topicName",aclReq.getTopicname()); - params.add("consumerGroup",aclReq.getConsumergroup()); - params.add("aclType",aclReq.getTopictype()); - params.add("acl_ip",aclReq.getAcl_ip()); - params.add("acl_ssl",aclReq.getAcl_ssl()); + MultiValueMap params = new LinkedMultiValueMap(); - HttpHeaders headers = new HttpHeaders();//createHeaders("user1", "pwd"); - headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); + Env envSelected = createTopicHelper.selectEnvDetails(env); + String bootstrapHost = envSelected.getHost() + ":" + envSelected.getPort(); + params.add("env", bootstrapHost); + params.add("topicName", aclReq.getTopicname()); + params.add("consumerGroup", aclReq.getConsumergroup()); + params.add("aclType", aclReq.getTopictype()); + params.add("acl_ip", aclReq.getAcl_ip()); + params.add("acl_ssl", aclReq.getAcl_ssl()); - HttpEntity> request = new HttpEntity<>(params, headers); + HttpHeaders headers = new HttpHeaders();//createHeaders("user1", "pwd"); + headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); - ResponseEntity response = restTemplate.postForEntity( uri, request , String.class ); + HttpEntity> request = new HttpEntity<>(params, headers); + response = restTemplate.postForEntity(uri, request, String.class); + }catch(Exception e){ + throw new KafkawizeException("Could not approve acl request. Check Cluster Api connection. "+e.toString()); + } return response; } - public ResponseEntity postSchema(SchemaRequest schemaRequest, String env, String topicName){ - String uri = clusterConnUrl + uriPostSchema; + public ResponseEntity postSchema(SchemaRequest schemaRequest, String env, String topicName) throws KafkawizeException { + ResponseEntity response; + try { + String uri = clusterConnUrl + uriPostSchema; - RestTemplate restTemplate = new RestTemplate(); + RestTemplate restTemplate = new RestTemplate(); - MultiValueMap params= new LinkedMultiValueMap(); + MultiValueMap params = new LinkedMultiValueMap(); - Env envSelected= createTopicHelper.selectEnvDetails(env); - String bootstrapHost=envSelected.getHost()+":"+envSelected.getPort(); - params.add("env",bootstrapHost); + Env envSelected = createTopicHelper.selectEnvDetails(env); + String bootstrapHost = envSelected.getHost() + ":" + envSelected.getPort(); + params.add("env", bootstrapHost); - params.add("topicName",topicName); - params.add("fullSchema",schemaRequest.getSchemafull()); + params.add("topicName", topicName); + params.add("fullSchema", schemaRequest.getSchemafull()); - HttpHeaders headers = new HttpHeaders();//createHeaders("user1", "pwd"); - headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); + HttpHeaders headers = new HttpHeaders();//createHeaders("user1", "pwd"); + headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); - HttpEntity> request = new HttpEntity<>(params, headers); + HttpEntity> request = new HttpEntity<>(params, headers); - ResponseEntity response = restTemplate.postForEntity( uri, request , String.class ); + response = restTemplate.postForEntity(uri, request, String.class); + }catch(Exception e){ + throw new KafkawizeException("Could not post schema. Check Cluster Api connection. "+e.toString()); + } return response; } diff --git a/kafkawize-web/src/main/java/com/kafkamgt/uiapi/service/ManageTopics.java b/kafkawize-web/src/main/java/com/kafkamgt/uiapi/service/ManageTopics.java index 30ee1b4..7f8728b 100644 --- a/kafkawize-web/src/main/java/com/kafkamgt/uiapi/service/ManageTopics.java +++ b/kafkawize-web/src/main/java/com/kafkamgt/uiapi/service/ManageTopics.java @@ -198,6 +198,10 @@ public String deleteUserRequest(String userId){ return handleDbRequests.deleteUserRequest(userId); } + public String deleteTeamRequest(String teamId){ + return handleDbRequests.deleteTeamRequest(teamId); + } + public String deleteSchemaRequest(String topicName, String schemaVersion, String env){ return handleDbRequests.deleteSchemaRequest(topicName,schemaVersion, env); } diff --git a/kafkawize-web/src/main/java/com/kafkamgt/uiapi/service/SchemaRegstryControllerService.java b/kafkawize-web/src/main/java/com/kafkamgt/uiapi/service/SchemaRegstryControllerService.java index c91b26e..4c98939 100644 --- a/kafkawize-web/src/main/java/com/kafkamgt/uiapi/service/SchemaRegstryControllerService.java +++ b/kafkawize-web/src/main/java/com/kafkamgt/uiapi/service/SchemaRegstryControllerService.java @@ -1,12 +1,11 @@ package com.kafkamgt.uiapi.service; import com.kafkamgt.uiapi.dao.SchemaRequest; +import com.kafkamgt.uiapi.error.KafkawizeException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.core.userdetails.UserDetails; import org.springframework.stereotype.Service; import java.util.List; @@ -23,22 +22,16 @@ public class SchemaRegstryControllerService { @Autowired ClusterApiService clusterApiService; - private String getUserName(){ - UserDetails userDetails = (UserDetails)SecurityContextHolder.getContext().getAuthentication().getPrincipal(); - return userDetails.getUsername(); - } - - private UserDetails getUserDetails(){ - return (UserDetails)SecurityContextHolder.getContext().getAuthentication().getPrincipal(); - } + @Autowired + private UtilService utilService; public List getSchemaRequests() { - return createTopicHelper.getAllSchemaRequests(getUserName()); + return createTopicHelper.getAllSchemaRequests(utilService.getUserName()); } public List getCreatedSchemaRequests() { - return createTopicHelper.getCreatedSchemaRequests(getUserName()); + return createTopicHelper.getCreatedSchemaRequests(utilService.getUserName()); } public String deleteSchemaRequests(String topicName) { @@ -51,7 +44,7 @@ public String deleteSchemaRequests(String topicName) { return createTopicHelper.deleteSchemaRequest(topicName,schemaVersion, env); } - public String execSchemaRequests(String topicName) { + public String execSchemaRequests(String topicName) throws KafkawizeException { StringTokenizer strTkr = new StringTokenizer(topicName,"-----"); topicName = strTkr.nextToken(); @@ -63,7 +56,7 @@ public String execSchemaRequests(String topicName) { ResponseEntity response = clusterApiService.postSchema(schemaRequest, env, topicName); if(response.getBody().contains("id\":")) { - return createTopicHelper.updateSchemaRequest(schemaRequest, getUserName()); + return createTopicHelper.updateSchemaRequest(schemaRequest, utilService.getUserName()); } else { return "Failure in uploading schema" ; @@ -75,7 +68,7 @@ public String uploadSchema(SchemaRequest schemaRequest){ LOG.info(schemaRequest.getTopicname()+ "---" + schemaRequest.getTeamname()+"---"+schemaRequest.getEnvironment() + "---"+schemaRequest.getAppname()+"---"+ schemaRequest.getTeamname()); - schemaRequest.setUsername(getUserName()); + schemaRequest.setUsername(utilService.getUserName()); return createTopicHelper.requestForSchema(schemaRequest); } diff --git a/kafkawize-web/src/main/java/com/kafkamgt/uiapi/service/TopicControllerService.java b/kafkawize-web/src/main/java/com/kafkamgt/uiapi/service/TopicControllerService.java index 13b9653..9454423 100644 --- a/kafkawize-web/src/main/java/com/kafkamgt/uiapi/service/TopicControllerService.java +++ b/kafkawize-web/src/main/java/com/kafkamgt/uiapi/service/TopicControllerService.java @@ -4,22 +4,18 @@ import com.kafkamgt.uiapi.dao.Topic; import com.kafkamgt.uiapi.dao.TopicPK; import com.kafkamgt.uiapi.dao.TopicRequest; +import com.kafkamgt.uiapi.error.KafkawizeException; import com.kafkamgt.uiapi.model.PCStream; import com.kafkamgt.uiapi.model.TopicInfo; -import org.apache.tomcat.util.codec.binary.Base64; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.env.Environment; -import org.springframework.http.HttpHeaders; import org.springframework.http.ResponseEntity; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.stereotype.Service; -import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -45,24 +41,18 @@ public class TopicControllerService { String uriGetTopics = "/topics/getTopics/"; @Autowired - private ManageTopics createTopicHelper; + private ManageTopics manageTopics; @Autowired - private Environment springEnvProps; - - private String getUserName(){ - UserDetails userDetails = (UserDetails)SecurityContextHolder.getContext().getAuthentication().getPrincipal(); - return userDetails.getUsername(); - } + private UtilService utilService; - private UserDetails getUserDetails(){ - return (UserDetails)SecurityContextHolder.getContext().getAuthentication().getPrincipal(); - } + @Autowired + private Environment springEnvProps; public String createTopics(TopicRequest topicRequestReq) { LOG.info(topicRequestReq.getTopicname()+ "---" + topicRequestReq.getTeamname()+"---"+ topicRequestReq.getEnvironment() + "---"+ topicRequestReq.getAppname()); - topicRequestReq.setUsername(getUserName()); + topicRequestReq.setUsername(utilService.getUserName()); String topicPartitions = topicRequestReq.getTopicpartitions(); int topicPartitionsInt; @@ -70,6 +60,21 @@ public String createTopics(TopicRequest topicRequestReq) { String defPartns = springEnvProps.getProperty("kafka." + envSelected + ".default.partitions"); String defMaxPartns = springEnvProps.getProperty("kafka." + envSelected + ".default.maxpartitions"); String defaultRf = springEnvProps.getProperty("kafka." + envSelected + ".default.replicationfactor"); +// String ipAddress = topicRequestReq.getAcl_ip(); +// +// if(ipAddress!=null && ipAddress.length()>0) { +// String IPADDRESS_PATTERN = +// "^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." + +// "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." + +// "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." + +// "([01]?\\d\\d?|2[0-4]\\d|25[0-5])$"; +// +// Pattern pattern = Pattern.compile(IPADDRESS_PATTERN); +// Matcher matcher = pattern.matcher(ipAddress); +// if (!matcher.matches()) { +// return "{\"result\":\"Error : Invalid IP Address in the request.\"}"; +// } +// } if(defPartns==null) defPartns="1"; @@ -97,7 +102,7 @@ public String createTopics(TopicRequest topicRequestReq) { topicRequestReq.setTopicpartitions(defPartns); } - String execRes = createTopicHelper.requestForTopic(topicRequestReq); + String execRes = manageTopics.requestForTopic(topicRequestReq); String topicaddResult = "{\"result\":\""+execRes+"\"}"; return topicaddResult; @@ -105,12 +110,7 @@ public String createTopics(TopicRequest topicRequestReq) { public String updateSyncTopics(String updatedSyncTopics, String envSelected) { - UserDetails userDetails = getUserDetails(); - - GrantedAuthority ga = userDetails.getAuthorities().iterator().next(); - String authority = ga.getAuthority(); - if(authority.equals("ROLE_SUPERUSER")){} - else + if(!utilService.checkAuthorizedSU()) return "{ \"result\": \"Not Authorized\" }"; StringTokenizer strTkr = new StringTokenizer(updatedSyncTopics,"\n"); @@ -139,13 +139,13 @@ public String updateSyncTopics(String updatedSyncTopics, String envSelected) { listTopics.add(t); } } - String execRes = createTopicHelper.addToSynctopics(listTopics); + String execRes = manageTopics.addToSynctopics(listTopics); return "{\"result\":\""+execRes+"\"}"; } public List getTopicStreams(String envSelected, String pageNo, String topicNameSearch) { - List pcList = createTopicHelper.selectTopicStreams(envSelected); + List pcList = manageTopics.selectTopicStreams(envSelected); if(topicNameSearch != null) topicNameSearch = topicNameSearch.trim(); @@ -192,16 +192,16 @@ public List getPCStreamsPaginated(String pageNo, List aclLis public List getTopicRequests() { - return createTopicHelper.getAllTopicRequests(getUserName()); + return manageTopics.getAllTopicRequests(utilService.getUserName()); } public Topic getTopicTeam(String topicName, String env) { - return createTopicHelper.getTopicTeam(topicName, env); + return manageTopics.getTopicTeam(topicName, env); } public List getCreatedTopicRequests() { - return createTopicHelper.getCreatedTopicRequests(getUserName()); + return manageTopics.getCreatedTopicRequests(utilService.getUserName()); } public String deleteTopicRequests(String topicName) { @@ -210,42 +210,32 @@ public String deleteTopicRequests(String topicName) { topicName = strTkr.nextToken(); String env = strTkr.nextToken(); - String deleteTopicReqStatus = createTopicHelper.deleteTopicRequest(topicName,env); + String deleteTopicReqStatus = manageTopics.deleteTopicRequest(topicName,env); return "{\"result\":\""+deleteTopicReqStatus+"\"}"; } - public String approveTopicRequests(String topicName) { + public String approveTopicRequests(String topicName) throws KafkawizeException { StringTokenizer strTkr = new StringTokenizer(topicName,","); topicName = strTkr.nextToken(); String env = strTkr.nextToken(); - TopicRequest topicRequest = createTopicHelper.selectTopicRequestsForTopic(topicName, env); + TopicRequest topicRequest = manageTopics.selectTopicRequestsForTopic(topicName, env); ResponseEntity response = clusterApiService.approveTopicRequests(topicName,topicRequest); String updateTopicReqStatus = response.getBody(); if(response.getBody().equals("success")) - updateTopicReqStatus = createTopicHelper.updateTopicRequest(topicRequest,getUserName()); + updateTopicReqStatus = manageTopics.updateTopicRequest(topicRequest,utilService.getUserName()); return "{\"result\":\""+updateTopicReqStatus+"\"}"; } public List getAllTopics(String env) throws Exception { - UserDetails userDetails = getUserDetails(); - GrantedAuthority ga = userDetails.getAuthorities().iterator().next(); - String authority = ga.getAuthority(); - - if (authority.equals("ROLE_USER") || authority.equals("ROLE_ADMIN") || authority.equals("ROLE_SUPERUSER")) { - } else { - List topicsList1 = new ArrayList(); - return topicsList1; - } - - Env envSelected = createTopicHelper.selectEnvDetails(env); + Env envSelected = manageTopics.selectEnvDetails(env); String bootstrapHost = envSelected.getHost() + ":" + envSelected.getPort(); List topicsList = clusterApiService.getAllTopics(bootstrapHost); @@ -258,31 +248,24 @@ public List getAllTopics(String env) throws Exception { if(indexOfDots>0) topicsListNew.add(s1.substring(0,indexOfDots)); } - return topicsListNew; - } - public List getTopics(String env, String pageNo, String topicNameSearch) throws Exception { + List uniqueList = topicsListNew.stream().distinct().sorted().collect(Collectors.toList()); - UserDetails userDetails = getUserDetails(); - GrantedAuthority ga = userDetails.getAuthorities().iterator().next(); - String authority = ga.getAuthority(); + return uniqueList; + } - if(authority.equals("ROLE_USER") || authority.equals("ROLE_ADMIN") || authority.equals("ROLE_SUPERUSER")){} - else { - List topicsList1 = new ArrayList(); - return topicsList1; - } + public List getTopics(String env, String pageNo, String topicNameSearch) throws Exception { if(topicNameSearch != null) topicNameSearch = topicNameSearch.trim(); - Env envSelected= createTopicHelper.selectEnvDetails(env); + Env envSelected= manageTopics.selectEnvDetails(env); String bootstrapHost=envSelected.getHost()+":"+envSelected.getPort(); List topicsList = clusterApiService.getAllTopics(bootstrapHost); // Get Sync topics - List topicsFromSOT = createTopicHelper.getSyncTopics(env); + List topicsFromSOT = manageTopics.getSyncTopics(env); topicCounter = 0; @@ -307,20 +290,12 @@ public List getTopics(String env, String pageNo, String topicNameSear public List getSyncTopics(String env, String pageNo, String topicNameSearch) throws Exception { - UserDetails userDetails = getUserDetails(); - GrantedAuthority ga = userDetails.getAuthorities().iterator().next(); - String authority = ga.getAuthority(); - - if(authority.equals("ROLE_SUPERUSER")){} - else{ - List topicsList1 = new ArrayList(); - return topicsList1; - } + UserDetails userDetails = utilService.getUserDetails(); if(topicNameSearch != null) topicNameSearch = topicNameSearch.trim(); - Env envSelected= createTopicHelper.selectEnvDetails(env); + Env envSelected= manageTopics.selectEnvDetails(env); String bootstrapHost=envSelected.getHost()+":"+envSelected.getPort(); List topicsList = clusterApiService.getAllTopics(bootstrapHost); @@ -354,16 +329,6 @@ public int counterIncrement() return topicCounter; } - HttpHeaders createHeaders(String username, String password) { - return new HttpHeaders() {{ - String auth = username + ":" + password; - byte[] encodedAuth = Base64.encodeBase64( - auth.getBytes(Charset.forName("US-ASCII"))); - String authHeader = "Basic " + new String(encodedAuth); - set("Authorization", authHeader); - }}; - } - public List getTopicList(List topicsList, List topicsFromSOT, String pageNo){ int totalRecs = topicsList.size(); int recsPerPage = 20; @@ -429,7 +394,7 @@ public List getSyncTopicList(List topicsList, UserDetails int requestPageNo = Integer.parseInt(pageNo); // Get Sync topics - List topicsFromSOT = createTopicHelper.getSyncTopics(env); + List topicsFromSOT = manageTopics.getSyncTopics(env); List topicsListMap = new ArrayList<>(); int startVar = (requestPageNo-1) * recsPerPage; @@ -439,7 +404,7 @@ public List getSyncTopicList(List topicsList, UserDetails List teamList = new ArrayList<>(); - createTopicHelper.selectAllTeamsOfUsers(userDetails.getUsername()) + manageTopics.selectAllTeamsOfUsers(userDetails.getUsername()) .forEach(teamS->teamList.add(teamS.getTeamname())); //String tmpTopicName = null; for(int i=0;i getEnvs() { + return manageTopics.selectAllKafkaEnvs(); + } + + public List getSchemaRegEnvs() { + return manageTopics.selectAllSchemaRegEnvs(); + } + + public List getAllTeams() { + return manageTopics.selectAllTeamsOfUsers(utilService.getUserName()); + } + + public List getAllTeamsSU() { + + return manageTopics.selectAllTeams(); + } + + private final InMemoryUserDetailsManager inMemoryUserDetailsManager; + + @Autowired + public UiConfigControllerService(InMemoryUserDetailsManager inMemoryUserDetailsManager) { + this.inMemoryUserDetailsManager = inMemoryUserDetailsManager; + } + + public String addNewEnv(Env newEnv){ + + if(!utilService.checkAuthorizedSU()) + return "{ \"result\": \"Not Authorized\" }"; + + newEnv.setTrustStorePwd(""); + newEnv.setKeyPwd(""); + newEnv.setKeyStorePwd(""); + newEnv.setTrustStoreLocation(""); + newEnv.setKeyStoreLocation(""); + String execRes = manageTopics.addNewEnv(newEnv); + + return "{\"result\":\""+execRes+"\"}"; + } + + public String deleteCluster(String clusterId){ + + if(!utilService.checkAuthorizedSU()) + return "{ \"result\": \"Not Authorized\" }"; + + String execRes = manageTopics.deleteClusterRequest(clusterId); + + return "{\"result\":\""+execRes+"\"}"; + } + + public String deleteTeam(String teamId){ + + if(!utilService.checkAuthorizedSU()) + return "{ \"result\": \"Not Authorized\" }"; + + String envAddResult = "{\"result\":\"Your team cannot be deleted. Try deleting other team.\"}"; + + if(manageTopics.getUsersInfo(utilService.getUserName()).getTeam().equals(teamId)) + return envAddResult; + + String execRes = manageTopics.deleteTeamRequest(teamId); + envAddResult = "{\"result\":\""+execRes+"\"}"; + + return envAddResult; + } + + public String deleteUser(String userId){ + + if(!utilService.checkAuthorizedSU()) + return "{ \"result\": \"Not Authorized\" }"; + + String envAddResult = "{\"result\":\"User cannot be deleted\"}"; + + if(userId.equals("superuser") || utilService.getUserName().equals(userId)) + return envAddResult; + + String execRes = manageTopics.deleteUserRequest(userId); + envAddResult = "{\"result\":\""+execRes+"\"}"; + + return envAddResult; + } + + public String addNewUser(UserInfo newUser){ + + if(!utilService.checkAuthorizedSU()) + return "{ \"result\": \"Not Authorized\" }"; + + PasswordEncoder encoder = + PasswordEncoderFactories.createDelegatingPasswordEncoder(); + inMemoryUserDetailsManager.createUser(User.withUsername(newUser.getUsername()).password(encoder.encode(newUser.getPwd())) + .roles(newUser.getRole()).build()); + + String execRes = manageTopics.addNewUser(newUser); + + return "{\"result\":\""+execRes+"\"}"; + } + + public String addNewTeam(Team newTeam){ + + if(!utilService.checkAuthorizedSU()) + return "{ \"result\": \"Not Authorized\" }"; + + return "{\"result\":\""+manageTopics.addNewTeam(newTeam)+"\"}"; + } + + public String changePwd(String changePwd){ + + UserDetails userDetails = utilService.getUserDetails(); + + GsonJsonParser jsonParser = new GsonJsonParser(); + Map pwdMap = jsonParser.parseMap(changePwd); + + String pwdChange = (String)pwdMap.get("pwd"); + + PasswordEncoder encoder = + PasswordEncoderFactories.createDelegatingPasswordEncoder(); + UserDetails ud = new UserDetails() { + @Override + public Collection getAuthorities() { + return userDetails.getAuthorities(); + } + + @Override + public String getPassword() { + return encoder.encode(pwdChange); + } + + @Override + public String getUsername() { + return userDetails.getUsername(); + } + + @Override + public boolean isAccountNonExpired() { + return userDetails.isAccountNonExpired(); + } + + @Override + public boolean isAccountNonLocked() { + return userDetails.isAccountNonLocked(); + } + + @Override + public boolean isCredentialsNonExpired() { + return userDetails.isCredentialsNonExpired(); + } + + @Override + public boolean isEnabled() { + return userDetails.isEnabled(); + } + }; + + inMemoryUserDetailsManager.updateUser(ud); + + String execRes = manageTopics.updatePassword(userDetails.getUsername(),pwdChange); + + return "{\"result\":\""+execRes+"\"}"; + } + + public List showUsers(){ + + return manageTopics.selectAllUsersInfo(); + } + + public UserInfo getMyProfileInfo(){ + + return manageTopics.getUsersInfo(utilService.getUserName()); + } + + public List showActivityLog(String env, String pageNo){ + + List origActivityList = manageTopics.selectActivityLog(utilService.getUserName(), env); + + int totalRecs = origActivityList.size(); + int recsPerPage = 20; + + int requestPageNo = Integer.parseInt(pageNo); + int startVar = (requestPageNo-1) * recsPerPage; + int lastVar = (requestPageNo) * (recsPerPage); + + int totalPages = totalRecs/recsPerPage + (totalRecs%recsPerPage > 0 ? 1 : 0); + + List newList = new ArrayList<>(); + + List numList = new ArrayList<>(); + for (int k = 1; k <= totalPages; k++) { + numList.add("" + k); + } + for(int i=0;i=startVar && i0) - outstandingReqs = outstanding+""; - - if (authority.equals("ROLE_USER") || authority.equals("ROLE_ADMIN") || authority.equals("ROLE_SUPERUSER")) { - statusAuth = "Authorized"; - } else { - statusAuth = "NotAuthorized"; - } - - if (authority.equals("ROLE_ADMIN") || authority.equals("ROLE_SUPERUSER")) - statusAuthExecTopics = "Authorized"; - else - statusAuthExecTopics = "NotAuthorized"; - - return "{ \"status\": \"" + statusAuth + "\" ," + - " \"username\":\"" + userDetails.getUsername() + "\"," + - " \"teamname\": \"" + teamName + "\"," + - " \"companyinfo\": \"" + companyInfo + "\"," + - " \"notifications\": \"" + outstandingReqs + "\"," + - " \"statusauthexectopics\": \"" + statusAuthExecTopics + "\" }"; + String teamName = createTopicHelper.getUsersInfo(userDetails.getUsername()).getTeam(); + GrantedAuthority ga = userDetails.getAuthorities().iterator().next(); + String authority = ga.getAuthority(); + + //LOG.info("auth is " + authority); + String statusAuth = null; + String statusAuthExecTopics = null; + String licenseValidity=null; + + int outstanding = createTopicHelper.getAllRequestsToBeApproved(userDetails.getUsername()); + String outstandingReqs = ""; + if(outstanding>0) + outstandingReqs = outstanding+""; + + if (authority.equals("ROLE_USER") || authority.equals("ROLE_ADMIN") || authority.equals("ROLE_SUPERUSER")) { + statusAuth = "Authorized"; + } else { + statusAuth = "NotAuthorized"; + } + + if (authority.equals("ROLE_ADMIN") || authority.equals("ROLE_SUPERUSER")) + statusAuthExecTopics = "Authorized"; + else + statusAuthExecTopics = "NotAuthorized"; + + return "{ \"status\": \"" + statusAuth + "\" ," + + " \"username\":\"" + userDetails.getUsername() + "\"," + + " \"teamname\": \"" + teamName + "\"," + + " \"companyinfo\": \"" + companyInfo + "\"," + + " \"notifications\": \"" + outstandingReqs + "\"," + + " \"statusauthexectopics\": \"" + statusAuthExecTopics + "\" }"; } else return null; } diff --git a/kafkawize-web/src/main/java/com/kafkamgt/uiapi/service/UtilService.java b/kafkawize-web/src/main/java/com/kafkamgt/uiapi/service/UtilService.java new file mode 100644 index 0000000..e11a632 --- /dev/null +++ b/kafkawize-web/src/main/java/com/kafkamgt/uiapi/service/UtilService.java @@ -0,0 +1,29 @@ +package com.kafkamgt.uiapi.service; + +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.stereotype.Service; + +@Service +public class UtilService { + public boolean checkAuthorizedSU(){ + UserDetails userDetails = getUserDetails(); + + GrantedAuthority ga = userDetails.getAuthorities().iterator().next(); + String authority = ga.getAuthority(); + if(!authority.equals("ROLE_SUPERUSER")) + return false; + else + return true; + } + + public String getUserName(){ + UserDetails userDetails = (UserDetails)SecurityContextHolder.getContext().getAuthentication().getPrincipal(); + return userDetails.getUsername(); + } + + public UserDetails getUserDetails(){ + return (UserDetails)SecurityContextHolder.getContext().getAuthentication().getPrincipal(); + } +} diff --git a/kafkawize-web/src/main/resources/static/js/createTopic.js b/kafkawize-web/src/main/resources/static/js/createTopic.js deleted file mode 100644 index d652a98..0000000 --- a/kafkawize-web/src/main/resources/static/js/createTopic.js +++ /dev/null @@ -1,110 +0,0 @@ -'use strict' - -// confirmation of delete -// edit -// solution for transaction -// message store / key / gui -var app = angular.module('createTopicApp',[]); - -app.controller("createTopicCtrl", function($scope, $http, $location, $window) { - - // Set http service defaults - // We force the "Accept" header to be only "application/json" - // otherwise we risk the Accept header being set by default to: - // "application/json; text/plain" and this can result in us - // getting a "text/plain" response which is not able to be - // parsed. - $http.defaults.headers.common['Accept'] = 'application/json'; - - - $scope.partitions = [ { label: '1', value: '1' }, { label: '2', value: '2' }, - { label: '3', value: '3' }, { label: '4', value: '4' }, { label: '5', value: '5' }, { label: '6', value: '6' }, - { label: '7', value: '7' }, { label: '8', value: '8' } ]; - - $scope.replications = [ { label: '1', value: '1' }, { label: '2', value: '2' }, - { label: '3', value: '3' }, { label: '4', value: '4' } ]; - - // We add the "time" query parameter to prevent IE - // from caching ajax results - - $scope.getAuth = function() { - $http({ - method: "GET", - url: "getAuth", - headers : { 'Content-Type' : 'application/json' } - }).success(function(output) { - $scope.statusauth = output.status; - $scope.userlogged = output.username; - $scope.teamname = output.teamname; - $scope.notifications = output.notifications; - $scope.statusauthexectopics = output.statusauthexectopics; - $scope.alerttop = output.alertmessage; - if(output.companyinfo == null){ - $scope.companyinfo = "Company not defined!!"; - } - else - $scope.companyinfo = output.companyinfo; - - if($scope.userlogged != null) - $scope.loggedinuser = "true"; - }).error( - function(error) - { - $scope.alert = error; - } - ); - } - - $scope.logout = function() { - $http({ - method: "GET", - url: "logout" - }).success(function(output) { - - $location.path('/'); - $window.location.reload(); - }).error( - function(error) - { - $scope.alert = error; - } - ); - } - - $scope.addTopic = function() { - - var serviceInput = {}; - - serviceInput['clusterType'] = $scope.addTopic.clusterType.value; - serviceInput['environment'] = $scope.addTopic.envName.name; - serviceInput['topicName'] = $scope.addTopic.topicName; - serviceInput['partitions'] = $scope.addTopic.partitions.value; - serviceInput['replications'] = $scope.addTopic.replications.value; - - if (!window.confirm("Are you sure, you would like to create the topic : "+ $scope.addTopic.topicName + "\nCluster : " + - $scope.addTopic.clusterType.label + "\nEnv : " + $scope.addTopic.envName.name + "\nParitions : " + $scope.addTopic.partitions.value + - "\nReplications : "+ $scope.addTopic.replications.value + " ?")) { - return; - } - - $http({ - method: "POST", - url: "eventbusweb/createtopic", - headers : { 'Content-Type' : 'application/json' }, - params: {'addTopicRequest' : serviceInput }, - data: {'addTopicRequest' : serviceInput} - }).success(function(output) { - $scope.resultAdd = output; - $scope.alert = "Topic addition : "+output.result; - }).error( - function(error) - { - $scope.alert = error; - alert("Error : "+error); - } - ); - - }; - -} -); \ No newline at end of file diff --git a/kafkawize-web/src/main/resources/static/js/manageUsers.js b/kafkawize-web/src/main/resources/static/js/manageUsers.js index b8538f2..3c89279 100644 --- a/kafkawize-web/src/main/resources/static/js/manageUsers.js +++ b/kafkawize-web/src/main/resources/static/js/manageUsers.js @@ -99,6 +99,33 @@ app.controller("manageUsersCtrl", function($scope, $http, $location, $window) { }; + $scope.deleteTeam = function(){ + + if (!window.confirm("Are you sure, you would like to delete the team : " + + $scope.deleteTeam.idval + )) { + return; + } + + $http({ + method: "POST", + url: "deleteTeamRequest", + headers : { 'Content-Type' : 'application/json' }, + params: {'teamId' : $scope.deleteTeam.idval }, + data: {'teamId' : $scope.deleteTeam.idval} + }).success(function(output) { + + $scope.alert = "Delete Team Request : "+output.result; + $scope.loadTeamsSU(); + + }).error( + function(error) + { + $scope.alert = error; + } + ); + } + $scope.deleteUser = function(){ if (!window.confirm("Are you sure, you would like to delete the user : " diff --git a/kafkawize-web/src/main/resources/static/js/requestTopics.js b/kafkawize-web/src/main/resources/static/js/requestTopics.js index b665d25..92bfa25 100644 --- a/kafkawize-web/src/main/resources/static/js/requestTopics.js +++ b/kafkawize-web/src/main/resources/static/js/requestTopics.js @@ -24,13 +24,19 @@ app.controller("requestTopicsCtrl", function($scope, $http, $location, $window) alert("Please fill in topic partitions"); return; } - if(($scope.addTopic.acl_ip !=null && $scope.addTopic.acl_ip.length>0) || - ($scope.addTopic.acl_ssl !=null && $scope.addTopic.acl_ssl.length>0)){} - else - { - alert("Please fill in a valid IP address or SSL-CN Name of the Producer client"); + + if(isNaN($scope.addTopic.topicpartitions)){ + alert("Please fill in a valid number for partitions for topic"); return; - } + } + +// if(($scope.addTopic.acl_ip !=null && $scope.addTopic.acl_ip.length>0) || +// ($scope.addTopic.acl_ssl !=null && $scope.addTopic.acl_ssl.length>0)){} +// else +// { +// alert("Please fill in a valid IP address or SSL-CN Name of the Producer client"); +// return; +// } if(!$scope.addTopic.team) { @@ -44,16 +50,13 @@ app.controller("requestTopicsCtrl", function($scope, $http, $location, $window) serviceInput['teamname'] = $scope.addTopic.team.teamname; serviceInput['appname'] = $scope.addTopic.app; serviceInput['remarks'] = $scope.addTopic.remarks; - serviceInput['acl_ip'] = $scope.addTopic.acl_ip; - serviceInput['acl_ssl'] = $scope.addTopic.acl_ssl; - if (!window.confirm("Are you sure, you would like to request the topic : " - + $scope.addTopic.topicname + + if (!window.confirm("Are you sure, you would like to request a topic ?"+ + "\nTopic : " + $scope.addTopic.topicname + "\nPartitions : " + $scope.addTopic.topicpartitions + "\nEnv : " + $scope.addTopic.envName.name + - "\nTeam :" + $scope.addTopic.team.teamname + - "\nApp :" + $scope.addTopic.app + - "\nAcl :" + $scope.addTopic.acl_ip +" \nAcl SSL:"+ $scope.addTopic.acl_ssl + "\nTeam : " + $scope.addTopic.team.teamname + + "\nApp : " + $scope.addTopic.app )) { return; } @@ -76,6 +79,7 @@ app.controller("requestTopicsCtrl", function($scope, $http, $location, $window) }; + $scope.getEnvs = function() { $http({ diff --git a/kafkawize-web/src/main/resources/templates/execTopics.html b/kafkawize-web/src/main/resources/templates/execTopics.html index 533ea2e..b832119 100644 --- a/kafkawize-web/src/main/resources/templates/execTopics.html +++ b/kafkawize-web/src/main/resources/templates/execTopics.html @@ -376,8 +376,8 @@

Approve Topics

Replication Factor Cluster Requestor - Acl IP(Producer) - Acl SSL + + Team @@ -394,8 +394,8 @@

Approve Topics

{{ topicRequest.replicationfactor }} {{ topicRequest.environment }} {{ topicRequest.username }} - {{ topicRequest.acl_ip }} - {{ topicRequest.acl_ssl }} + + {{ topicRequest.teamname }} diff --git a/kafkawize-web/src/main/resources/templates/pcTopics.html b/kafkawize-web/src/main/resources/templates/pcTopics.html index db910e2..357962d 100644 --- a/kafkawize-web/src/main/resources/templates/pcTopics.html +++ b/kafkawize-web/src/main/resources/templates/pcTopics.html @@ -389,7 +389,7 @@

Producers & Consumers

Topic - Producer Teams + Producer/Owner Teams Consumer Teams diff --git a/kafkawize-web/src/main/resources/templates/requestAcls.html b/kafkawize-web/src/main/resources/templates/requestAcls.html index 45a3bc7..336930f 100644 --- a/kafkawize-web/src/main/resources/templates/requestAcls.html +++ b/kafkawize-web/src/main/resources/templates/requestAcls.html @@ -410,7 +410,7 @@

ACL (Access Control List) Request Form

- +
diff --git a/kafkawize-web/src/main/resources/templates/requestTopics.html b/kafkawize-web/src/main/resources/templates/requestTopics.html index 8d61c92..9ae237d 100644 --- a/kafkawize-web/src/main/resources/templates/requestTopics.html +++ b/kafkawize-web/src/main/resources/templates/requestTopics.html @@ -376,7 +376,7 @@

Topic Request Form

- +
- +
-
- -
- -
-
+ + + + + + -
- -
- -
-
+ + + + + +
- +
+
diff --git a/kafkawize-web/src/main/resources/templates/showTeams.html b/kafkawize-web/src/main/resources/templates/showTeams.html index 7294a7e..0722a7e 100644 --- a/kafkawize-web/src/main/resources/templates/showTeams.html +++ b/kafkawize-web/src/main/resources/templates/showTeams.html @@ -367,6 +367,7 @@

Teams

+ @@ -376,6 +377,7 @@

Teams

+ @@ -389,6 +391,8 @@

Teams


+ + diff --git a/kafkawize-web/src/test/java/com/kafkamgt/uiapi/service/UiConfigControllerServiceTest.java b/kafkawize-web/src/test/java/com/kafkamgt/uiapi/service/UiConfigControllerServiceTest.java new file mode 100644 index 0000000..faf79d5 --- /dev/null +++ b/kafkawize-web/src/test/java/com/kafkamgt/uiapi/service/UiConfigControllerServiceTest.java @@ -0,0 +1,74 @@ +package com.kafkamgt.uiapi.service; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.*; + +public class UiConfigControllerServiceTest { + + @Before + public void setUp() throws Exception { + } + + @After + public void tearDown() throws Exception { + } + + @Test + public void getEnvs() { + } + + @Test + public void getSchemaRegEnvs() { + } + + @Test + public void getAllTeams() { + } + + @Test + public void getAllTeamsSU() { + } + + @Test + public void addNewEnv() { + } + + @Test + public void deleteCluster() { + } + + @Test + public void deleteTeam() { + } + + @Test + public void deleteUser() { + } + + @Test + public void addNewUser() { + } + + @Test + public void addNewTeam() { + } + + @Test + public void changePwd() { + } + + @Test + public void showUsers() { + } + + @Test + public void getMyProfileInfo() { + } + + @Test + public void showActivityLog() { + } +} \ No newline at end of file diff --git a/pom.xml b/pom.xml index 16938f7..f410192 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ com.kafkamgt.uiapikafkawize - 3.1 + 3.2 kafkawize-conf kafkawize-web diff --git a/screenshots/Dashboard.JPG b/screenshots/Dashboard.JPG new file mode 100644 index 0000000..9aae93a Binary files /dev/null and b/screenshots/Dashboard.JPG differ diff --git a/screenshots/RequestTopic.JPG b/screenshots/RequestTopic.JPG index 7b939bd..b18aa12 100644 Binary files a/screenshots/RequestTopic.JPG and b/screenshots/RequestTopic.JPG differ diff --git a/screenshots/ViewTeams.JPG b/screenshots/ViewTeams.JPG new file mode 100644 index 0000000..8ea0f1d Binary files /dev/null and b/screenshots/ViewTeams.JPG differ
Select TeamName Team Mail Team Phone
{{ teamDetails.teamname }} {{ teamDetails.teammail }} {{ teamDetails.teamphone }}