Skip to content

Commit fdfce86

Browse files
committed
morning updates
1 parent 4d687ca commit fdfce86

File tree

8 files changed

+85
-8
lines changed

8 files changed

+85
-8
lines changed

api/src/main/java/io/sentrius/sso/controllers/api/UserApiController.java

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,27 +6,33 @@
66
import java.util.List;
77
import java.util.Map;
88
import com.fasterxml.jackson.core.JsonProcessingException;
9+
import com.fasterxml.jackson.databind.JsonNode;
910
import com.fasterxml.jackson.databind.node.BooleanNode;
1011
import com.fasterxml.jackson.databind.node.IntNode;
1112
import com.fasterxml.jackson.databind.node.ObjectNode;
1213
import com.fasterxml.jackson.databind.node.TextNode;
1314
import io.sentrius.sso.core.annotations.LimitAccess;
1415
import io.sentrius.sso.core.annotations.Model;
1516
import io.sentrius.sso.core.controllers.BaseController;
17+
import io.sentrius.sso.core.model.HostSystem;
1618
import io.sentrius.sso.core.model.security.UserType;
1719
import io.sentrius.sso.core.model.users.User;
1820
import io.sentrius.sso.core.model.dto.UserDTO;
1921
import io.sentrius.sso.core.model.dto.UserTypeDTO;
2022
import io.sentrius.sso.core.model.security.enums.UserAccessEnum;
2123
import io.sentrius.sso.core.model.users.UserConfig;
2224
import io.sentrius.sso.core.model.users.UserSettings;
25+
import io.sentrius.sso.core.model.zt.OpsZeroTrustAcessTokenRequest;
26+
import io.sentrius.sso.core.model.zt.ZeroTrustAccessTokenRequest;
2327
import io.sentrius.sso.core.security.service.CryptoService;
2428
import io.sentrius.sso.core.services.ErrorOutputService;
2529
import io.sentrius.sso.core.services.SessionService;
2630
import io.sentrius.sso.core.services.UserCustomizationService;
2731
import io.sentrius.sso.core.services.UserService;
2832
import io.sentrius.sso.core.services.HostGroupService;
2933
import io.sentrius.sso.core.config.SystemOptions;
34+
import io.sentrius.sso.core.services.ZeroTrustAccessTokenService;
35+
import io.sentrius.sso.core.services.ZeroTrustRequestService;
3036
import io.sentrius.sso.core.utils.JsonUtil;
3137
import io.sentrius.sso.core.utils.MessagingUtil;
3238
import jakarta.servlet.http.HttpServletRequest;
@@ -37,6 +43,7 @@
3743
import org.springframework.web.bind.annotation.GetMapping;
3844
import org.springframework.web.bind.annotation.ModelAttribute;
3945
import org.springframework.web.bind.annotation.PostMapping;
46+
import org.springframework.web.bind.annotation.RequestBody;
4047
import org.springframework.web.bind.annotation.RequestMapping;
4148
import org.springframework.web.bind.annotation.RequestParam;
4249

