[Users]: 1. Update Uikit. 2. Change regisered service api. 3. fix empty registered service list.

This commit is contained in:
Konstantinos Triantafyllou 2020-11-09 18:35:29 +00:00
parent a60b3fedd9
commit 8bb0f9e44f
32 changed files with 155 additions and 379 deletions

View File

@ -53,7 +53,6 @@ public class RegisterServiceServlet extends HttpServlet {
String idParam = request.getParameter("id"); String idParam = request.getParameter("id");
String serviceName = (String) request.getSession().getAttribute("first_name"); String serviceName = (String) request.getSession().getAttribute("first_name");
String description = (String) request.getSession().getAttribute("description");
String keyType = (String) request.getSession().getAttribute("key_radio"); String keyType = (String) request.getSession().getAttribute("key_radio");
String jwksUri = (String) request.getSession().getAttribute("uri"); String jwksUri = (String) request.getSession().getAttribute("uri");
String jwksString = (String) request.getSession().getAttribute("value"); String jwksString = (String) request.getSession().getAttribute("value");
@ -66,9 +65,9 @@ public class RegisterServiceServlet extends HttpServlet {
RegisteredService registeredService = registeredServicesUtils.getRegisteredServiceDao().fetchRegisteredServiceById(id); RegisteredService registeredService = registeredServicesUtils.getRegisteredServiceDao().fetchRegisteredServiceById(id);
if (registeredService != null && registeredServicesUtils.isAuthorized(userid, id)) { if (registeredService != null && registeredServicesUtils.isAuthorized(userid, id)) {
ServiceResponse serviceResponse = tokenUtils.getRegisteredService(registeredService.getAai_id(), authentication.getAccessTokenValue()); ServiceResponse serviceResponse = tokenUtils.getRegisteredService(registeredService.getClientId(), registeredService.getRegistrationAccessToken());
updateFormFields(request, serviceName, description, keyType, serviceResponse); updateFormFields(request, serviceName, keyType, serviceResponse);
} else { } else {
if (registeredService == null) { if (registeredService == null) {
@ -107,17 +106,13 @@ public class RegisterServiceServlet extends HttpServlet {
request.getRequestDispatcher("./registerService.jsp").include(request, response); request.getRequestDispatcher("./registerService.jsp").include(request, response);
} }
private void updateFormFields(HttpServletRequest request, String serviceName, String description, String keyType, ServiceResponse serviceResponse) { private void updateFormFields(HttpServletRequest request, String serviceName, String keyType, ServiceResponse serviceResponse) {
System.out.println("UPDATING FORM"); System.out.println("UPDATING FORM");
if (serviceName == null || serviceName.trim().isEmpty()) { if (serviceName == null || serviceName.trim().isEmpty()) {
request.getSession().setAttribute("first_name", serviceResponse.getClientName()); request.getSession().setAttribute("first_name", serviceResponse.getClientName());
} }
if (description == null || description.trim().isEmpty()) {
request.getSession().setAttribute("description", serviceResponse.getClientDescription());
}
if (keyType == null || keyType.trim().isEmpty()) { if (keyType == null || keyType.trim().isEmpty()) {
System.out.println("Service response URI " + serviceResponse.getJwksUri()); System.out.println("Service response URI " + serviceResponse.getJwksUri());
if (serviceResponse.getJwksUri() != null) { if (serviceResponse.getJwksUri() != null) {
@ -160,8 +155,6 @@ public class RegisterServiceServlet extends HttpServlet {
request.getSession().setAttribute("first_name_error", true); request.getSession().setAttribute("first_name_error", true);
canProceed = false; canProceed = false;
} }
String description = request.getParameter("description").trim();
String keyType = request.getParameter("key_radio").trim(); String keyType = request.getParameter("key_radio").trim();
String jwksUri = null; String jwksUri = null;
String jwksString = null; String jwksString = null;
@ -197,18 +190,13 @@ public class RegisterServiceServlet extends HttpServlet {
canProceed = false; canProceed = false;
} }
} }
String userid = authentication.getSub(); String userid = authentication.getSub();
String email = authentication.getUserInfo().getEmail(); String email = authentication.getUserInfo().getEmail();
String accessToken = authentication.getAccessTokenValue();
String serverRequestJSON; String serverRequestJSON;
if (keyType.equals("uri")){ if (keyType.equals("uri")){
serverRequestJSON = createServiceJson(name, description, email, jwksUri); serverRequestJSON = createServiceJson(name, email, jwksUri);
} else { } else {
serverRequestJSON = createServiceJson(name, description, email, jwks); serverRequestJSON = createServiceJson(name, email, jwks);
} }
System.out.println("SERVER JSON " + serverRequestJSON); System.out.println("SERVER JSON " + serverRequestJSON);
@ -224,18 +212,18 @@ public class RegisterServiceServlet extends HttpServlet {
checkNumberOfRegisteredServices(request, response, authentication); checkNumberOfRegisteredServices(request, response, authentication);
serverMessage = tokenUtils.registerService(serverRequestJSON, accessToken); serverMessage = tokenUtils.registerService(serverRequestJSON);
logger.debug(serverMessage);
if (serverMessage == null) { if (serverMessage == null) {
request.getSession().setAttribute("message", "There was an error registering your service. Please try again later."); request.getSession().setAttribute("message", "There was an error registering your service. Please try again later.");
response.sendRedirect("./registeredServices"); response.sendRedirect("./registeredServices");
return; return;
} }
serviceResponse = new Gson().fromJson(serverMessage, ServiceResponse.class); serviceResponse = new Gson().fromJson(serverMessage, ServiceResponse.class);
String aai_id = serviceResponse.getId(); String client_id = serviceResponse.getClientId();
String owner = userid; String owner = userid;
RegisteredService registeredService = new RegisteredService(aai_id, owner, name); RegisteredService registeredService = new RegisteredService(client_id, owner, name, serviceResponse.getRegistrationAccessToken());
try { try {
registeredServicesUtils.addRegistedService(registeredService); registeredServicesUtils.addRegistedService(registeredService);
@ -267,15 +255,15 @@ public class RegisterServiceServlet extends HttpServlet {
RegisteredService registeredService = null; RegisteredService registeredService = null;
registeredService = registeredServicesUtils.getRegisteredServiceDao().fetchRegisteredServiceById(serviceIdInt); registeredService = registeredServicesUtils.getRegisteredServiceDao().fetchRegisteredServiceById(serviceIdInt);
if (registeredService != null && registeredService.getAai_id() != null) { if (registeredService != null && registeredService.getClientId() != null) {
serviceResponse = tokenUtils.getRegisteredService(registeredService.getAai_id(), accessToken); serviceResponse = tokenUtils.getRegisteredService(registeredService.getClientId(), registeredService.getRegistrationAccessToken());
HttpResponse resp = tokenUtils.updateService(registeredService.getAai_id(), serverRequestJSON, accessToken); HttpResponse resp = tokenUtils.updateService(registeredService.getClientId(), serverRequestJSON, registeredService.getRegistrationAccessToken());
if (resp.getStatusLine().getStatusCode()==200) { if (resp.getStatusLine().getStatusCode()==200) {
System.out.println("NAME >>>>" + name); System.out.println("NAME >>>>" + name);
registeredService.setName(name); registeredService.setName(name);
System.out.println("AAI ID " + registeredService.getAai_id()); System.out.println("Client Id " + registeredService.getClientId());
try { try {
registeredServicesUtils.getRegisteredServiceDao().update(registeredService); registeredServicesUtils.getRegisteredServiceDao().update(registeredService);
} catch (SQLException sqle) { } catch (SQLException sqle) {
@ -312,7 +300,6 @@ public class RegisterServiceServlet extends HttpServlet {
} else { } else {
//something is wrong with the form and the error messages will appear //something is wrong with the form and the error messages will appear
request.getSession().setAttribute("first_name", name); request.getSession().setAttribute("first_name", name);
request.getSession().setAttribute("description", description);
request.getSession().setAttribute("key_radio", keyType); request.getSession().setAttribute("key_radio", keyType);
request.getSession().setAttribute("uri", jwksUri); request.getSession().setAttribute("uri", jwksUri);
request.getSession().setAttribute("value", jwksString); request.getSession().setAttribute("value", jwksString);
@ -371,10 +358,9 @@ public class RegisterServiceServlet extends HttpServlet {
} }
} }
private static String createServiceJson(String name, String description, String email, String jwksURI) { private static String createServiceJson(String name, String email, String jwksURI) {
ServiceRequest serviceJSON = new ServiceRequest(); ServiceRequest serviceJSON = new ServiceRequest();
serviceJSON.setClientName(name); serviceJSON.setClientName(name);
serviceJSON.setClientDescription(description);
serviceJSON.setContacts(new String[]{email}); serviceJSON.setContacts(new String[]{email});
serviceJSON.setJwksUri(jwksURI); serviceJSON.setJwksUri(jwksURI);
@ -385,12 +371,10 @@ public class RegisterServiceServlet extends HttpServlet {
return gson.toJson(serviceJSON); return gson.toJson(serviceJSON);
} }
private static String createServiceJson(String name, String description, String email, Jwks jwks) { private static String createServiceJson(String name, String email, Jwks jwks) {
ServiceRequest serviceJSON = new ServiceRequest(); ServiceRequest serviceJSON = new ServiceRequest();
serviceJSON.setClientName(name); serviceJSON.setClientName(name);
serviceJSON.setClientDescription(description);
serviceJSON.setContacts(new String[]{email}); serviceJSON.setContacts(new String[]{email});
serviceJSON.setJwksType("VAL");
serviceJSON.setJwks(jwks); serviceJSON.setJwks(jwks);
GsonBuilder builder = new GsonBuilder(); GsonBuilder builder = new GsonBuilder();

View File

@ -57,15 +57,14 @@ public class RegisteredServicesServlet extends HttpServlet {
getRegisteredServiceDao().fetchAllRegisteredServicesByOwner(userId); getRegisteredServiceDao().fetchAllRegisteredServicesByOwner(userId);
System.out.println("LOAD REGISTERED SERVICES. " + registeredServices.size()); System.out.println("LOAD REGISTERED SERVICES. " + registeredServices.size());
if (registeredServices== null || registeredServices.isEmpty()) { if (registeredServices.isEmpty()) {
request.getSession().setAttribute("showEmptyList", true); request.getSession().setAttribute("showEmptyList", true);
} else { } else {
Map<String, ServiceResponse> serviceResponses = new HashMap<>(); Map<String, ServiceResponse> serviceResponses = new HashMap<>();
Map<String, String> serviceKey = new HashMap<>(); Map<String, String> serviceKey = new HashMap<>();
for (RegisteredService registeredService:registeredServices) { for (RegisteredService registeredService:registeredServices) {
ServiceResponse serviceResponse = tokenUtils.getRegisteredService(registeredService.getAai_id(),authentication.getAccessTokenValue()); ServiceResponse serviceResponse = tokenUtils.getRegisteredService(registeredService.getClientId(),registeredService.getRegistrationAccessToken());
serviceResponses.put(registeredService.getId(), serviceResponse); serviceResponses.put(registeredService.getId(), serviceResponse);
serviceKey.put(registeredService.getId(), extractPublicKeySet(serviceResponse)); serviceKey.put(registeredService.getId(), extractPublicKeySet(serviceResponse));
} }
@ -79,8 +78,8 @@ public class RegisteredServicesServlet extends HttpServlet {
request.getSession().setAttribute("services", serviceResponses); request.getSession().setAttribute("services", serviceResponses);
request.getSession().setAttribute("keys", serviceKey); request.getSession().setAttribute("keys", serviceKey);
request.getSession().setAttribute("registeredServices", registeredServices);
} }
request.getSession().setAttribute("registeredServices", registeredServices);
} catch (SQLException sqle) { } catch (SQLException sqle) {
logger.error("Error fetching registered services for user " + userId , sqle); logger.error("Error fetching registered services for user " + userId , sqle);
@ -126,13 +125,12 @@ public class RegisteredServicesServlet extends HttpServlet {
return; return;
} }
String aai_id = registeredService.getAai_id(); HttpResponse resp = tokenUtils.deleteService(registeredService.getClientId(), registeredService.getRegistrationAccessToken());
HttpResponse resp = tokenUtils.deleteService(aai_id, authentication.getAccessTokenValue());
int statusCode = resp.getStatusLine().getStatusCode(); int statusCode = resp.getStatusLine().getStatusCode();
System.out.println("STATUS CODE " + statusCode); System.out.println("STATUS CODE " + statusCode);
if (statusCode != 200) { if (statusCode != 204) {
logger.error("Unable to delete the service. Status code was " + statusCode); logger.error("Unable to delete the service. Status code was " + statusCode);
request.getSession().setAttribute("message", "Fail to delete the service. Status " + statusCode); request.getSession().setAttribute("message", "Fail to delete the service. Status " + statusCode);
System.out.println("AAI blocked"); System.out.println("AAI blocked");
@ -157,9 +155,6 @@ public class RegisteredServicesServlet extends HttpServlet {
} }
private boolean reachedMaximumNumberOfServices(List<RegisteredService> registeredServices) { private boolean reachedMaximumNumberOfServices(List<RegisteredService> registeredServices) {
if (registeredServices.size() == 5) { return registeredServices.size() == 5;
return true;
}
return false;
} }
} }

View File

@ -3,71 +3,56 @@ package eu.dnetlib.openaire.usermanagement;
import java.io.Serializable; import java.io.Serializable;
public class ServiceRequest { public class ServiceRequest {
String clientName; String client_name;
String clientId; String client_id;
String[] redirectUris = new String[]{}; String logo_uri;
String clientDescription; String policy_uri;
String logoUri;
String policyUri;
String[] contacts; String[] contacts;
String[] scope = new String[]{"openid"}; String[] redirect_uris = new String[]{};
String[] grantTypes = new String[] {"client_credentials"}; String[] grant_types = new String[] {"client_credentials"};
boolean allowIntrospection = true; String token_endpoint_auth_method = "private_key_jwt";
String tokenEndpointAuthMethod = "PRIVATE_KEY"; String token_endpoint_auth_signing_alg = "RS256";
String tokenEndpointAuthSigningAlg = "RS256"; String jwks_uri;
String jwksType;
String jwksUri;
Jwks jwks; Jwks jwks;
boolean allowRefresh = false;
boolean reuseRefreshToken = true;
boolean clearAccessTokensOnRefresh = true;
public String getClientName() { public String getClientName() {
return clientName; return client_name;
} }
public void setClientName(String clientName) { public void setClientName(String clientName) {
this.clientName = clientName; this.client_name = clientName;
} }
public String getClientId() { public String getClientId() {
return clientId; return client_id;
} }
public void setClientId(String clientId) { public void setClientId(String clientId) {
this.clientId = clientId; this.client_id = clientId;
} }
public String[] getRedirectUris() { public String[] getRedirectUris() {
return redirectUris; return redirect_uris;
} }
public void setRedirectUris(String[] redirectUris) { public void setRedirectUris(String[] redirectUris) {
this.redirectUris = redirectUris; this.redirect_uris = redirectUris;
}
public String getClientDescription() {
return clientDescription;
}
public void setClientDescription(String clientDescription) {
this.clientDescription = clientDescription;
} }
public String getLogoUri() { public String getLogoUri() {
return logoUri; return logo_uri;
} }
public void setLogoUri(String logoUri) { public void setLogoUri(String logoUri) {
this.logoUri = logoUri; this.logo_uri = logoUri;
} }
public String getPolicyUri() { public String getPolicyUri() {
return policyUri; return policy_uri;
} }
public void setPolicyUri(String policyUri) { public void setPolicyUri(String policyUri) {
this.policyUri = policyUri; this.policy_uri = policyUri;
} }
public String[] getContacts() { public String[] getContacts() {
@ -78,60 +63,36 @@ public class ServiceRequest {
this.contacts = contacts; this.contacts = contacts;
} }
public String[] getScope() {
return scope;
}
public void setScope(String[] scope) {
this.scope = scope;
}
public String[] getGrantTypes() { public String[] getGrantTypes() {
return grantTypes; return grant_types;
} }
public void setGrantTypes(String[] grantTypes) { public void setGrantTypes(String[] grantTypes) {
this.grantTypes = grantTypes; this.grant_types = grantTypes;
} }
public boolean isAllowIntrospection() { public String getToken_endpoint_auth_method() {
return allowIntrospection; return token_endpoint_auth_method;
} }
public void setAllowIntrospection(boolean allowIntrospection) { public void setToken_endpoint_auth_method(String token_endpoint_auth_method) {
this.allowIntrospection = allowIntrospection; this.token_endpoint_auth_method = token_endpoint_auth_method;
}
public String getTokenEndpointAuthMethod() {
return tokenEndpointAuthMethod;
}
public void setTokenEndpointAuthMethod(String tokenEndpointAuthMethod) {
this.tokenEndpointAuthMethod = tokenEndpointAuthMethod;
} }
public String getTokenEndpointAuthSigningAlg() { public String getTokenEndpointAuthSigningAlg() {
return tokenEndpointAuthSigningAlg; return token_endpoint_auth_signing_alg;
} }
public void setTokenEndpointAuthSigningAlg(String tokenEndpointAuthSigningAlg) { public void setTokenEndpointAuthSigningAlg(String tokenEndpointAuthSigningAlg) {
this.tokenEndpointAuthSigningAlg = tokenEndpointAuthSigningAlg; this.token_endpoint_auth_signing_alg = tokenEndpointAuthSigningAlg;
}
public String getJwksType() {
return jwksType;
}
public void setJwksType(String jwksType) {
this.jwksType = jwksType;
} }
public String getJwksUri() { public String getJwksUri() {
return jwksUri; return jwks_uri;
} }
public void setJwksUri(String jwksUri) { public void setJwksUri(String jwksUri) {
this.jwksUri = jwksUri; this.jwks_uri = jwksUri;
} }
public Jwks getJwks() { public Jwks getJwks() {

View File

@ -3,244 +3,91 @@ package eu.dnetlib.openaire.usermanagement;
import java.io.Serializable; import java.io.Serializable;
public class ServiceResponse implements Serializable { public class ServiceResponse implements Serializable {
String id; String client_id;
String clientId; Long client_id_issued_at;
String clientSecret; String client_secret;
String[] redirectUris; Long client_secret_expires_at;
String clientName; String registration_access_token;
String clienrtUri; String registration_client_uri;
String logoUri; String[] redirect_uris;
String client_name;
String logo_uri;
String policy_uri;
String[] contacts; String[] contacts;
String tosUri; String[] grant_types;
String tokenEndpointAuthMethod; String token_endpoint_auth_method;
String[] scope; String token_endpoint_auth_signing_alg;
String grantTypes[]; String scope;
String responseTypes[]; String jwks_uri;
String policyUri;
String jwksUri;
Jwks jwks; Jwks jwks;
String applicationType;
String sectorIdentifierUri;
String subjectType;
String requestObjectSigningAlg;
String userInfoSignedResponseAlg;
String userInfoEncryptedResponseAlg;
String userInfoEncryptedResponseEnc;
String idTokenSignedResponseAlg;
String idTokenEncryptedResponseAlg;
String idTokenEncryptedResponseEnc;
String tokenEndpointAuthSigningAlg;
String defaultMaxAge;
String requireAuthTime;
String[] defaultACRvalues;
String initiateLoginUri;
String[] postLogoutRedirectUris;
String[] requestUris;
String[] authorities;
int accessTokenValiditySeconds;
int refreshTokenValiditySeconds;
String[] resourceIds;
String clientDescription;
boolean reuseRefreshToken;
boolean dynamicallyRegistered;
boolean allowIntrospection;
int idTokenValiditySeconds;
String createdAt;
boolean clearAccessTokensOnRefresh;
String deviceCodeValiditySeconds;
String[] claimsRedirectUris;
String softwareStatement;
String codeChallengeMethod;
public String getId() {
return id;
}
public String getClientId() { public String getClientId() {
return clientId; return client_id;
}
public Long getClientIdIssuedAt() {
return client_id_issued_at;
} }
public String getClientSecret() { public String getClientSecret() {
return clientSecret; return client_secret;
}
public Long getClientSecretExpiresAt() {
return client_secret_expires_at;
}
public String getRegistrationAccessToken() {
return registration_access_token;
}
public String getRegistrationClientUri() {
return registration_client_uri;
} }
public String[] getRedirectUris() { public String[] getRedirectUris() {
return redirectUris; return redirect_uris;
} }
public String getClientName() { public String getClientName() {
return clientName; return client_name;
} }
public String getClienrtUri() {
return clienrtUri;
}
public String getLogoUri() { public String getLogoUri() {
return logoUri; return logo_uri;
}
public String getPolicyUri() {
return policy_uri;
} }
public String[] getContacts() { public String[] getContacts() {
return contacts; return contacts;
} }
public String getTosUri() { public String[] getGrantTypes() {
return tosUri; return grant_types;
} }
public String getTokenEndpointAuthMethod() { public String getTokenEndpointAuthMethod() {
return tokenEndpointAuthMethod; return token_endpoint_auth_method;
} }
public String[] getScope() { public String getTokenEndpointAuthSigningAlg() {
return token_endpoint_auth_signing_alg;
}
public String getScope() {
return scope; return scope;
} }
public String[] getGrantTypes() {
return grantTypes;
}
public String[] getResponseTypes() {
return responseTypes;
}
public String getPolicyUri() {
return policyUri;
}
public String getJwksUri() { public String getJwksUri() {
return jwksUri; return jwks_uri;
} }
public Jwks getJwks() { public Jwks getJwks() {
return jwks; return jwks;
} }
public String getApplicationType() {
return applicationType;
}
public String getSectorIdentifierUri() {
return sectorIdentifierUri;
}
public String getSubjectType() {
return subjectType;
}
public String getRequestObjectSigningAlg() {
return requestObjectSigningAlg;
}
public String getUserInfoSignedResponseAlg() {
return userInfoSignedResponseAlg;
}
public String getUserInfoEncryptedResponseAlg() {
return userInfoEncryptedResponseAlg;
}
public String getUserInfoEncryptedResponseEnc() {
return userInfoEncryptedResponseEnc;
}
public String getIdTokenSignedResponseAlg() {
return idTokenSignedResponseAlg;
}
public String getIdTokenEncryptedResponseAlg() {
return idTokenEncryptedResponseAlg;
}
public String getIdTokenEncryptedResponseEnc() {
return idTokenEncryptedResponseEnc;
}
public String getTokenEndpointAuthSigningAlg() {
return tokenEndpointAuthSigningAlg;
}
public String getDefaultMaxAge() {
return defaultMaxAge;
}
public String getRequireAuthTime() {
return requireAuthTime;
}
public String[] getDefaultACRvalues() {
return defaultACRvalues;
}
public String getInitiateLoginUri() {
return initiateLoginUri;
}
public String[] getPostLogoutRedirectUris() {
return postLogoutRedirectUris;
}
public String[] getRequestUris() {
return requestUris;
}
public String[] getAuthorities() {
return authorities;
}
public int getAccessTokenValiditySeconds() {
return accessTokenValiditySeconds;
}
public int getRefreshTokenValiditySeconds() {
return refreshTokenValiditySeconds;
}
public String[] getResourceIds() {
return resourceIds;
}
public String getClientDescription() {
return clientDescription;
}
public boolean isReuseRefreshToken() {
return reuseRefreshToken;
}
public boolean isDynamicallyRegistered() {
return dynamicallyRegistered;
}
public boolean isAllowIntrospection() {
return allowIntrospection;
}
public int getIdTokenValiditySeconds() {
return idTokenValiditySeconds;
}
public String getCreatedAt() {
return createdAt;
}
public boolean isClearAccessTokensOnRefresh() {
return clearAccessTokensOnRefresh;
}
public String getDeviceCodeValiditySeconds() {
return deviceCodeValiditySeconds;
}
public String[] getClaimsRedirectUris() {
return claimsRedirectUris;
}
public String getSoftwareStatement() {
return softwareStatement;
}
public String getCodeChallengeMethod() {
return codeChallengeMethod;
}
} }

View File

@ -31,11 +31,9 @@ public class RegisteredServicesUtils {
return false; //no harm in accessing nothing return false; //no harm in accessing nothing
} }
System.out.println("....and HERE"); System.out.println("....and HERE");
System.out.println(registeredService.getAai_id()); System.out.println(registeredService.getClientId());
System.out.println(registeredService.getOwner()); System.out.println(registeredService.getOwner());
if (registeredService.getOwner().equals(userid)) return true; return registeredService.getOwner().equals(userid);
return false;
} }
} }

View File

@ -28,12 +28,11 @@ public class TokenUtils {
@Value("${oidc.issuer}") @Value("${oidc.issuer}")
private String issuer; private String issuer;
public String registerService(String serverRequestJSON, String accessToken) public String registerService(String serverRequestJSON)
throws IOException { throws IOException {
HttpPost httppost = new HttpPost( issuer + "/api/clients"); HttpPost httppost = new HttpPost( issuer + "register");
httppost.setHeader(HttpHeaders.CONTENT_TYPE, "application/json"); httppost.setHeader(HttpHeaders.CONTENT_TYPE, "application/json");
httppost.setHeader(HttpHeaders.AUTHORIZATION, "Bearer " + accessToken);
StringEntity params = new StringEntity(serverRequestJSON.toString()); StringEntity params = new StringEntity(serverRequestJSON.toString());
httppost.setEntity(params); httppost.setEntity(params);
@ -41,18 +40,19 @@ public class TokenUtils {
HttpResponse httpResponse = httpclient.execute(httppost); HttpResponse httpResponse = httpclient.execute(httppost);
System.out.println("HTTP RESPONSE " + httpResponse.getStatusLine().getStatusCode()); System.out.println("HTTP RESPONSE " + httpResponse.getStatusLine().getStatusCode());
if (httpResponse.getStatusLine().getStatusCode() == 200) { if (httpResponse.getStatusLine().getStatusCode() == 201) {
//logger.debug(IOUtils.toString(httpResponse.getEntity().getContent(), StandardCharsets.UTF_8.name()));
return IOUtils.toString(httpResponse.getEntity().getContent(), StandardCharsets.UTF_8.name()); return IOUtils.toString(httpResponse.getEntity().getContent(), StandardCharsets.UTF_8.name());
} }
return null; return null;
} }
public HttpResponse updateService(String serviceId, String serviceSON, String accessToken) throws IOException { public HttpResponse updateService(String serviceId, String serviceSON, String registeredAccessToken) throws IOException {
HttpPut httpPut = new HttpPut(issuer + "/api/clients/"+serviceId); HttpPut httpPut = new HttpPut(issuer + "register/"+serviceId);
httpPut.setHeader(HttpHeaders.CONTENT_TYPE, "application/json"); httpPut.setHeader(HttpHeaders.CONTENT_TYPE, "application/json");
httpPut.setHeader(HttpHeaders.AUTHORIZATION, "Bearer " + accessToken); httpPut.setHeader(HttpHeaders.AUTHORIZATION, "Bearer " + registeredAccessToken);
StringEntity params = new StringEntity(serviceSON.toString()); StringEntity params = new StringEntity(serviceSON.toString());
httpPut.setEntity(params); httpPut.setEntity(params);
@ -60,21 +60,21 @@ public class TokenUtils {
return httpclient.execute(httpPut); return httpclient.execute(httpPut);
} }
public HttpResponse deleteService(String serviceId, String accessToken) throws IOException { public HttpResponse deleteService(String serviceId, String registeredAccessToken) throws IOException {
System.out.println("DELETE " + issuer + "/api/clients/"+serviceId); System.out.println("DELETE " + issuer + "register/"+serviceId);
HttpDelete httpDelete = new HttpDelete(issuer + "/api/clients/"+serviceId); HttpDelete httpDelete = new HttpDelete(issuer + "register/"+serviceId);
httpDelete.setHeader(HttpHeaders.CONTENT_TYPE, "application/json"); httpDelete.setHeader(HttpHeaders.CONTENT_TYPE, "application/json");
httpDelete.setHeader(HttpHeaders.AUTHORIZATION, "Bearer " + accessToken); httpDelete.setHeader(HttpHeaders.AUTHORIZATION, "Bearer " + registeredAccessToken);
CloseableHttpClient httpclient = HttpClients.createDefault(); CloseableHttpClient httpclient = HttpClients.createDefault();
return httpclient.execute(httpDelete); return httpclient.execute(httpDelete);
} }
public ServiceResponse getRegisteredService(String serviceId, String accessToken) throws IOException { public ServiceResponse getRegisteredService(String serviceId, String registeredAccessToken) throws IOException {
System.out.println("ISSUER " + issuer); System.out.println("ISSUER " + issuer);
HttpGet httpGet = new HttpGet(issuer + "/api/clients/"+ serviceId); HttpGet httpGet = new HttpGet(issuer + "register/"+ serviceId);
httpGet.setHeader(HttpHeaders.AUTHORIZATION, "Bearer " + accessToken); httpGet.setHeader(HttpHeaders.AUTHORIZATION, "Bearer " + registeredAccessToken);
CloseableHttpClient httpclient = HttpClients.createDefault(); CloseableHttpClient httpclient = HttpClients.createDefault();
HttpResponse httpResponse = httpclient.execute(httpGet); HttpResponse httpResponse = httpclient.execute(httpGet);
@ -83,9 +83,9 @@ public class TokenUtils {
return new Gson().fromJson(registeredService,ServiceResponse.class); return new Gson().fromJson(registeredService,ServiceResponse.class);
} }
public void viewRegisteredServices(List<String> serviceIds, String accessToken) throws IOException { public void viewRegisteredServices(List<String> serviceIds, String registeredAccessToken) throws IOException {
for (String serviceId: serviceIds) { for (String serviceId: serviceIds) {
getRegisteredService(serviceId, accessToken); getRegisteredService(serviceId, registeredAccessToken);
} }
} }
} }

View File

@ -16,7 +16,7 @@
<base href="."> <base href=".">
<title>OpenAIRE - Activation</title> <title>OpenAIRE - Activation</title>
<script src="./js/jquery.js"></script> <script src="./js/jquery.js"></script>
<script src="./js/uikit.js"></script> <script src="./js/uikit.min.js"></script>
<script src="./js/validation.js"></script> <script src="./js/validation.js"></script>
<link rel="stylesheet" style="text/css" href="./css/theme.css"> <link rel="stylesheet" style="text/css" href="./css/theme.css">
<link rel="stylesheet" style="text/css" href="./css/custom.css"> <link rel="stylesheet" style="text/css" href="./css/custom.css">

View File

@ -22,7 +22,7 @@
<base href="."> <base href=".">
<title>OpenAIRE - Enter new password</title> <title>OpenAIRE - Enter new password</title>
<script src="./js/jquery.js"></script> <script src="./js/jquery.js"></script>
<script src="./js/uikit.js"></script> <script src="./js/uikit.min.js"></script>
<script src="./js/validation.js"></script> <script src="./js/validation.js"></script>
<script src="./js/uikit-icons.min.js"></script> <script src="./js/uikit-icons.min.js"></script>
<link rel="stylesheet" style="text/css" href="./css/theme.css"> <link rel="stylesheet" style="text/css" href="./css/theme.css">

View File

@ -9,7 +9,7 @@
<base href="."> <base href=".">
<title>OpenAIRE - Register</title> <title>OpenAIRE - Register</title>
<script src="./js/jquery.js"></script> <script src="./js/jquery.js"></script>
<script src="./js/uikit.js"></script> <script src="./js/uikit.min.js"></script>
<script src="./js/validation.js"></script> <script src="./js/validation.js"></script>
<script src="./js/uikit-icons-max.js"></script> <script src="./js/uikit-icons-max.js"></script>
<link rel="stylesheet" style="text/css" href="./css/theme.css"> <link rel="stylesheet" style="text/css" href="./css/theme.css">

View File

@ -23,7 +23,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<title>OpenAIRE - Email Sent</title> <title>OpenAIRE - Email Sent</title>
<script src="./js/jquery.js"></script> <script src="./js/jquery.js"></script>
<script src="./js/uikit.js"></script> <script src="./js/uikit.min.js"></script>
<script src="./js/validation.js"></script> <script src="./js/validation.js"></script>
<link rel="stylesheet" style="text/css" href="./css/theme.css"> <link rel="stylesheet" style="text/css" href="./css/theme.css">
<link rel="stylesheet" style="text/css" href="./css/custom.css"> <link rel="stylesheet" style="text/css" href="./css/custom.css">

View File

@ -22,7 +22,7 @@
<base href="."> <base href=".">
<title>OpenAIRE - Error</title> <title>OpenAIRE - Error</title>
<script src="./js/jquery.js"></script> <script src="./js/jquery.js"></script>
<script src="./js/uikit.js"></script> <script src="./js/uikit.min.js"></script>
<script src="./js/validation.js"></script> <script src="./js/validation.js"></script>
<link rel="stylesheet" style="text/css" href="./css/theme.css"> <link rel="stylesheet" style="text/css" href="./css/theme.css">
<link rel="stylesheet" style="text/css" href="./css/custom.css"> <link rel="stylesheet" style="text/css" href="./css/custom.css">

View File

@ -8,7 +8,7 @@
<base href="."> <base href=".">
<title>OpenAIRE - Error 404</title> <title>OpenAIRE - Error 404</title>
<script src="./js/jquery.js"></script> <script src="./js/jquery.js"></script>
<script src="./js/uikit.js"></script> <script src="./js/uikit.min.js"></script>
<script src="./js/validation.js"></script> <script src="./js/validation.js"></script>
<link rel="stylesheet" style="text/css" href="./css/theme.css"> <link rel="stylesheet" style="text/css" href="./css/theme.css">
<link rel="stylesheet" style="text/css" href="./css/custom.css"> <link rel="stylesheet" style="text/css" href="./css/custom.css">

View File

@ -22,7 +22,7 @@
<base href="."> <base href=".">
<title>OpenAIRE - Expired Verification Code</title> <title>OpenAIRE - Expired Verification Code</title>
<script src="./js/jquery.js"></script> <script src="./js/jquery.js"></script>
<script src="./js/uikit.js"></script> <script src="./js/uikit.min.js"></script>
<script src="./js/validation.js"></script> <script src="./js/validation.js"></script>
<link rel="stylesheet" style="text/css" href="./css/theme.css"> <link rel="stylesheet" style="text/css" href="./css/theme.css">
<link rel="stylesheet" style="text/css" href="./css/custom.css"> <link rel="stylesheet" style="text/css" href="./css/custom.css">

View File

@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<title>OpenAIRE - Forgot password</title> <title>OpenAIRE - Forgot password</title>
<script src="./js/jquery.js"></script> <script src="./js/jquery.js"></script>
<script src="./js/uikit.js"></script> <script src="./js/uikit.min.js"></script>
<link rel="stylesheet" style="text/css" href="./css/theme.css"> <link rel="stylesheet" style="text/css" href="./css/theme.css">
<link rel="stylesheet" style="text/css" href="./css/custom.css"> <link rel="stylesheet" style="text/css" href="./css/custom.css">
<link rel="stylesheet" style="text/css" href="./css/aai-custom.css"> <link rel="stylesheet" style="text/css" href="./css/aai-custom.css">

File diff suppressed because one or more lines are too long

3
src/main/webapp/js/uikit.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -16,7 +16,7 @@
<base href="."> <base href=".">
<title>OpenAIRE - APIs Authentication</title> <title>OpenAIRE - APIs Authentication</title>
<script src="./js/jquery.js"></script> <script src="./js/jquery.js"></script>
<script src="./js/uikit.js"></script> <script src="./js/uikit.min.js"></script>
<script src="./js/validation.js"></script> <script src="./js/validation.js"></script>
<script src="./js/uikit-icons-max.js"></script> <script src="./js/uikit-icons-max.js"></script>
<link rel="stylesheet" style="text/css" href="./css/theme.css"> <link rel="stylesheet" style="text/css" href="./css/theme.css">

View File

@ -7,7 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<title>OpenAIRE - Personal token</title> <title>OpenAIRE - Personal token</title>
<script src="./js/jquery.js"></script> <script src="./js/jquery.js"></script>
<script src="./js/uikit.js"></script> <script src="./js/uikit.min.js"></script>
<script src="./js/uikit-icons-max.js"></script> <script src="./js/uikit-icons-max.js"></script>
<script> <script>
function copy(id) { function copy(id) {

View File

@ -16,7 +16,7 @@
<base href="."> <base href=".">
<title>OpenAIRE - Register</title> <title>OpenAIRE - Register</title>
<script src="./js/jquery.js"></script> <script src="./js/jquery.js"></script>
<script src="./js/uikit.js"></script> <script src="./js/uikit.min.js"></script>
<script src="./js/validation.js"></script> <script src="./js/validation.js"></script>
<script src="./js/uikit-icons-max.js"></script> <script src="./js/uikit-icons-max.js"></script>
<link rel="stylesheet" style="text/css" href="./css/theme.css"> <link rel="stylesheet" style="text/css" href="./css/theme.css">

View File

@ -16,7 +16,7 @@
<base href="."> <base href=".">
<title>OpenAIRE - Register</title> <title>OpenAIRE - Register</title>
<script src="./js/jquery.js"></script> <script src="./js/jquery.js"></script>
<script src="./js/uikit.js"></script> <script src="./js/uikit.min.js"></script>
<script src="./js/uikit-icons-max.js"></script> <script src="./js/uikit-icons-max.js"></script>
<link rel="stylesheet" style="text/css" href="./css/theme.css"> <link rel="stylesheet" style="text/css" href="./css/theme.css">
<link rel="stylesheet" style="text/css" href="./css/custom.css"> <link rel="stylesheet" style="text/css" href="./css/custom.css">
@ -85,12 +85,6 @@
<c:remove var="first_name" scope="session"/> <c:remove var="first_name" scope="session"/>
<c:remove var="first_name_error" scope="session"/> <c:remove var="first_name_error" scope="session"/>
</div> </div>
<div class="uk-margin-medium-top">
<label class="uk-form-label uk-text-bold" for="description">Description</label>
<textarea id="description" name="description" type="textarea" placeholder="Description:"
class="uk-textarea" rows="3">${description}</textarea>
<c:remove var="description" scope="session"/>
</div>
<h4 class="uk-text-bold uk-text-center">Access</h4> <h4 class="uk-text-bold uk-text-center">Access</h4>
<div class="uk-margin-medium-top"> <div class="uk-margin-medium-top">
<label class="uk-form-label uk-text-bold">Scope</label> <label class="uk-form-label uk-text-bold">Scope</label>

View File

@ -23,7 +23,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<title>OpenAIRE - Successful registration</title> <title>OpenAIRE - Successful registration</title>
<script src="./js/jquery.js"></script> <script src="./js/jquery.js"></script>
<script src="./js/uikit.js"></script> <script src="./js/uikit.min.js"></script>
<script src="./js/validation.js"></script> <script src="./js/validation.js"></script>
<link rel="stylesheet" style="text/css" href="./css/theme.css"> <link rel="stylesheet" style="text/css" href="./css/theme.css">
<link rel="stylesheet" style="text/css" href="./css/custom.css"> <link rel="stylesheet" style="text/css" href="./css/custom.css">

View File

@ -9,7 +9,7 @@
<base href="."> <base href=".">
<title>OpenAIRE - Registered services</title> <title>OpenAIRE - Registered services</title>
<script src="./js/jquery.js"></script> <script src="./js/jquery.js"></script>
<script src="./js/uikit.js"></script> <script src="./js/uikit.min.js"></script>
<script src="./js/validation.js"></script> <script src="./js/validation.js"></script>
<script src="./js/uikit-icons-max.js"></script> <script src="./js/uikit-icons-max.js"></script>
<link rel="stylesheet" style="text/css" href="./css/theme.css"> <link rel="stylesheet" style="text/css" href="./css/theme.css">
@ -99,7 +99,7 @@
</a> </a>
</div> </div>
<div> <div>
<span>${services[key].clientId}</span> <span>${registeredService.clientId}</span>
</div> </div>
<div><fmt:formatDate value="${registeredService.date}" <div><fmt:formatDate value="${registeredService.date}"
pattern="dd-MM-yyyy HH:mm"/> pattern="dd-MM-yyyy HH:mm"/>
@ -140,7 +140,6 @@
<li id="details${registeredService.id}" hidden="hidden"> <li id="details${registeredService.id}" hidden="hidden">
<div class="uk-alert"> <div class="uk-alert">
<p><span class="uk-text-primary">Name:</span> ${services[key].clientName}</p> <p><span class="uk-text-primary">Name:</span> ${services[key].clientName}</p>
<p><span class="uk-text-primary">Description:</span> ${services[key].clientDescription}</p>
<p><span class="uk-text-primary">Service Id:</span> ${services[key].clientId}</p> <p><span class="uk-text-primary">Service Id:</span> ${services[key].clientId}</p>
<p><span class="uk-text-primary">Scope:</span> openid</p> <p><span class="uk-text-primary">Scope:</span> openid</p>
<p><span class="uk-text-primary">Grant type:</span> client credentials</p> <p><span class="uk-text-primary">Grant type:</span> client credentials</p>
@ -151,7 +150,8 @@
<pre><code>${keys[key]}</code></pre> <pre><code>${keys[key]}</code></pre>
</p> </p>
<p><span class="uk-text-primary">Creation Date:</span> <p><span class="uk-text-primary">Creation Date:</span>
<fmt:parseDate value="${services[key].createdAt}" var="date" pattern="yyyy-MM-dd'T'HH:mm:ssZ" /> <jsp:useBean id="date" class="java.util.Date"/>
<jsp:setProperty name="date" property="time" value="${services[key].clientIdIssuedAt*1000}"/>
<fmt:formatDate value="${date}" <fmt:formatDate value="${date}"
pattern="dd-MM-yyyy HH:mm"/> pattern="dd-MM-yyyy HH:mm"/>
</p> </p>
@ -163,19 +163,18 @@
</div> </div>
<!-- END OF CENTER SIDE --> <!-- END OF CENTER SIDE -->
</div> </div>
</div>
</div> </div>
<script>
function success() {
if('${success}' !=='')
UIkit.modal.confirm('${success}');
}
</script>
<c:remove var="success" scope="session"/>
<!-- CONTENT ENDS HERE --> <!-- CONTENT ENDS HERE -->
<c:import url="footer.jsp"/> <c:import url="footer.jsp"/>
</div>
</body> </body>
</html> </html>
<script>
function success() {
if('${success}' !=='')
UIkit.modal.alert('${success}');
}
</script>
<c:remove var="success" scope="session"/>

View File

@ -8,7 +8,7 @@
<base href="."> <base href=".">
<title>OpenAIRE - Username Reminder</title> <title>OpenAIRE - Username Reminder</title>
<script src="./js/jquery.js"></script> <script src="./js/jquery.js"></script>
<script src="./js/uikit.js"></script> <script src="./js/uikit.min.js"></script>
<link rel="stylesheet" style="text/css" href="./css/theme.css"> <link rel="stylesheet" style="text/css" href="./css/theme.css">
<link rel="stylesheet" style="text/css" href="./css/custom.css"> <link rel="stylesheet" style="text/css" href="./css/custom.css">
<link rel="stylesheet" style="text/css" href="./css/aai-custom.css"> <link rel="stylesheet" style="text/css" href="./css/aai-custom.css">

View File

@ -14,7 +14,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<base href="."> <base href=".">
<script src="./js/jquery.js"></script> <script src="./js/jquery.js"></script>
<script src="./js/uikit.js"></script> <script src="./js/uikit.min.js"></script>
<link rel="stylesheet" style="text/css" href="./css/theme.css"> <link rel="stylesheet" style="text/css" href="./css/theme.css">
<link rel="stylesheet" style="text/css" href="./css/custom.css"> <link rel="stylesheet" style="text/css" href="./css/custom.css">
<link rel="stylesheet" style="text/css" href="./css/aai-custom.css"> <link rel="stylesheet" style="text/css" href="./css/aai-custom.css">

View File

@ -14,7 +14,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<base href="."> <base href=".">
<script src="./js/jquery.js"></script> <script src="./js/jquery.js"></script>
<script src="./js/uikit.js"></script> <script src="./js/uikit.min.js"></script>
<link rel="stylesheet" style="text/css" href="./css/theme.css"> <link rel="stylesheet" style="text/css" href="./css/theme.css">
<link rel="stylesheet" style="text/css" href="./css/custom.css"> <link rel="stylesheet" style="text/css" href="./css/custom.css">
<link rel="stylesheet" style="text/css" href="./css/aai-custom.css"> <link rel="stylesheet" style="text/css" href="./css/aai-custom.css">

View File

@ -15,7 +15,7 @@
<base href="."> <base href=".">
<title>OpenAIRE - Reset Password</title> <title>OpenAIRE - Reset Password</title>
<script src="./js/jquery.js"></script> <script src="./js/jquery.js"></script>
<script src="./js/uikit.js"></script> <script src="./js/uikit.min.js"></script>
<script src="./js/validation.js"></script> <script src="./js/validation.js"></script>
<link rel="stylesheet" style="text/css" href="./css/theme.css"> <link rel="stylesheet" style="text/css" href="./css/theme.css">
<link rel="stylesheet" style="text/css" href="./css/custom.css"> <link rel="stylesheet" style="text/css" href="./css/custom.css">

View File

@ -26,7 +26,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<title>OpenAIRE - Success</title> <title>OpenAIRE - Success</title>
<script src="./js/jquery.js"></script> <script src="./js/jquery.js"></script>
<script src="./js/uikit.js"></script> <script src="./js/uikit.min.js"></script>
<script src="./js/validation.js"></script> <script src="./js/validation.js"></script>
<link rel="stylesheet" style="text/css" href="./css/theme.css"> <link rel="stylesheet" style="text/css" href="./css/theme.css">
<link rel="stylesheet" style="text/css" href="./css/custom.css"> <link rel="stylesheet" style="text/css" href="./css/custom.css">

View File

@ -25,7 +25,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<title>OpenAIRE - Success</title> <title>OpenAIRE - Success</title>
<script src="./js/jquery.js"></script> <script src="./js/jquery.js"></script>
<script src="./js/uikit.js"></script> <script src="./js/uikit.min.js"></script>
<script src="./js/validation.js"></script> <script src="./js/validation.js"></script>
<link rel="stylesheet" style="text/css" href="./css/theme.css"> <link rel="stylesheet" style="text/css" href="./css/theme.css">
<link rel="stylesheet" style="text/css" href="./css/custom.css"> <link rel="stylesheet" style="text/css" href="./css/custom.css">

View File

@ -21,7 +21,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<script src="./js/jquery.js"></script> <script src="./js/jquery.js"></script>
<script src="./js/uikit.js"></script> <script src="./js/uikit.min.js"></script>
<script src="./js/validation.js"></script> <script src="./js/validation.js"></script>
<link rel="stylesheet" style="text/css" href="./css/theme.css"> <link rel="stylesheet" style="text/css" href="./css/theme.css">
<link rel="stylesheet" style="text/css" href="./css/custom.css"> <link rel="stylesheet" style="text/css" href="./css/custom.css">

View File

@ -8,7 +8,7 @@
<base href="."> <base href=".">
<title>OpenAIRE - Account verification</title> <title>OpenAIRE - Account verification</title>
<script src="./js/jquery.js"></script> <script src="./js/jquery.js"></script>
<script src="./js/uikit.js"></script> <script src="./js/uikit.min.js"></script>
<script src="./js/validation.js"></script> <script src="./js/validation.js"></script>
<link rel="stylesheet" style="text/css" href="./css/theme.css"> <link rel="stylesheet" style="text/css" href="./css/theme.css">
<link rel="stylesheet" style="text/css" href="./css/custom.css"> <link rel="stylesheet" style="text/css" href="./css/custom.css">

View File

@ -16,7 +16,7 @@
<base href="."> <base href=".">
<title>OpenAIRE - Email Verification</title> <title>OpenAIRE - Email Verification</title>
<script src="./js/jquery.js"></script> <script src="./js/jquery.js"></script>
<script src="./js/uikit.js"></script> <script src="./js/uikit.min.js"></script>
<script src="./js/validation.js"></script> <script src="./js/validation.js"></script>
<link rel="stylesheet" style="text/css" href="./css/theme.css"> <link rel="stylesheet" style="text/css" href="./css/theme.css">
<link rel="stylesheet" style="text/css" href="./css/custom.css"> <link rel="stylesheet" style="text/css" href="./css/custom.css">

View File

@ -14,7 +14,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<base href="."> <base href=".">
<script src="./js/jquery.js"></script> <script src="./js/jquery.js"></script>
<script src="./js/uikit.js"></script> <script src="./js/uikit.min.js"></script>
<script src="./js/validation.js"></script> <script src="./js/validation.js"></script>
<link rel="stylesheet" style="text/css" href="./css/theme.css"> <link rel="stylesheet" style="text/css" href="./css/theme.css">
<link rel="stylesheet" style="text/css" href="./css/custom.css"> <link rel="stylesheet" style="text/css" href="./css/custom.css">