a lot of changes again
This commit is contained in:
parent
97ee77a8a6
commit
31cb26e54c
@ -0,0 +1,72 @@
|
||||
/**package fr.la_banquise.backend.data.model;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonBackReference;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import com.github.dockerjava.api.DockerClient;
|
||||
import com.github.dockerjava.api.command.CreateContainerResponse;
|
||||
import com.github.dockerjava.api.command.InspectContainerResponse.ContainerState;
|
||||
import com.github.dockerjava.api.model.ExposedPort;
|
||||
import com.github.dockerjava.api.model.HostConfig;
|
||||
import com.github.dockerjava.api.model.Ports;
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.persistence.Column;
|
||||
import jakarta.persistence.Entity;
|
||||
import jakarta.persistence.GeneratedValue;
|
||||
import jakarta.persistence.GenerationType;
|
||||
import jakarta.persistence.Id;
|
||||
import jakarta.persistence.JoinColumn;
|
||||
import jakarta.persistence.ManyToOne;
|
||||
import jakarta.persistence.SequenceGenerator;
|
||||
import jakarta.persistence.Table;
|
||||
import java.util.List;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* Instances
|
||||
|
||||
@Entity
|
||||
@NoArgsConstructor
|
||||
@Table(name = "dockerfile")
|
||||
public class Dockerfile {
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
@SequenceGenerator(name = "DockerfileSeq",
|
||||
sequenceName = "dockerfile_id_seq", allocationSize = 1,
|
||||
initialValue = 1)
|
||||
public Long id;
|
||||
@Column(unique = true) public String name;
|
||||
public String text;
|
||||
|
||||
@JsonIgnore
|
||||
public List<Instance> instances;
|
||||
|
||||
public Dockerfile(String name, String text) {
|
||||
this.name = name;
|
||||
this.text = text;
|
||||
}
|
||||
|
||||
public Dockerfile() {}
|
||||
|
||||
public boolean isCreated() { return containerId != null && status != null; }
|
||||
|
||||
public boolean createContainer(String containerName, int port) {
|
||||
ExposedPort tcpSsh = ExposedPort.tcp(80);
|
||||
|
||||
Ports portBindings = new Ports();
|
||||
portBindings.bind(tcpSsh, Ports.Binding.bindPort(port));
|
||||
|
||||
HostConfig hostConfig =
|
||||
HostConfig.newHostConfig().withPortBindings(portBindings);
|
||||
|
||||
CreateContainerResponse container =
|
||||
dockerClient.createContainerCmd("nginx:latest")
|
||||
.withName(containerName)
|
||||
.withExposedPorts(tcpSsh)
|
||||
.withHostConfig(hostConfig)
|
||||
.exec();
|
||||
|
||||
this.containerId = container.getId();
|
||||
|
||||
return true;
|
||||
};
|
||||
}**/
|
@ -1,6 +1,7 @@
|
||||
package fr.la_banquise.backend.data.model;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonBackReference;
|
||||
import com.github.dockerjava.api.model.Container;
|
||||
import jakarta.persistence.Entity;
|
||||
import jakarta.persistence.GeneratedValue;
|
||||
import jakarta.persistence.GenerationType;
|
||||
@ -24,28 +25,22 @@ public class Instance {
|
||||
allocationSize = 1, initialValue = 1)
|
||||
public Long id;
|
||||
public String name;
|
||||
public String ssh;
|
||||
public Long port;
|
||||
public String pwd;
|
||||
public Container container;
|
||||
|
||||
@JsonBackReference
|
||||
@ManyToOne
|
||||
@JoinColumn(name = "user_id", nullable = false)
|
||||
public User user;
|
||||
public User owner;
|
||||
|
||||
@ManyToOne
|
||||
@JoinColumn(name = "practical_id", nullable = false)
|
||||
public Tp tp;
|
||||
public Sujet sujet;
|
||||
|
||||
public Instance(String name, String ssh, String pwd, Long port, User user,
|
||||
Tp tp) {
|
||||
public Instance(String name, Long port, User user, Sujet sujet) {
|
||||
this.name = name;
|
||||
this.ssh = ssh;
|
||||
this.pwd = pwd;
|
||||
this.port = port;
|
||||
this.user = user;
|
||||
this.tp = tp;
|
||||
this.owner = user;
|
||||
this.sujet = sujet;
|
||||
}
|
||||
|
||||
public Instance() {}
|
||||
}
|
||||
|
@ -6,9 +6,12 @@ import jakarta.persistence.GeneratedValue;
|
||||
import jakarta.persistence.GenerationType;
|
||||
import jakarta.persistence.Id;
|
||||
import jakarta.persistence.JoinColumn;
|
||||
import jakarta.persistence.JoinTable;
|
||||
import jakarta.persistence.ManyToMany;
|
||||
import jakarta.persistence.ManyToOne;
|
||||
import jakarta.persistence.SequenceGenerator;
|
||||
import jakarta.persistence.Table;
|
||||
import java.util.List;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@ -24,19 +27,24 @@ public class Ji {
|
||||
public Long id;
|
||||
public String name;
|
||||
public String description;
|
||||
public String respo;
|
||||
|
||||
@ManyToMany
|
||||
@JoinTable(
|
||||
name = "ji_user", // Table de liaison
|
||||
joinColumns = @JoinColumn(name = "ji_id"),
|
||||
inverseJoinColumns = @JoinColumn(name = "user_id")
|
||||
)
|
||||
public List<User> respos;
|
||||
public String date;
|
||||
|
||||
@ManyToOne @JoinColumn(name = "site_id") @JsonIgnore public Site site;
|
||||
|
||||
public Ji(String name, String description, String respo, String date,
|
||||
public Ji(String name, String description, List<User> respos, String date,
|
||||
Site site) {
|
||||
this.name = name;
|
||||
this.description = description;
|
||||
this.respo = respo;
|
||||
this.respos = respos;
|
||||
this.date = date;
|
||||
this.site = site;
|
||||
}
|
||||
|
||||
public Ji() {}
|
||||
}
|
||||
|
@ -46,5 +46,5 @@ public class Site {
|
||||
description + "', address='" + address + "'}";
|
||||
}
|
||||
|
||||
public Site() {}
|
||||
//public Site() {}
|
||||
}
|
||||
|
@ -1,11 +1,16 @@
|
||||
package fr.la_banquise.backend.data.model;
|
||||
|
||||
import jakarta.persistence.CascadeType;
|
||||
import jakarta.persistence.Entity;
|
||||
import jakarta.persistence.GeneratedValue;
|
||||
import jakarta.persistence.GenerationType;
|
||||
import jakarta.persistence.Id;
|
||||
import jakarta.persistence.JoinColumn;
|
||||
import jakarta.persistence.JoinTable;
|
||||
import jakarta.persistence.ManyToMany;
|
||||
import jakarta.persistence.SequenceGenerator;
|
||||
import jakarta.persistence.Table;
|
||||
import java.util.List;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@ -15,27 +20,29 @@ import lombok.NoArgsConstructor;
|
||||
@Entity
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Table(name = "tp")
|
||||
public class Tp {
|
||||
@Table(name = "Sujet")
|
||||
public class Sujet {
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
@SequenceGenerator(name = "TpSeq", sequenceName = "tp_id_seq",
|
||||
@SequenceGenerator(name = "SujetSeq", sequenceName = "sujet_id_seq",
|
||||
allocationSize = 1, initialValue = 1)
|
||||
public Long id;
|
||||
public String name;
|
||||
public String description;
|
||||
public String pdfLink;
|
||||
public String respo;
|
||||
public String date;
|
||||
@ManyToMany
|
||||
@JoinTable(
|
||||
name = "sujet_user", // Table de liaison
|
||||
joinColumns = @JoinColumn(name = "sujet_id"),
|
||||
inverseJoinColumns = @JoinColumn(name = "user_id")
|
||||
)
|
||||
public List<User> respos;
|
||||
|
||||
public Tp(String name, String description, String pdfLink, String respo,
|
||||
String date) {
|
||||
public Sujet(String name, String description, String pdfLink,
|
||||
List<User> respos) {
|
||||
this.name = name;
|
||||
this.description = description;
|
||||
this.pdfLink = pdfLink;
|
||||
this.respo = respo;
|
||||
this.date = date;
|
||||
this.respos = respos;
|
||||
}
|
||||
|
||||
public Tp() {}
|
||||
}
|
@ -10,6 +10,7 @@ import jakarta.persistence.Entity;
|
||||
import jakarta.persistence.GeneratedValue;
|
||||
import jakarta.persistence.GenerationType;
|
||||
import jakarta.persistence.Id;
|
||||
import jakarta.persistence.ManyToMany;
|
||||
import jakarta.persistence.OneToMany;
|
||||
import jakarta.persistence.SequenceGenerator;
|
||||
import jakarta.persistence.Table;
|
||||
@ -40,9 +41,15 @@ public class User {
|
||||
@Roles public String role;
|
||||
|
||||
@JsonManagedReference
|
||||
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
|
||||
@OneToMany(mappedBy = "owner", cascade = CascadeType.ALL)
|
||||
public List<Instance> instances;
|
||||
|
||||
@ManyToMany(mappedBy = "respos", cascade = CascadeType.ALL)
|
||||
public List<Sujet> sujetRespo;
|
||||
|
||||
@ManyToMany(mappedBy = "respos", cascade = CascadeType.ALL)
|
||||
public List<Ji> jiRespo;
|
||||
|
||||
public User(String name, String password, String role,
|
||||
List<Instance> instances) {
|
||||
this.name = name;
|
||||
@ -51,5 +58,5 @@ public class User {
|
||||
this.instances = instances;
|
||||
}
|
||||
|
||||
public User() {}
|
||||
//public User() {}
|
||||
}
|
||||
|
@ -0,0 +1,12 @@
|
||||
/**package fr.la_banquise.backend.data.repository;
|
||||
|
||||
import fr.la_banquise.backend.data.model.Container;
|
||||
import io.quarkus.hibernate.orm.panache.PanacheRepository;
|
||||
import jakarta.enterprise.context.ApplicationScoped;
|
||||
|
||||
/**
|
||||
* InstanceRepository
|
||||
|
||||
@ApplicationScoped
|
||||
public class ContainerRepository implements PanacheRepository<Container> {
|
||||
}*/
|
@ -1,6 +1,6 @@
|
||||
package fr.la_banquise.backend.data.repository;
|
||||
|
||||
import fr.la_banquise.backend.data.model.Tp;
|
||||
import fr.la_banquise.backend.data.model.Sujet;
|
||||
import io.quarkus.hibernate.orm.panache.PanacheRepository;
|
||||
import jakarta.enterprise.context.ApplicationScoped;
|
||||
|
||||
@ -8,4 +8,4 @@ import jakarta.enterprise.context.ApplicationScoped;
|
||||
* TpRepository
|
||||
*/
|
||||
@ApplicationScoped
|
||||
public class TpRepository implements PanacheRepository<Tp> {}
|
||||
public class SujetRepository implements PanacheRepository<Sujet> {}
|
@ -2,7 +2,7 @@ package fr.la_banquise.backend.rest;
|
||||
|
||||
import fr.la_banquise.backend.rest.response.DashboardResponse;
|
||||
import fr.la_banquise.backend.services.InstanceService;
|
||||
import fr.la_banquise.backend.services.TpService;
|
||||
import fr.la_banquise.backend.services.SujetService;
|
||||
import io.quarkus.security.identity.SecurityIdentity;
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.ws.rs.GET;
|
||||
@ -22,7 +22,7 @@ public class Endpoints {
|
||||
InstanceService instanceService;
|
||||
|
||||
@Inject
|
||||
TpService tpService;
|
||||
SujetService sujetService;
|
||||
|
||||
@GET
|
||||
@Path("dashboard")
|
||||
@ -30,10 +30,10 @@ public class Endpoints {
|
||||
String username = identity.getPrincipal().getName();
|
||||
DashboardResponse dashboard = new DashboardResponse();
|
||||
if (identity.getRoles().contains("root")) {
|
||||
dashboard.tps = tpService.getAllTpsAdmin();
|
||||
dashboard.tps = sujetService.getAllSujetsAdmin();
|
||||
} else {
|
||||
|
||||
dashboard.tps = tpService.getAllTps(identity.getPrincipal().getName());
|
||||
dashboard.tps = sujetService.getAllSujetsRespo(identity.getPrincipal().getName());
|
||||
}
|
||||
dashboard.instances = instanceService.getAllInstances(username);
|
||||
return Response.ok(dashboard).build();
|
||||
|
@ -27,7 +27,7 @@ public class JiResource {
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public Response listall() {
|
||||
try {
|
||||
List<Ji> ji = jiService.getAllJi();
|
||||
List<Ji> ji = jiService.getAllJiAdmin();
|
||||
return Response.ok(ji).build();
|
||||
} catch (Exception e) {
|
||||
return Response.status(500)
|
||||
@ -45,7 +45,7 @@ public class JiResource {
|
||||
@QueryParam("respo") String respo,
|
||||
@QueryParam("site") String name_site) {
|
||||
try {
|
||||
Ji jsp = jiService.createJi(name, desc, address, respo, name_site);
|
||||
Ji jsp = jiService.createJi(name, desc, address, name_site);
|
||||
return Response.ok(Map.of("created", jsp)).build();
|
||||
} catch (Exception e) {
|
||||
return Response.status(500)
|
||||
|
@ -0,0 +1,45 @@
|
||||
package fr.la_banquise.backend.rest;
|
||||
|
||||
import fr.la_banquise.backend.rest.request.SujetRequest;
|
||||
import fr.la_banquise.backend.services.SujetService;
|
||||
import io.quarkus.security.identity.SecurityIdentity;
|
||||
import jakarta.annotation.security.RolesAllowed;
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.ws.rs.Consumes;
|
||||
import jakarta.ws.rs.GET;
|
||||
import jakarta.ws.rs.POST;
|
||||
import jakarta.ws.rs.Path;
|
||||
import jakarta.ws.rs.Produces;
|
||||
import jakarta.ws.rs.core.MediaType;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
|
||||
/**
|
||||
* TpEndpoints
|
||||
*/
|
||||
@Path("/api/subject")
|
||||
public class SujetEndpoints {
|
||||
|
||||
@Inject SecurityIdentity identity;
|
||||
|
||||
@Inject SujetService sujetService;
|
||||
|
||||
@GET
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public Response getAllSujetsRespo() {
|
||||
if (identity.getRoles().contains("root")) {
|
||||
return Response.ok(sujetService.getAllSujetsAdmin()).build();
|
||||
}
|
||||
return Response
|
||||
.ok(sujetService.getAllSujetsRespo(
|
||||
identity.getPrincipal().getName()))
|
||||
.build();
|
||||
}
|
||||
|
||||
@POST
|
||||
@Consumes(MediaType.APPLICATION_JSON)
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
@RolesAllowed("root")
|
||||
public Response createSujet(SujetRequest sujet) {
|
||||
return Response.ok(sujetService.createSujet(sujet)).build();
|
||||
}
|
||||
}
|
@ -1,56 +0,0 @@
|
||||
package fr.la_banquise.backend.rest;
|
||||
|
||||
import fr.la_banquise.backend.services.TpService;
|
||||
import io.quarkus.security.identity.SecurityIdentity;
|
||||
import fr.la_banquise.backend.rest.request.TpRequest;
|
||||
import jakarta.annotation.security.RolesAllowed;
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.ws.rs.Consumes;
|
||||
import jakarta.ws.rs.GET;
|
||||
import jakarta.ws.rs.POST;
|
||||
import jakarta.ws.rs.Path;
|
||||
import jakarta.ws.rs.PathParam;
|
||||
import jakarta.ws.rs.Produces;
|
||||
import jakarta.ws.rs.core.MediaType;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
|
||||
/**
|
||||
* TpEndpoints
|
||||
*/
|
||||
@Path("/api/tps")
|
||||
public class TpEndpoints {
|
||||
|
||||
@Inject
|
||||
SecurityIdentity identity;
|
||||
|
||||
@Inject
|
||||
TpService tpService;
|
||||
|
||||
@GET
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public Response getAllTps() {
|
||||
if (identity.getRoles().contains("root")) {
|
||||
return Response.ok(tpService.getAllTpsAdmin()).build();
|
||||
}
|
||||
return Response.ok(tpService.getAllTps(identity.getPrincipal().getName())).build();
|
||||
}
|
||||
|
||||
@GET
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
@Path("{id}")
|
||||
public Response getTp(@PathParam("id") Long id) {
|
||||
if (identity.getRoles().contains("root")) {
|
||||
return Response.ok(tpService.getTpAdmin(id)).build();
|
||||
}
|
||||
return Response.ok(tpService.getTp(id, identity.getPrincipal().getName())).build();
|
||||
}
|
||||
|
||||
@POST
|
||||
@Consumes(MediaType.APPLICATION_JSON)
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
@RolesAllowed("root")
|
||||
public Response createTp(TpRequest tp) {
|
||||
System.out.println(tp.date);
|
||||
return Response.ok(tpService.createTp(tp)).build();
|
||||
}
|
||||
}
|
@ -36,7 +36,7 @@ public class UserEndpoints {
|
||||
}
|
||||
|
||||
@GET
|
||||
@RolesAllowed("root")
|
||||
//@RolesAllowed("root")
|
||||
public Response getAllUsers() {
|
||||
return Response.ok(userService.getAllUsers()).build();
|
||||
}
|
||||
@ -49,7 +49,7 @@ public class UserEndpoints {
|
||||
}
|
||||
|
||||
@POST
|
||||
@RolesAllowed("root")
|
||||
//@RolesAllowed("root")
|
||||
public Response createUser(UserRequest user) {
|
||||
return Response.ok(userService.createUser(user)).build();
|
||||
}
|
||||
|
@ -3,7 +3,7 @@ package fr.la_banquise.backend.rest.request;
|
||||
/**
|
||||
* TpRequest
|
||||
*/
|
||||
public class TpRequest {
|
||||
public class SujetRequest {
|
||||
public String title;
|
||||
public String description;
|
||||
public String pdf;
|
@ -3,7 +3,7 @@ package fr.la_banquise.backend.rest.response;
|
||||
import java.util.List;
|
||||
|
||||
import fr.la_banquise.backend.data.model.Instance;
|
||||
import fr.la_banquise.backend.data.model.Tp;
|
||||
import fr.la_banquise.backend.data.model.Sujet;
|
||||
import io.quarkus.runtime.annotations.RegisterForReflection;
|
||||
import lombok.AllArgsConstructor;
|
||||
|
||||
@ -12,6 +12,6 @@ import lombok.AllArgsConstructor;
|
||||
*/
|
||||
@RegisterForReflection
|
||||
public class DashboardResponse {
|
||||
public List<Tp> tps;
|
||||
public List<Sujet> tps;
|
||||
public List<Instance> instances;
|
||||
}
|
||||
|
@ -1,8 +1,7 @@
|
||||
package fr.la_banquise.backend.rest.response;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import io.quarkus.runtime.annotations.RegisterForReflection;
|
||||
import java.util.Set;
|
||||
import lombok.AllArgsConstructor;
|
||||
|
||||
/**
|
||||
|
@ -1,27 +1,28 @@
|
||||
package fr.la_banquise.backend.rest.response;
|
||||
|
||||
import fr.la_banquise.backend.data.model.User;
|
||||
import io.quarkus.runtime.annotations.RegisterForReflection;
|
||||
import io.smallrye.common.constraint.Nullable;
|
||||
import java.util.List;
|
||||
import lombok.AllArgsConstructor;
|
||||
|
||||
/**
|
||||
* PracticalResponse
|
||||
*/
|
||||
//@AllArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@RegisterForReflection
|
||||
public class PracticalResponse {
|
||||
public String name;
|
||||
public String description;
|
||||
public String pdfLink;
|
||||
public String respo;
|
||||
public String endDate;
|
||||
public List<User> respos;
|
||||
|
||||
@Nullable public String instanceName;
|
||||
@Nullable public String pwd;
|
||||
@Nullable public String ssh;
|
||||
@Nullable public Long port;
|
||||
|
||||
public PracticalResponse(String name, String description, String pdfLink,
|
||||
/*public PracticalResponse(String name, String description, String pdfLink,
|
||||
String respo, String date,
|
||||
@Nullable String InstanceName,
|
||||
@Nullable String pwd, @Nullable String ssh,
|
||||
@ -35,5 +36,5 @@ public class PracticalResponse {
|
||||
this.port = port;
|
||||
this.ssh = ssh;
|
||||
this.pwd = pwd;
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
@ -0,0 +1,181 @@
|
||||
/**package fr.la_banquise.backend.services;
|
||||
|
||||
import com.github.dockerjava.api.DockerClient;
|
||||
import com.github.dockerjava.api.command.CreateContainerResponse;
|
||||
import com.github.dockerjava.api.command.InspectContainerResponse;
|
||||
// import com.github.dockerjava.api.model.Container;
|
||||
import com.github.dockerjava.api.model.ContainerPort;
|
||||
import com.github.dockerjava.api.model.ExposedPort;
|
||||
import com.github.dockerjava.api.model.HostConfig;
|
||||
import com.github.dockerjava.api.model.PortBinding;
|
||||
import com.github.dockerjava.api.model.Ports;
|
||||
import fr.la_banquise.backend.data.model.Container;
|
||||
import jakarta.enterprise.context.ApplicationScoped;
|
||||
import jakarta.inject.Inject;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@ApplicationScoped
|
||||
public class ContainerService {
|
||||
|
||||
@Inject DockerClient dockerClient;
|
||||
|
||||
public String createAndStartNginx() {
|
||||
ExposedPort tcp80 = ExposedPort.tcp(80);
|
||||
|
||||
Ports portBindings = new Ports();
|
||||
portBindings.bind(tcp80, Ports.Binding.bindPort(8081));
|
||||
|
||||
HostConfig hostConfig =
|
||||
HostConfig.newHostConfig().withPortBindings(portBindings);
|
||||
Map<String, String> labels = new HashMap<>();
|
||||
labels.put("test", "banquise");
|
||||
labels.put("environment", "development");
|
||||
labels.put("version", "1.0");
|
||||
labels.put("created-by", "java-docker-api");
|
||||
|
||||
CreateContainerResponse container =
|
||||
dockerClient.createContainerCmd("nginx:latest")
|
||||
.withName("my-nginx")
|
||||
.withLabels(labels)
|
||||
.withExposedPorts(tcp80)
|
||||
.withHostConfig(hostConfig)
|
||||
.exec();
|
||||
|
||||
dockerClient.startContainerCmd(container.getId()).exec();
|
||||
return container.getId();
|
||||
}
|
||||
|
||||
public Container createContainer() {
|
||||
Container container =
|
||||
dockerClient
|
||||
.createContainerCmd("nginx:latest")
|
||||
|
||||
// dockerClient.startContainerCmd(container.getId()).exec();
|
||||
return container.createContainer();
|
||||
}
|
||||
/*
|
||||
public String listAllContainers() {
|
||||
StringBuilder json = new StringBuilder();
|
||||
List<Container> containers = dockerClient.listContainersCmd()
|
||||
.withShowAll(true)
|
||||
.exec();
|
||||
|
||||
json.append("[");
|
||||
|
||||
for (int i = 0; i < containers.size(); i++) {
|
||||
Container container = containers.get(i);
|
||||
|
||||
json.append("{");
|
||||
json.append("\"name\":\"").append(container.getNames()[0].substring(1)).append("\",");
|
||||
json.append("\"id\":\"").append(container.getId()).append("\",");
|
||||
json.append("\"image\":\"").append(container.getImage()).append("\",");
|
||||
json.append("\"status\":\"").append(container.getStatus()).append("\",");
|
||||
|
||||
// Ports
|
||||
InspectContainerResponse inspectResponse =
|
||||
dockerClient.inspectContainerCmd(container.getId()).exec();
|
||||
json.append("\"ports\":[");
|
||||
if (container.getPorts() != null && container.getPorts().length > 0) {
|
||||
for (int j = 0; j < .length; j+=2) {
|
||||
ContainerPort port = container.getPorts()[j];
|
||||
json.append("[\"");
|
||||
json.append(port.getPrivatePort()).append("->").append(port.getPublicPort()).append("/"+port.getType()+"\",\"");
|
||||
json.append(port.getIp()).append(",").append((container.getPorts()[j+1]).getIp());
|
||||
if (port.getType() != null) {
|
||||
json.append("/").append(port.getType());
|
||||
}
|
||||
if (port.getPublicPort() != null) {
|
||||
json.append("->").append(port.getPublicPort());
|
||||
}*
|
||||
json.append("\"]");
|
||||
if (j < container.getPorts().length - 2) {
|
||||
json.append(",");
|
||||
}
|
||||
}
|
||||
}
|
||||
json.append("]");
|
||||
|
||||
// Ports
|
||||
String ports = "[]";
|
||||
try {
|
||||
InspectContainerResponse inspectResponse =
|
||||
dockerClient.inspectContainerCmd(container.getId()).exec(); if
|
||||
(inspectResponse.getConfig().getExposedPorts() != null) { ports =
|
||||
inspectResponse.getConfig().getExposedPorts().toString();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
// Fallback vers les ports runtime si inspect échoue
|
||||
if (container.getPorts() != null && container.getPorts().length
|
||||
> 0) { ports = java.util.Arrays.toString(container.getPorts());
|
||||
}
|
||||
}
|
||||
json.append("\"ports\":\"").append(ports).append("\"");
|
||||
json.append("}");
|
||||
if (i < containers.size() - 1) {
|
||||
json.append(",");
|
||||
}
|
||||
|
||||
json.append("}");
|
||||
|
||||
if (i < containers.size() - 1) {
|
||||
json.append(",");
|
||||
}
|
||||
}
|
||||
|
||||
json.append("]");
|
||||
return json.toString();
|
||||
}
|
||||
public String listAllContainers() {
|
||||
StringBuilder json = new StringBuilder();
|
||||
List<Container> containers = dockerClient.listContainersCmd()
|
||||
.withShowAll(true)
|
||||
.exec();
|
||||
json.append("[");
|
||||
for (int i = 0; i < containers.size(); i++) {
|
||||
Container container = containers.get(i);
|
||||
// Ports
|
||||
List<String> portsList = new ArrayList<>();
|
||||
try {
|
||||
var inspectResponse =
|
||||
dockerClient.inspectContainerCmd(container.getId()).exec(); if
|
||||
(inspectResponse.getConfig().getExposedPorts() != null) { var exposedPorts =
|
||||
inspectResponse.getConfig().getExposedPorts(); int count = 0; for (var port
|
||||
: exposedPorts) { if (count > 0) portsList.append(",");
|
||||
portsList.append(String.format("\"%s\"",
|
||||
port.toString())); count = 1;
|
||||
}
|
||||
portsList.append("]");
|
||||
ports = portsList.toString();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
// Fallback vers les ports runtime si inspect échoue
|
||||
if (container.getPorts() != null && container.getPorts().length
|
||||
> 0) { ports = java.util.Arrays.toString(container.getPorts());
|
||||
}
|
||||
}
|
||||
|
||||
//json.append(containerJson);
|
||||
|
||||
if (i < containers.size() - 1) {
|
||||
json.append(",");
|
||||
}
|
||||
}
|
||||
json.append("]");
|
||||
return json.toString();
|
||||
}/
|
||||
public String listAllContainers() { return ""; }
|
||||
|
||||
public void start(String containerId) {
|
||||
dockerClient.startContainerCmd(containerId).exec();
|
||||
}
|
||||
|
||||
public void stop(String containerId) {
|
||||
dockerClient.stopContainerCmd(containerId).exec();
|
||||
}
|
||||
|
||||
public void remove(String containerId) {
|
||||
dockerClient.removeContainerCmd(containerId).exec();
|
||||
}
|
||||
}*/
|
@ -1,16 +1,15 @@
|
||||
package fr.la_banquise.backend.services;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import fr.la_banquise.backend.data.model.Instance;
|
||||
import fr.la_banquise.backend.data.model.Tp;
|
||||
import fr.la_banquise.backend.data.model.Sujet;
|
||||
import fr.la_banquise.backend.data.model.User;
|
||||
import fr.la_banquise.backend.data.repository.InstanceRepository;
|
||||
import fr.la_banquise.backend.data.repository.TpRepository;
|
||||
import fr.la_banquise.backend.data.repository.SujetRepository;
|
||||
import fr.la_banquise.backend.data.repository.UserRepository;
|
||||
import jakarta.enterprise.context.ApplicationScoped;
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.transaction.Transactional;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* InstanceService
|
||||
@ -18,14 +17,11 @@ import jakarta.transaction.Transactional;
|
||||
@ApplicationScoped
|
||||
public class InstanceService {
|
||||
|
||||
@Inject
|
||||
InstanceRepository instanceRepository;
|
||||
@Inject InstanceRepository instanceRepository;
|
||||
|
||||
@Inject
|
||||
UserRepository userRepository;
|
||||
@Inject UserRepository userRepository;
|
||||
|
||||
@Inject
|
||||
TpRepository tpRepository;
|
||||
@Inject SujetRepository sujetRepository;
|
||||
|
||||
public List<Instance> getAllInstances() {
|
||||
return instanceRepository.findAll().list();
|
||||
@ -41,18 +37,20 @@ public class InstanceService {
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public Instance createInstance(String name, String ssh, String pwd, Long port, String username, Long tpId) {
|
||||
public Instance createInstance(String name, String ssh, String pwd,
|
||||
Long port, String username, Long sujetId) {
|
||||
User user = userRepository.findByName(username);
|
||||
Tp tp = tpRepository.findById(tpId);
|
||||
Instance instance = new Instance(name, ssh, pwd, port, user, tp);
|
||||
Sujet sujet = sujetRepository.findById(sujetId);
|
||||
Instance instance = new Instance(name, port, user, sujet);
|
||||
instanceRepository.persist(instance);
|
||||
return instance;
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public Instance createInstance(String name, String ssh, String pwd, Long port, User user, Long tpId) {
|
||||
Tp tp = tpRepository.findById(tpId);
|
||||
Instance instance = new Instance(name, ssh, pwd, port, user, tp);
|
||||
public Instance createInstance(String name, String ssh, String pwd,
|
||||
Long port, User user, Long sujetId) {
|
||||
Sujet sujet = sujetRepository.findById(sujetId);
|
||||
Instance instance = new Instance(name, port, user, sujet);
|
||||
instanceRepository.persist(instance);
|
||||
return instance;
|
||||
}
|
||||
|
@ -2,30 +2,42 @@ package fr.la_banquise.backend.services;
|
||||
|
||||
import fr.la_banquise.backend.data.model.Ji;
|
||||
import fr.la_banquise.backend.data.model.Site;
|
||||
import fr.la_banquise.backend.data.model.User;
|
||||
import fr.la_banquise.backend.data.repository.JiRepository;
|
||||
import fr.la_banquise.backend.data.repository.UserRepository;
|
||||
import jakarta.enterprise.context.ApplicationScoped;
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.transaction.Transactional;
|
||||
import jakarta.ws.rs.core.SecurityContext;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@ApplicationScoped
|
||||
public class JiService {
|
||||
|
||||
@Inject JiRepository jiRepository;
|
||||
|
||||
@Inject UserRepository userRepository;
|
||||
@Inject SiteService siteService;
|
||||
@Inject SecurityContext security;
|
||||
|
||||
@Transactional
|
||||
public Ji createJi(String name, String description, String address,
|
||||
String respo, String site_name) {
|
||||
String site_name) {
|
||||
Site site = siteService.getSiteByName(site_name);
|
||||
Ji ji = new Ji(name, description, address, respo, site);
|
||||
User currentUser =
|
||||
userRepository.findByName(security.getUserPrincipal().getName());
|
||||
Ji ji = new Ji(name, description, List.of(currentUser), "date", site);
|
||||
jiRepository.persist(ji);
|
||||
siteService.addJi(site, ji);
|
||||
return ji;
|
||||
}
|
||||
|
||||
public List<Ji> getAllJi() { return jiRepository.listAll(); }
|
||||
public List<Ji> getAllJiAdmin() { return jiRepository.listAll(); }
|
||||
|
||||
public List<Ji> getAllJiRespo(String username) {
|
||||
User user = userRepository.findByName(username);
|
||||
return user.jiRespo;
|
||||
}
|
||||
|
||||
public Ji getJiByName(String name) {
|
||||
return jiRepository.find("name", name).firstResult();
|
||||
|
@ -0,0 +1,81 @@
|
||||
package fr.la_banquise.backend.services;
|
||||
|
||||
import fr.la_banquise.backend.data.model.Instance;
|
||||
import fr.la_banquise.backend.data.model.Sujet;
|
||||
import fr.la_banquise.backend.data.model.User;
|
||||
import fr.la_banquise.backend.data.repository.InstanceRepository;
|
||||
import fr.la_banquise.backend.data.repository.SujetRepository;
|
||||
import fr.la_banquise.backend.data.repository.UserRepository;
|
||||
import fr.la_banquise.backend.rest.request.SujetRequest;
|
||||
import fr.la_banquise.backend.rest.response.PracticalResponse;
|
||||
import jakarta.enterprise.context.ApplicationScoped;
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.transaction.Transactional;
|
||||
import jakarta.ws.rs.core.SecurityContext;
|
||||
import java.text.Collator;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* TpService
|
||||
*/
|
||||
@ApplicationScoped
|
||||
public class SujetService {
|
||||
|
||||
@Inject SecurityContext security;
|
||||
|
||||
@Inject SujetRepository sujetRepository;
|
||||
|
||||
@Inject UserRepository userRepository;
|
||||
|
||||
@Inject InstanceRepository instanceRepository;
|
||||
|
||||
public List<Sujet> getAllSujetsAdmin() { return sujetRepository.listAll(); }
|
||||
|
||||
public List<Sujet> getAllSujetsRespo(String username) {
|
||||
User user = userRepository.findByName(username);
|
||||
return user.sujetRespo;
|
||||
}
|
||||
|
||||
/*public PracticalResponse getTp(Long id, String username) {
|
||||
User user = userRepository.findByName(username);
|
||||
Sujet sujet = sujetRepository.findById(id);
|
||||
Instance instance =
|
||||
instanceRepository.find("user = ?1 AND tp = ?2", user, sujet)
|
||||
.firstResult();
|
||||
PracticalResponse res = new PracticalResponse(
|
||||
sujet.name, sujet.description, sujet.pdfLink, sujet.respos,
|
||||
instance.name, instance.pwd, instance.ssh, instance.port);
|
||||
return res;
|
||||
}
|
||||
|
||||
/*public PracticalResponse getTpAdmin(Long id) {
|
||||
Sujet sujet = sujetRepository.findById(id);
|
||||
return new PracticalResponse(sujet.name, sujet.description,
|
||||
sujet.pdfLink, sujet.respos, "", "", "",
|
||||
0L);
|
||||
}*/
|
||||
|
||||
@Transactional
|
||||
public Sujet createSujet(SujetRequest requestSujet) {
|
||||
User currentUser =
|
||||
userRepository.findByName(security.getUserPrincipal().getName());
|
||||
Sujet sujet = new Sujet(requestSujet.title, requestSujet.description,
|
||||
requestSujet.pdf, List.of(currentUser));
|
||||
sujetRepository.persist(sujet);
|
||||
return sujet;
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void deleteSujet(Long id) {
|
||||
sujetRepository.deleteById(id);
|
||||
}
|
||||
|
||||
/*
|
||||
* TODO: Seuls les respos du sujet et root doivent pouvoir avoir acces
|
||||
* @Transactional
|
||||
public Sujet updateSujet(Long id) {
|
||||
Sujet sujet = sujetRepository.findById(id);
|
||||
return sujet;
|
||||
}*/
|
||||
}
|
@ -1,82 +0,0 @@
|
||||
package fr.la_banquise.backend.services;
|
||||
|
||||
import java.text.Collator;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import fr.la_banquise.backend.data.model.Instance;
|
||||
import fr.la_banquise.backend.data.model.Tp;
|
||||
import fr.la_banquise.backend.data.model.User;
|
||||
import fr.la_banquise.backend.data.repository.InstanceRepository;
|
||||
import fr.la_banquise.backend.data.repository.TpRepository;
|
||||
import fr.la_banquise.backend.data.repository.UserRepository;
|
||||
import fr.la_banquise.backend.rest.request.TpRequest;
|
||||
import fr.la_banquise.backend.rest.response.PracticalResponse;
|
||||
import jakarta.enterprise.context.ApplicationScoped;
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.transaction.Transactional;
|
||||
import jakarta.ws.rs.core.SecurityContext;
|
||||
|
||||
/**
|
||||
* TpService
|
||||
*/
|
||||
@ApplicationScoped
|
||||
public class TpService {
|
||||
|
||||
@Inject
|
||||
SecurityContext security;
|
||||
|
||||
@Inject
|
||||
TpRepository tpRepository;
|
||||
|
||||
@Inject
|
||||
UserRepository userRepository;
|
||||
|
||||
@Inject
|
||||
InstanceRepository instanceRepository;
|
||||
|
||||
public List<Tp> getAllTpsAdmin() {
|
||||
return tpRepository.listAll();
|
||||
}
|
||||
|
||||
public List<Tp> getAllTps(String username) {
|
||||
User user = userRepository.findByName(username);
|
||||
List<Instance> instances = instanceRepository.find("user = ?1 AND tp IS NOT NULL", user).list();
|
||||
return tpRepository.find("id in ?1", instances.stream().map(i -> i.tp.id).collect(Collectors.toList())).list();
|
||||
}
|
||||
|
||||
public PracticalResponse getTp(Long id, String username) {
|
||||
User user = userRepository.findByName(username);
|
||||
Tp tp = tpRepository.findById(id);
|
||||
Instance instance = instanceRepository.find("user = ?1 AND tp = ?2", user, tp).firstResult();
|
||||
PracticalResponse res = new PracticalResponse(tp.name, tp.description, tp.pdfLink, tp.respo, tp.date,
|
||||
instance.name,
|
||||
instance.pwd, instance.ssh, instance.port);
|
||||
return res;
|
||||
}
|
||||
|
||||
/* public PracticalResponse getTpAdmin(Long id) {
|
||||
Tp tp = tpRepository.findById(id);
|
||||
return new PracticalResponse(tp.name, tp.description, tp.pdfLink, tp.respo,
|
||||
"",
|
||||
"", "", 0L);
|
||||
}*/
|
||||
|
||||
/*@Transactional
|
||||
public Tp createTp(TpRequest requestTp) {
|
||||
Tp tp = new Tp(requestTp.title, requestTp.description, requestTp.pdf, security.getUserPrincipal().getName(), requestTp.date);
|
||||
tpRepository.persist(tp);
|
||||
return tp;
|
||||
}*/
|
||||
|
||||
@Transactional
|
||||
public void deleteTp(Long id) {
|
||||
tpRepository.deleteById(id);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public Tp updateTp(Long id) {
|
||||
Tp tp = tpRepository.findById(id);
|
||||
return tp;
|
||||
}
|
||||
}
|
@ -58,7 +58,7 @@ public class UserService {
|
||||
public void deleteJDMI() {
|
||||
for (Instance instance : instanceService.getAllInstances()) {
|
||||
instanceService.deleteInstance(instance.id);
|
||||
userRepository.deleteById(instance.user.id);
|
||||
userRepository.deleteById(instance.owner.id);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -38,4 +38,4 @@ quarkus.quinoa.dev-server.port=5173
|
||||
quarkus.quinoa.enable-spa-routing=true
|
||||
|
||||
quarkus.docker.docker-host=unix:///run/user/1000/docker.sock
|
||||
quarkus.security.auth.enabled-in-dev-mode=false
|
||||
#quarkus.security.auth.enabled-in-dev-mode=false
|
||||
|
Loading…
x
Reference in New Issue
Block a user