@@ -51,6 +58,8 @@ public class UserApiController extends BaseController {
5158
final CryptoService cryptoService;
5259
private final MessagingUtil messagingUtil;
5360
final UserCustomizationService userThemeService;
61+
final ZeroTrustRequestService ztatRequestService;
62+
final ZeroTrustAccessTokenService ztatService;
5463

5564
static Map<String, Field> fields = new HashMap<>();
5665
static {
@@ -66,14 +75,18 @@ protected UserApiController(UserService userService, SystemOptions systemOptions
6675
HostGroupService hostGroupService, CryptoService cryptoService,
6776
MessagingUtil messagingUtil,
6877
UserCustomizationService userThemeService,
69-
SessionService sessionService
78+
SessionService sessionService,
79+
ZeroTrustRequestService ztatRequestService,
80+
ZeroTrustAccessTokenService ztatService
7081
) {
7182
super(userService, systemOptions, errorOutputService);
7283
this.hostGroupService = hostGroupService;
7384
this.cryptoService = cryptoService;
7485
this.messagingUtil = messagingUtil;
7586
this.userThemeService = userThemeService;
7687
this.sessionService = sessionService;
88+
this.ztatRequestService = ztatRequestService;
89+
this.ztatService = ztatService;
7790
}
7891

7992
@GetMapping("list")
@@ -117,7 +130,6 @@ public String deleteUser(@RequestParam("userId") String userId) throws GeneralSe
117130
}
118131

119132
@PostMapping("/settings")
120-
@LimitAccess(userAccess = {UserAccessEnum.CAN_EDIT_USERS})
121133
public String updateUser(HttpServletRequest request, HttpServletResponse response ) throws JsonProcessingException {
122134
var user = userService.getOperatingUser(request,response, null);
123135

@@ -163,6 +175,18 @@ public String updateUser(HttpServletRequest request, HttpServletResponse respons
163175
return "redirect:/sso/v1/users/settings?message=" + MessagingUtil.getMessageId(MessagingUtil.SETTINGS_UPDATED);
164176
}
165177

178+
@PostMapping("/settings/workhours")
179+
public String updateWorkhours(HttpServletRequest request, HttpServletResponse response,
180+
@RequestBody JsonNode body) throws JsonProcessingException {
181+
log.info("Updating work hours: {}", body);
182+
/*
183+
var reason = ztatService.createReason("Updating work hours", "Updating work hours", "");
184+
var ztatRequest = ztatService.createOpsRequest("Updating work hours", "Updating work hours",
185+
reason, userService.getOperatingUser(request,response, null));
186+
ztatRequestService.createOpsTATRequest(ztatRequest);*/
187+
return "";
188+
}
189+
166190
@GetMapping("/types/list")
167191
@LimitAccess(userAccess = {UserAccessEnum.CAN_MANAGE_USERS})
168192
public ResponseEntity<List<UserTypeDTO>> getUserTypes() throws GeneralSecurityException {
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
2+
ALTER TABLE operations_request
3+
ADD COLUMN summary TEXT;

api/src/main/resources/templates/sso/users/user_settings.html

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,19 @@
99
/* Centering the form container */
1010
.center-container {
1111
display: flex;
12-
justify-content: center;
12+
flex-direction: column; /* Stack elements vertically */
1313
align-items: center;
14-
height: calc(100vh - 80px); /* Full viewport height minus space for navbar */
14+
width: 100%; /* Ensure full width usage */
1515
padding: 20px;
1616
}
1717

18+
.form-section {
19+
width: 100%; /* Prevent side-by-side layout */
20+
max-width: 600px; /* Optional: Match the width of the form */
21+
margin-bottom: 20px; /* Space between form and table */
22+
}
23+
24+
1825
/* Limit form width for better UX */
1926
.settings-form {
2027
max-width: 500px;
@@ -49,6 +56,11 @@
4956
.submit_btn {
5057
width: 100%; /* Full-width button */
5158
}
59+
60+
.settings-form table,
61+
.table {
62+
margin-bottom: 10px; /* Reduce spacing between tables */
63+
}
5264
</style>
5365
<title>[[${systemOptions.systemLogoName}]] - User Settings</title>
5466
</head>
@@ -66,6 +78,7 @@
6678

6779
<!-- Centered form container -->
6880
<div class="center-container">
81+
<h2>Your Settings</h2>
6982
<form th:action="@{/api/v1/users/settings}" method="post" class="settings-form" autocomplete="off">
7083
<input type="hidden" name="_csrf" th:value="${_csrf.token}" />
7184

@@ -91,8 +104,9 @@
91104
<button type="submit" class="btn btn-primary submit_btn">Save</button>
92105
</form>
93106

107+
<div class="form-section">
94108
<br />
95-
<h3>Work Hours</h3>
109+
<h2>Work Hours</h2>
96110
<table class="table table-dark table-striped">
97111
<thead>
98112
<tr>
@@ -152,7 +166,7 @@ <h3>Work Hours</h3>
152166
}
153167
});
154168

155-
fetch('/api/v1/user/workhours', {
169+
fetch('/api/v1/users/settings/workhours', {
156170
method: 'POST',
157171
headers: { 'Content-Type': 'application/json' },
158172
body: JSON.stringify(workHours)

api/src/main/resources/templates/sso/ztats/view_ztats.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ <h2 class="toast-header">Trust AT (TAT) Management</h2>
108108
</thead>
109109
<tbody>
110110
<tr th:each="s : ${openOpsTats}">
111-
<td th:text="${s.command}"></td>
111+
<td th:text="${s.summary}"></td>
112112
<td th:text="${s.userName}"></td>
113113
<td>
114114
<button th:id="'ops_app_btn_' + ${s.id}" class="icon-btn ops_app_btn" th:if="${canApprove}"></button>

core/src/main/java/io/sentrius/sso/core/model/dto/JITTrackerDTO.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public class JITTrackerDTO {
1212
private Long id;
1313
@Builder.Default
1414
private String status = "Open";
15+
private String summary;
1516
private String command;
1617
private String commandHash;
1718
private String userName;

core/src/main/java/io/sentrius/sso/core/model/zt/OpsZeroTrustAcessTokenRequest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ public class OpsZeroTrustAcessTokenRequest {
3838
@Column(name = "command", nullable = false)
3939
private String command;
4040

41+
@Column(name = "summary", columnDefinition = "TEXT")
42+
private String summary;
43+
4144
@Column(name = "command_hash", nullable = false)
4245
private String commandHash;
4346

core/src/main/java/io/sentrius/sso/core/services/ZeroTrustAccessTokenService.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,25 @@ public ZeroTrustAccessTokenRequest createRequest(
6868
return request;
6969
}
7070

71+
public OpsZeroTrustAcessTokenRequest createOpsRequest(
72+
@NonNull String summary,
73+
@NonNull String command,
74+
@NonNull ZeroTrustAccessTokenReason reason,
75+
@NonNull User user){
76+
77+
OpsZeroTrustAcessTokenRequest request =
78+
OpsZeroTrustAcessTokenRequest.builder()
79+
.command(command)
80+
.ztatReason(reason)
81+
.user(user)
82+
.commandHash(ZTATUtils.getCommandHash(command))
83+
.summary(summary)
84+
.lastUpdated(new Timestamp(System.currentTimeMillis()))
85+
.build();
86+
return request;
87+
}
88+
89+
7190

7291
public boolean isApproved(
7392
@NonNull String command, @NonNull User user , @NonNull HostSystem system)

core/src/main/java/io/sentrius/sso/core/services/ZeroTrustRequestService.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,19 @@ public OpsZeroTrustAcessTokenRequest getOpsAccessTokenRequestById(Long ztatId) {
6464
}
6565

6666
@Transactional
67-
public ZeroTrustAccessTokenRequest createJITRequest(ZeroTrustAccessTokenRequest ztatRequest) {
67+
public OpsZeroTrustAcessTokenRequest createOpsTATRequest(OpsZeroTrustAcessTokenRequest ztatRequest) {
68+
try {
69+
OpsZeroTrustAcessTokenRequest savedRequest = opsJITRequestRepository.save(ztatRequest);
70+
log.info("JITRequest created: {}", savedRequest);
71+
return savedRequest;
72+
} catch (Exception e) {
73+
log.error("Error while creating JITRequest", e);
74+
throw new RuntimeException("Failed to create JITRequest", e);
75+
}
76+
}
77+
78+
@Transactional
79+
public ZeroTrustAccessTokenRequest createTATRequest(ZeroTrustAccessTokenRequest ztatRequest) {
6880
try {
6981
ZeroTrustAccessTokenRequest savedRequest = ztatRequestRepository.save(ztatRequest);
7082
log.info("JITRequest created: {}", savedRequest);
@@ -308,6 +320,7 @@ private JITTrackerDTO convertToDTO(ZeroTrustAccessTokenRequest request) {
308320
private JITTrackerDTO convertToDTO(OpsZeroTrustAcessTokenRequest request) {
309321
return JITTrackerDTO.builder()
310322
.id(request.getId())
323+
.summary(request.getSummary())
311324
.command(request.getCommand())
312325
.commandHash(request.getCommandHash())
313326
.userName(request.getUser().getUsername())

0 commit comments

Comments
 (0)