Added statistics endpoint
- Added onlineTime statistic - Added lastLogin tracking and endpoint
This commit is contained in:
parent
299cc565d7
commit
017ef0afca
@ -3,10 +3,15 @@ package de.w665.sharepulse;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
@SpringBootApplication
|
||||
public class SharepulseApplication {
|
||||
|
||||
public static Date startTime;
|
||||
|
||||
public static void main(String[] args) {
|
||||
startTime = new Date();
|
||||
SpringApplication.run(SharepulseApplication.class, args);
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,5 @@
|
||||
package de.w665.sharepulse.db.repo;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
import com.rethinkdb.RethinkDB;
|
||||
import com.rethinkdb.net.Connection;
|
||||
import de.w665.sharepulse.db.RethinkDBConfig;
|
||||
@ -35,6 +33,13 @@ public class UserRepository {
|
||||
}
|
||||
}
|
||||
|
||||
public void updateLastLoginForUser(String username, Date lastLogin) {
|
||||
r.db(config.getDatabase()).table("users")
|
||||
.filter(r.hashMap("username", username))
|
||||
.update(r.hashMap("lastLogin", lastLogin.getTime()))
|
||||
.run(connection);
|
||||
}
|
||||
|
||||
public void insertUser(User user) {
|
||||
r.db(config.getDatabase()).table("users").insert(user).run(connection);
|
||||
}
|
||||
|
@ -1,10 +1,13 @@
|
||||
package de.w665.sharepulse.model;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@ -14,4 +17,6 @@ public class User {
|
||||
private String password;
|
||||
private String email;
|
||||
private String role;
|
||||
@JsonFormat(timezone = "ETC")
|
||||
private Date lastLogin;
|
||||
}
|
||||
|
@ -0,0 +1,50 @@
|
||||
package de.w665.sharepulse.rest.mappings;
|
||||
|
||||
import de.w665.sharepulse.SharepulseApplication;
|
||||
import de.w665.sharepulse.db.repo.UserRepository;
|
||||
import de.w665.sharepulse.model.User;
|
||||
import de.w665.sharepulse.rest.SecureApiRestController;
|
||||
import de.w665.sharepulse.service.AuthenticationService;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
@Slf4j
|
||||
@RestController
|
||||
public class Administration extends SecureApiRestController {
|
||||
|
||||
private final UserRepository userRepository;
|
||||
private final AuthenticationService authenticationService;
|
||||
|
||||
public Administration(UserRepository userRepository, AuthenticationService authenticationService) {
|
||||
this.userRepository = userRepository;
|
||||
this.authenticationService = authenticationService;
|
||||
}
|
||||
|
||||
@GetMapping("/statistics")
|
||||
public ResponseEntity<Object> getStatistics(HttpServletRequest request) {
|
||||
|
||||
String token = request.getHeader("Authorization");
|
||||
token = token.substring(7);
|
||||
String username = authenticationService.getClaimValue(token, "username", String.class);
|
||||
Optional<User> optionalUser = userRepository.retrieveUserByUsername(username);
|
||||
if(optionalUser.isEmpty()) {
|
||||
return ResponseEntity.badRequest().body("User not found");
|
||||
}
|
||||
User user = optionalUser.get();
|
||||
|
||||
// If role filtering is required later, add here
|
||||
|
||||
Map<String, Object> response = new HashMap<>();
|
||||
response.put("applicationOnlineTime", System.currentTimeMillis() - SharepulseApplication.startTime.getTime());
|
||||
response.put("lastUserLogin", user.getLastLogin());
|
||||
log.debug("Received statistics request");
|
||||
return ResponseEntity.ok(response);
|
||||
}
|
||||
}
|
@ -46,6 +46,7 @@ public class AuthenticationService {
|
||||
}
|
||||
Optional<User> user = userRepository.retrieveUserByUsername(username);
|
||||
if (user.isPresent() && passwordEncoder.matches(password, user.get().getPassword())) {
|
||||
userRepository.updateLastLoginForUser(user.get().getUsername(), new Date());
|
||||
return generateToken(user.get());
|
||||
}
|
||||
return null;
|
||||
|
Loading…
x
Reference in New Issue
Block a user