Use user dependent ntfy data
This commit is contained in:
		
							parent
							
								
									f2823ad21e
								
							
						
					
					
						commit
						4653ab9866
					
				| @ -0,0 +1,55 @@ | |||||||
|  | package core.api.controller; | ||||||
|  | 
 | ||||||
|  | import core.api.models.auth.SimpleStatusResponse; | ||||||
|  | import core.api.models.users.NtfyInformation; | ||||||
|  | import core.entities.User; | ||||||
|  | import core.repositories.UserRepository; | ||||||
|  | import core.services.UserService; | ||||||
|  | import core.services.ntfy.TaskSchedulingService; | ||||||
|  | import org.quartz.SchedulerException; | ||||||
|  | import org.springframework.beans.factory.annotation.Autowired; | ||||||
|  | import org.springframework.beans.factory.annotation.Value; | ||||||
|  | import org.springframework.http.ResponseEntity; | ||||||
|  | import org.springframework.security.core.context.SecurityContextHolder; | ||||||
|  | import org.springframework.web.bind.annotation.*; | ||||||
|  | 
 | ||||||
|  | import javax.validation.Valid; | ||||||
|  | import java.util.Optional; | ||||||
|  | 
 | ||||||
|  | @CrossOrigin(origins = "*", maxAge = 3600) | ||||||
|  | @RestController | ||||||
|  | @RequestMapping("/api") | ||||||
|  | public class NtfyController { | ||||||
|  | 
 | ||||||
|  |     @Autowired private UserRepository userRepository; | ||||||
|  |     @Autowired private UserService userService; | ||||||
|  |     @Autowired private TaskSchedulingService taskSchedulingService; | ||||||
|  |     @GetMapping("/ntfy") | ||||||
|  |     public ResponseEntity<?> getNtfyInformation() { | ||||||
|  |         String username = SecurityContextHolder.getContext().getAuthentication().getName(); | ||||||
|  | 
 | ||||||
|  |         Optional<User> userOptional = userRepository.findByUsername(username); | ||||||
|  |         if(userOptional.isPresent()) { | ||||||
|  |             return ResponseEntity.ok(new NtfyInformation(userOptional.get())); | ||||||
|  |         } else { | ||||||
|  |             return ResponseEntity.status(404).body(new SimpleStatusResponse("failed")); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @PostMapping("/ntfy") | ||||||
|  |     public ResponseEntity<?> editNtfyInformation(@Valid @RequestBody NtfyInformation ntfyInformation) { | ||||||
|  |         String username = SecurityContextHolder.getContext().getAuthentication().getName(); | ||||||
|  |         Optional<User> user = userRepository.findByUsername(username); | ||||||
|  |         if(user.isPresent()) { | ||||||
|  |             userService.editNtfyInformation(user.get(), ntfyInformation); | ||||||
|  |             try { | ||||||
|  |                 taskSchedulingService.scheduleStartReminders(); | ||||||
|  |             } catch (SchedulerException e) { | ||||||
|  |                 throw new RuntimeException(e); | ||||||
|  |             } | ||||||
|  |             return ResponseEntity.ok(new SimpleStatusResponse("success")); | ||||||
|  |         } else { | ||||||
|  |             return ResponseEntity.status(404).body(new SimpleStatusResponse("failed")); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,53 @@ | |||||||
|  | package core.api.models.users; | ||||||
|  | 
 | ||||||
|  | import core.entities.User; | ||||||
|  | 
 | ||||||
|  | public class NtfyInformation { | ||||||
|  | 
 | ||||||
|  |     private String ntfy_host; | ||||||
|  |     private String ntfy_topic; | ||||||
|  |     private String ntfy_user; | ||||||
|  |     private String ntfy_token; | ||||||
|  | 
 | ||||||
|  |     public NtfyInformation(User user) { | ||||||
|  |         this.ntfy_host = user.getNtfy_host(); | ||||||
|  |         this.ntfy_topic = user.getNtfy_topic(); | ||||||
|  |         this.ntfy_user = "****"; | ||||||
|  |         this.ntfy_token =  "****"; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public NtfyInformation() { | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getNtfy_host() { | ||||||
|  |         return ntfy_host; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setNtfy_host(String ntfy_host) { | ||||||
|  |         this.ntfy_host = ntfy_host; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getNtfy_topic() { | ||||||
|  |         return ntfy_topic; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setNtfy_topic(String ntfy_topic) { | ||||||
|  |         this.ntfy_topic = ntfy_topic; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getNtfy_user() { | ||||||
|  |         return ntfy_user; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setNtfy_user(String ntfy_user) { | ||||||
|  |         this.ntfy_user = ntfy_user; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getNtfy_token() { | ||||||
|  |         return ntfy_token; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setNtfy_token(String ntfy_token) { | ||||||
|  |         this.ntfy_token = ntfy_token; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -42,6 +42,11 @@ public class User { | |||||||
|                 inverseJoinColumns = @JoinColumn(name = "role_id")) |                 inverseJoinColumns = @JoinColumn(name = "role_id")) | ||||||
|     private Set<RoleEntity> roles = new HashSet<>(); |     private Set<RoleEntity> roles = new HashSet<>(); | ||||||
| 
 | 
 | ||||||
|  |     private String ntfy_host; | ||||||
|  |     private String ntfy_topic; | ||||||
|  |     private String ntfy_username; | ||||||
|  |     private String ntfy_token; | ||||||
|  | 
 | ||||||
|     public User() { |     public User() { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -98,6 +103,38 @@ public class User { | |||||||
|         this.roles = roles; |         this.roles = roles; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     public String getNtfy_host() { | ||||||
|  |         return ntfy_host; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setNtfy_host(String ntfy_host) { | ||||||
|  |         this.ntfy_host = ntfy_host; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getNtfy_topic() { | ||||||
|  |         return ntfy_topic; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setNtfy_topic(String ntfy_topic) { | ||||||
|  |         this.ntfy_topic = ntfy_topic; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getNtfy_username() { | ||||||
|  |         return ntfy_username; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setNtfy_username(String ntfy_username) { | ||||||
|  |         this.ntfy_username = ntfy_username; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getNtfy_token() { | ||||||
|  |         return ntfy_token; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setNtfy_token(String ntfy_token) { | ||||||
|  |         this.ntfy_token = ntfy_token; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     @Override |     @Override | ||||||
|     public boolean equals(Object o) { |     public boolean equals(Object o) { | ||||||
|         if (this == o) return true; |         if (this == o) return true; | ||||||
|  | |||||||
| @ -3,6 +3,7 @@ package core.services; | |||||||
| import core.api.models.account.AccountDeleteRequest; | import core.api.models.account.AccountDeleteRequest; | ||||||
| import core.api.models.account.EmailChangeRequest; | import core.api.models.account.EmailChangeRequest; | ||||||
| import core.api.models.account.PasswordChangeRequest; | import core.api.models.account.PasswordChangeRequest; | ||||||
|  | import core.api.models.users.NtfyInformation; | ||||||
| import core.api.models.users.UserAddInfo; | import core.api.models.users.UserAddInfo; | ||||||
| import core.api.models.users.UserInfo; | import core.api.models.users.UserInfo; | ||||||
| import core.api.models.users.UserUpdateInfo; | import core.api.models.users.UserUpdateInfo; | ||||||
| @ -152,4 +153,13 @@ public class UserService { | |||||||
|         userRepository.deleteByUsername(username); |         userRepository.deleteByUsername(username); | ||||||
|         return 0; |         return 0; | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     public void editNtfyInformation(User user, NtfyInformation ntfyInformation) { | ||||||
|  |         user.setNtfy_host(ntfyInformation.getNtfy_host()); | ||||||
|  |         user.setNtfy_topic(ntfyInformation.getNtfy_topic()); | ||||||
|  |         user.setNtfy_username(ntfyInformation.getNtfy_user()); | ||||||
|  |         user.setNtfy_token(ntfyInformation.getNtfy_token()); | ||||||
|  | 
 | ||||||
|  |         userRepository.save(user); | ||||||
|  |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -22,12 +22,6 @@ import java.util.List; | |||||||
| @Service | @Service | ||||||
| public class TaskSchedulingService { | public class TaskSchedulingService { | ||||||
| 
 | 
 | ||||||
|     @Value("${ntfy.host}") |  | ||||||
|     private String ntfy_host; |  | ||||||
| 
 |  | ||||||
|     @Value("${ntfy.topic}") |  | ||||||
|     private String ntfy_topic; |  | ||||||
| 
 |  | ||||||
|     @Value("${frontend.domain}") |     @Value("${frontend.domain}") | ||||||
|     private String frontend_domain; |     private String frontend_domain; | ||||||
| 
 | 
 | ||||||
| @ -43,8 +37,8 @@ public class TaskSchedulingService { | |||||||
|                 .withIdentity(String.valueOf(advancedTaskSchedule.getScheduleID())) |                 .withIdentity(String.valueOf(advancedTaskSchedule.getScheduleID())) | ||||||
|                 .build(); |                 .build(); | ||||||
|         job.getJobDataMap().put("task", advancedTaskSchedule.getTask().getTaskName()); |         job.getJobDataMap().put("task", advancedTaskSchedule.getTask().getTaskName()); | ||||||
|         job.getJobDataMap().put("ntfy_host", ntfy_host); |         job.getJobDataMap().put("ntfy_host", advancedTaskSchedule.getTask().getTaskgroup().getUser().getNtfy_host()); | ||||||
|         job.getJobDataMap().put("ntfy_topic", ntfy_topic); |         job.getJobDataMap().put("ntfy_topic", advancedTaskSchedule.getTask().getTaskgroup().getUser().getNtfy_topic()); | ||||||
|         job.getJobDataMap().put("frontend_domain", frontend_domain); |         job.getJobDataMap().put("frontend_domain", frontend_domain); | ||||||
| 
 | 
 | ||||||
|         Trigger trigger = TriggerBuilder.newTrigger().startAt(calculateDelayInMillis(advancedTaskSchedule.getScheduleStart())).build(); |         Trigger trigger = TriggerBuilder.newTrigger().startAt(calculateDelayInMillis(advancedTaskSchedule.getScheduleStart())).build(); | ||||||
| @ -52,28 +46,6 @@ public class TaskSchedulingService { | |||||||
|         scheduler.scheduleJob(job, trigger); |         scheduler.scheduleJob(job, trigger); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|    public static void scheduleTask() throws SchedulerException { |  | ||||||
|        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); |  | ||||||
|        scheduler.start(); |  | ||||||
| 
 |  | ||||||
|        JobDetail job = JobBuilder.newJob(NtfyTask.class).build(); |  | ||||||
| 
 |  | ||||||
|        job.getJobDataMap().put("data", "A simple Job 1 Message"); |  | ||||||
| 
 |  | ||||||
|        LocalDateTime executionTime = LocalDateTime.of(2024, 3, 14, 9, 18); // Example: March 15, 2024, 10:00 AM |  | ||||||
| 
 |  | ||||||
|        Trigger trigger = TriggerBuilder.newTrigger() |  | ||||||
|                .withIdentity("trigger1", "Group 1") |  | ||||||
|                .startAt(calculateDelayInMillis(executionTime)).build(); |  | ||||||
|        Trigger trigger2 = TriggerBuilder.newTrigger() |  | ||||||
|                .withIdentity("trigger2", "Group 1") |  | ||||||
|                .startAt(calculateDelayInMillis(executionTime.plusMinutes(1))).build(); |  | ||||||
| 
 |  | ||||||
|        Trigger immediatly = TriggerBuilder.newTrigger().withIdentity("Immediately", "Group 1").startNow().build(); |  | ||||||
| 
 |  | ||||||
|        scheduler.scheduleJob(job, immediatly); |  | ||||||
|    } |  | ||||||
| 
 |  | ||||||
|     private static Date calculateDelayInMillis(LocalDateTime executionTime) { |     private static Date calculateDelayInMillis(LocalDateTime executionTime) { | ||||||
|         return  Date.from(executionTime.atZone(ZoneId.systemDefault()).toInstant()); |         return  Date.from(executionTime.atZone(ZoneId.systemDefault()).toInstant()); | ||||||
|     } |     } | ||||||
| @ -82,7 +54,9 @@ public class TaskSchedulingService { | |||||||
|     public void scheduleStartReminders() throws SchedulerException { |     public void scheduleStartReminders() throws SchedulerException { | ||||||
|         List<AdvancedTaskSchedule> advancedTaskSchedules = taskScheduleService.findSchedulesByDate(LocalDate.now()); |         List<AdvancedTaskSchedule> advancedTaskSchedules = taskScheduleService.findSchedulesByDate(LocalDate.now()); | ||||||
|         for(AdvancedTaskSchedule advancedTaskSchedule : advancedTaskSchedules) { |         for(AdvancedTaskSchedule advancedTaskSchedule : advancedTaskSchedules) { | ||||||
|             scheduleStartingTask(advancedTaskSchedule); |             if(advancedTaskSchedule.getTask().getTaskgroup().getUser().getNtfy_host() != null) { | ||||||
|  |                 scheduleStartingTask(advancedTaskSchedule); | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user