package com.constellio.app.client.services;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.Invocation.Builder;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.Form;
import javax.ws.rs.core.MediaType;
import org.glassfish.jersey.jackson.JacksonFeature;
import com.constellio.app.client.AdminServicesConstants;
import com.constellio.app.client.entities.UserResource;
public class AdminServicesSession {
String serviceKey;
String token;
WebTarget target;
private AdminServicesSession(WebTarget target, String token, String serviceKey) {
this.target = target;
this.token = token;
this.serviceKey = serviceKey;
}
public static AdminServicesSession connect(String url, String serviceKey, String user, String password) {
javax.ws.rs.client.Client client = ClientBuilder.newClient();
WebTarget target = client.register(JacksonFeature.class).target(url);
Form form = new Form();
form.param("username", user);
form.param("password", password);
String token = target.path("session").path("getToken").request(MediaType.TEXT_PLAIN)
.header(AdminServicesConstants.SERVICE_KEY, serviceKey)
.post(Entity.entity(form, MediaType.APPLICATION_FORM_URLENCODED_TYPE), String.class);
return new AdminServicesSession(target, token, serviceKey);
}
public String getNewToken() {
return requestString("getNewToken").get(String.class);
}
public UserResource schema() {
return requestJson("schema").get(UserResource.class);
}
public void removeToken() {
requestJson("removeToken").method("POST");
}
public CollectionServicesClient newCollectionServices() {
return new CollectionServicesClient(target.path("collections"), token, serviceKey);
}
public UserServicesClient newUserServices() {
return new UserServicesClient(target.path("users"), token, serviceKey);
}
public SecurityManagementDriver manageCollectionSecurity(String collection) {
return new SecurityManagementDriver(target.path("security"), token, serviceKey, collection);
}
public SchemaServicesClient newSchemaServicesForCollection(String collection) {
return new SchemaServicesClient(target.path("schemas"), token, serviceKey, collection);
}
public String getToken() {
return token;
}
public String getServiceKey() {
return serviceKey;
}
public WebTarget getTarget() {
return target;
}
private Builder requestJson(String service) {
return target.path("session").path(service).request(MediaType.APPLICATION_JSON_TYPE)
.header(AdminServicesConstants.AUTH_TOKEN, token).header(AdminServicesConstants.SERVICE_KEY, serviceKey);
}
private Builder requestString(String service) {
return target.path("session").path(service).request(MediaType.TEXT_PLAIN)
.header(AdminServicesConstants.AUTH_TOKEN, token).header(AdminServicesConstants.SERVICE_KEY, serviceKey);
}
}