Browse Source

se agregaron las funciones para poder subir un archivo y que nos devuelva el token del archivo para posteriormente incluir ese token en una peticion y construya un ticket con archivo

pull/1/head
parent
commit
c53a0674ff
6 changed files with 57 additions and 22 deletions
  1. +12
    -8
      src/main/java/mx/gob/jumapacelaya/api/RedmineClient.java
  2. +11
    -6
      src/main/java/mx/gob/jumapacelaya/api/SecurityConfig.java
  3. +1
    -2
      src/main/java/mx/gob/jumapacelaya/services/LdapService.java
  4. +4
    -0
      src/main/java/mx/gob/jumapacelaya/services/UserService.java
  5. +28
    -5
      src/main/java/mx/gob/jumapacelaya/views/crearnuevoticket/CrearnuevoTicketView.java
  6. +1
    -1
      src/main/resources/application.properties

+ 12
- 8
src/main/java/mx/gob/jumapacelaya/api/RedmineClient.java View File

@ -247,10 +247,9 @@ public class RedmineClient {
public String uploadFile(byte[] fileContent, String fileName) {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(REDMINE_URL + "/uploads.json"))
.uri(URI.create(REDMINE_URL + "/uploads.json?filename=" + fileName))
.header("Content-Type", "application/octet-stream")
.header("X-Redmine-API-Key", API_KEY)
.header("Content-Disposition", "attachment; filename=\"" + fileName + "\"")
.POST(HttpRequest.BodyPublishers.ofByteArray(fileContent))
.build();
@ -273,26 +272,31 @@ public class RedmineClient {
public String createIssue(Map<String, String> issueDetails, String apiKey) {
return createIssue(issueDetails, null, apiKey);
return createIssue(issueDetails, null, null, null, apiKey);
}
public String createIssue(Map<String, String> issueDetails, String fileUploadToken, String apiKey) {
public String createIssue(Map<String, String> issueDetails, String fileUploadToken, String fileName, String contentType, String apiKey) {
Map<String, Object> payload = new HashMap<>();
payload.put("issue", issueDetails);
Map<String, Object> issue = new HashMap<>(issueDetails);
RedmineUser user = (RedmineUser) VaadinService.getCurrentRequest().getWrappedSession().getAttribute("myaccount");
if (fileUploadToken != null) {
List<Map<String, String>> uploads = new ArrayList<>();
Map<String, String> fileTokenMap = new HashMap<>();
List<Map<String, Object>> uploads = new ArrayList<>();
Map<String, Object> fileTokenMap = new HashMap<>();
fileTokenMap.put("filename", fileName);
fileTokenMap.put("token", fileUploadToken);
fileTokenMap.put("content_type", contentType);
uploads.add(fileTokenMap);
payload.put("uploads", uploads);
}
payload.put("issue", issueDetails);
String jsonPayload = GSON.toJson(payload);
try {
RedmineUser user = (RedmineUser) VaadinService.getCurrentRequest().getWrappedSession().getAttribute("myaccount");
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(REDMINE_URL + "/issues.json"))
.header("Content-Type", "application/json")


+ 11
- 6
src/main/java/mx/gob/jumapacelaya/api/SecurityConfig.java View File

@ -32,15 +32,20 @@ public class SecurityConfig extends VaadinWebSecurity {
.requestMatchers(
AntPathRequestMatcher.antMatcher(HttpMethod.GET, "/login*")
).permitAll()
)
.formLogin(formLogin -> formLogin
.loginPage("/login")
.successHandler((request, response, authentication) -> {
response.sendRedirect("");
}));
String username = authentication.getName();
if (userService.getAuthenticatedRedmineUser() == null) {
response.sendRedirect("/login");
}else {
response.sendRedirect("");
}
})
.failureUrl("/login ")
);
super.configure(http);
setLoginView(http, LoginView.class);


+ 1
- 2
src/main/java/mx/gob/jumapacelaya/services/LdapService.java View File

@ -37,9 +37,8 @@ public class LdapService {
private String getAttribute(Attributes attributes, String attributeName) {
try {
return attributes.get(attributeName).get().toString();
return attributes.get(attributeName) != null ? attributes.get(attributeName).get().toString(): null;
} catch (NamingException e) {
e.printStackTrace();
return null;
}
}


+ 4
- 0
src/main/java/mx/gob/jumapacelaya/services/UserService.java View File

@ -38,6 +38,10 @@ public class UserService {
if (user == null) {
CustomUserDetails userDetails = ldapService.getUserDetails(username);
if (userDetails != null) {
if (userDetails.getEmail() == null || userDetails.getEmail().isEmpty()) {
logger.error("El usuario: " + username + " no tiene correo electronico.");
return null;
}
RedmineUser newUser = RedmineClient.createRedmineUser(
username,
userDetails.getFirstName(),


+ 28
- 5
src/main/java/mx/gob/jumapacelaya/views/crearnuevoticket/CrearnuevoTicketView.java View File

@ -27,6 +27,8 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static org.atmosphere.annotation.AnnotationUtil.logger;
@Route(value = "", layout = MainLayout.class)
@PermitAll
@PageTitle("Nuevo ticket")
@ -36,6 +38,7 @@ public class CrearnuevoTicketView extends VerticalLayout {
private final UserService userService;
private MemoryBuffer buffer;
private Upload uploadFile;
private String fileUploadToken;
// Inyectar el RedmineClient a través del constructor
public CrearnuevoTicketView(RedmineClient api, UserService service) {
@ -67,6 +70,23 @@ public class CrearnuevoTicketView extends VerticalLayout {
uploadFile = new Upload(buffer);
uploadFile.setAcceptedFileTypes("image/jpeg", "image/png", "application/pdf");
uploadFile.addSucceededListener(event -> {
if (buffer.getFileData() != null) {
try {
byte[] fileContent = buffer.getInputStream().readAllBytes();
String fileName = buffer.getFileName();
fileUploadToken = api.uploadFile(fileContent, fileName);
if (fileUploadToken == null) {
logger.error("Error al obtener el token del archivo");
} else {
logger.error("Archivo subido exitosamente. Token obtenido: " + fileUploadToken);
}
} catch (IOException e) {
logger.error("Error al leer el archivo: " + e.getMessage());
}
}
});
// Boton para crear los tickets
Button createButton = new Button("Enviar ticket", event -> {
if (user.getKey() == null || user.getKey().isEmpty()) {
@ -81,18 +101,21 @@ public class CrearnuevoTicketView extends VerticalLayout {
issueDetails.put("description", descripcion.getValue());
String fileUploadToken = null;
String fileName = null;
String contentType = null;
if (buffer.getFileData() != null) {
try {
byte[] fileContent = buffer.getInputStream().readAllBytes();
String fileName = buffer.getFileName();
fileUploadToken = api.uploadFile(fileContent, fileName); // Llamar al método sin pasar apiKey
fileName = buffer.getFileName();
contentType = buffer.getFileData().getMimeType();
fileUploadToken = api.uploadFile(fileContent, fileName);
} catch (IOException e) {
Notification.show("Error al cargar el archivo: " + e.getMessage(), 5000, Notification.Position.MIDDLE)
.addThemeVariants(NotificationVariant.LUMO_WARNING);
logger.error("Error al cargar el archivo: " + e.getMessage());
}
}
String response = api.createIssue(issueDetails, fileUploadToken, fileName, contentType, user.getKey());
String response = api.createIssue(issueDetails, fileUploadToken); // Llamar al método sin pasar apiKey
handleResponse(response, asunto, descripcion, tipoTickets);
});


+ 1
- 1
src/main/resources/application.properties View File

@ -19,7 +19,7 @@ spring.ldap.password=Dr3na%134$4guA
########PRODUCTIVO#################################
#redmine.url=https://proyman.jumapacelaya.gob.mx/
#redmine.api_key=ad58996f706a48474f1c74368bb35b4614428d90
#redmine.api_key=9cc9e89cbbf08a6252045d56bd3d3ffec90adbad
########LOCAL######################################


Loading…
Cancel
Save