From aba787800565357b506d03bf6034a3ec0b870b7e Mon Sep 17 00:00:00 2001 From: Alejandra Garcia-Rojas Date: Thu, 22 May 2014 12:01:38 +0200 Subject: [PATCH] Framework configuration refactoring major changes src/main/java/accounts/FrameworkUserManager.java - minor changes of some get functions - added a rollback of virtuoso user creation if the graph insert has an error - added a missing prefix to getPrefixes() (I was having an error because a default prefix : was missing) src/main/java/authentication/FrameworkConfiguration.java - this file changed a lot to be able to read configuration from web.xml and from ttl files src/main/java/accounts/VirtuosoUserManager.java - irrelevant formatting changes src/main/java/authentication/web/AuthenticationServlet.java src/main/java/authentication/web/GraphManagerServlet.java src/main/java/authentication/web/HttpRequestManager.java src/main/java/authentication/web/UserManagerServlet.java src/main/java/authentication/web/VirtuosoProxy.java - added a exception handle - added the context parameter to the Framework configuration src/main/java/authentication/web/RdfStoreProxy.java - added the context parameter to the Framework configuration - I started checking how to do here the exception in order that the webapp provides more information about errors.. but not finished - do some formatting src/main/webapp/WEB-INF/web.xml - lots of changes.. some configuration is to be handled here : namespaces, Uris, and email settings src/main/resources/* - replaced all configuration files - these files are copied to classes directory when the application is deployed, and then, they can be read by the configuration class src/main/webapp/js/config.js - these file should not hava anymore any configuration for the endopoints - I have to still change it to be able to take namespaces form the server.. thus some configuration is still there --- .../java/accounts/FrameworkUserManager.java | 37 +- .../java/accounts/VirtuosoUserManager.java | 8 +- .../FrameworkConfiguration.java | 341 +++++++--- .../web/AuthenticationServlet.java | 30 +- .../web/GraphManagerServlet.java | 24 +- .../web/HttpRequestManager.java | 383 +++++------ .../authentication/web/RdfStoreProxy.java | 109 ++-- .../web/UserManagerServlet.java | 23 +- .../authentication/web/VirtuosoProxy.java | 16 +- ...gy.ttl => framework-accounts-ontology.ttl} | 2 +- src/main/resources/framework-components.ttl | 101 +++ .../resources/framework-configuration.ttl | 60 ++ src/main/resources/framework-datasets.ttl | 53 ++ src/main/resources/framework-graphs.ttl | 97 +++ ...or-ontology.ttl => framework-ontology.ttl} | 3 +- .../resources/geoknow-initial-settings.ttl | 173 ----- src/main/resources/geoknow-settings.ttl | 207 ------ src/main/webapp/WEB-INF/web.xml | 103 ++- src/main/webapp/js/config.js | 610 +++++++++--------- 19 files changed, 1288 insertions(+), 1092 deletions(-) rename src/main/resources/{generator-accounts-ontology.ttl => framework-accounts-ontology.ttl} (94%) create mode 100644 src/main/resources/framework-components.ttl create mode 100644 src/main/resources/framework-configuration.ttl create mode 100644 src/main/resources/framework-datasets.ttl create mode 100644 src/main/resources/framework-graphs.ttl rename src/main/resources/{generator-ontology.ttl => framework-ontology.ttl} (99%) delete mode 100644 src/main/resources/geoknow-initial-settings.ttl delete mode 100644 src/main/resources/geoknow-settings.ttl diff --git a/src/main/java/accounts/FrameworkUserManager.java b/src/main/java/accounts/FrameworkUserManager.java index 096b19b..e7b1c0f 100644 --- a/src/main/java/accounts/FrameworkUserManager.java +++ b/src/main/java/accounts/FrameworkUserManager.java @@ -10,6 +10,7 @@ import util.ObjectPair; import util.RandomStringGenerator; +import java.io.IOException; import java.net.URLEncoder; import java.util.ArrayList; import java.util.Collection; @@ -61,13 +62,13 @@ public void createUser(String name, String password, String email) throws Except counter++; } while (error && counter<10); //grant SPARQL_UPDATE role to created Virtuoso user - // todo users with only read access? + //TODO: users with only read access? rdfStoreUserManager.grantRole(rdfStoreUser, "SPARQL_UPDATE"); //create setting graph for user String userSettingsGraphURI = frameworkConfig.getResourceNamespace() + URLEncoder.encode(name, "UTF-8") + "/settingsGraph"; // grant write permissions to framework - otherwise framework fails to create graph - rdfStoreUserManager.setRdfGraphPermissions(frameworkConfig.getSparqlFrameworkLogin(), userSettingsGraphURI, 3); + rdfStoreUserManager.setRdfGraphPermissions(frameworkConfig.getAuthSparqlUser(), userSettingsGraphURI, 3); rdfStoreManager.createGraph(userSettingsGraphURI); //grant write permissions to user rdfStoreUserManager.setRdfGraphPermissions(rdfStoreUser, userSettingsGraphURI, 3); // todo deny access for user? @@ -76,8 +77,15 @@ public void createUser(String name, String password, String email) throws Except String query = getPrefixes() + "\n" + "INSERT INTO <" + userSettingsGraphURI + "> {?s ?p ?o} " + "WHERE {GRAPH <" + frameworkConfig.getInitialSettingsGraph() + "> {?s ?p ?o} }"; - rdfStoreManager.execute(query, jsonResponseFormat); - + try{ + rdfStoreManager.execute(query, jsonResponseFormat); + } + catch(IOException e) + { // failed to write user graph + // rollback actions: + rdfStoreUserManager.dropUser(rdfStoreUser); + throw e; + } // write user account to accounts graph query = getPrefixes() + "\n" + "INSERT DATA { GRAPH <" + frameworkConfig.getAccountsGraph() + "> {\n" @@ -90,8 +98,17 @@ public void createUser(String name, String password, String email) throws Except + " :" + name + " foaf:mbox .\n" + " :" + name + " dcterms:created \"" + ISO8601Utils.format(new Date()) + "\"^^xsd:date .\n" + "} }"; - rdfStoreManager.execute(query, jsonResponseFormat); - + + try{ + rdfStoreManager.execute(query, jsonResponseFormat); + } + catch(IOException e) + { // failed to register user in to the accounts graph + // rollback actions: + rdfStoreUserManager.dropUser(rdfStoreUser); + rdfStoreManager.dropGraph(userSettingsGraphURI); + throw e; + } //todo delete Virtuoso user if failed to write account triples } @@ -623,12 +640,12 @@ public String getDescribedIn(String graph) throws Exception { private String getPrefixes() { if (prefixes==null) { - prefixes = "PREFIX : <" + frameworkConfig.getAccountsNamespace() + ">\n" - + "PREFIX ao: <" + frameworkConfig.getAccountsOntologyNamespace() + ">\n" + prefixes ="PREFIX : <" + frameworkConfig.getResourceNamespace() + ">\n" + + "PREFIX ao: <" + frameworkConfig.getAccountsOntologyNamespace() + ">\n" + + "PREFIX gkg: <"+ frameworkConfig.getFrameworkOntologyNS() +">\n" + "PREFIX rdf: \n" + "PREFIX user: \n" + "PREFIX sd: \n" - + "PREFIX gkg: \n" + "PREFIX acl: \n" + "PREFIX foaf: \n" + "PREFIX dcterms: "; @@ -662,7 +679,7 @@ private boolean checkUserExists(String username, String email) throws Exception private Collection getSettingsGraphs() throws Exception { Collection settingsGraphList = new ArrayList(); - settingsGraphList.add(frameworkConfig.getDefaultSettingsGraph()); + settingsGraphList.add(frameworkConfig.getSettingsGraph()); String query = getPrefixes() + "\n" + " SELECT DISTINCT ?sg FROM <" + frameworkConfig.getAccountsGraph() + "> " + " WHERE { ?account ao:settingsGraph ?sg }"; diff --git a/src/main/java/accounts/VirtuosoUserManager.java b/src/main/java/accounts/VirtuosoUserManager.java index ba31bd3..c1ebadf 100644 --- a/src/main/java/accounts/VirtuosoUserManager.java +++ b/src/main/java/accounts/VirtuosoUserManager.java @@ -12,6 +12,12 @@ public class VirtuosoUserManager implements UserManager { private String password; private Connection connection; + /** + * This class manages the User creation in virtuoso for authentication and graph access control + * @param connectionString Connection string to Virtuoso + * @param user Virtuoso user + * @param password Virtuoso password + */ public VirtuosoUserManager(String connectionString, String user, String password) { this.connectionString = connectionString; this.user = user; @@ -31,7 +37,7 @@ public void dropUser(String name) throws Exception { @Override public void grantRole(String user, String role) throws Exception { - executeUpdate(getConnection(), "GRANT " + role + " TO \"" + user + "\""); + executeUpdate(getConnection(), "GRANT " + role + " TO \"" + user + "\""); } @Override diff --git a/src/main/java/authentication/FrameworkConfiguration.java b/src/main/java/authentication/FrameworkConfiguration.java index b53acfd..1caab1b 100644 --- a/src/main/java/authentication/FrameworkConfiguration.java +++ b/src/main/java/authentication/FrameworkConfiguration.java @@ -1,94 +1,265 @@ package authentication; +import java.io.ByteArrayOutputStream; +import java.io.IOException; + import javax.servlet.ServletContext; -import accounts.FrameworkUserManager; -import accounts.VirtuosoUserManager; +import org.apache.jena.riot.RiotException; + import rdf.SecureRdfStoreManagerImpl; import util.EmailSender; import util.SSLEmailSender; import util.TLSEmailSender; +import accounts.FrameworkUserManager; +import accounts.VirtuosoUserManager; + +import com.hp.hpl.jena.query.QueryExecution; +import com.hp.hpl.jena.query.QueryExecutionFactory; +import com.hp.hpl.jena.query.QuerySolution; +import com.hp.hpl.jena.query.ResultSet; +import com.hp.hpl.jena.rdf.model.Model; +import com.hp.hpl.jena.rdf.model.ModelFactory; public class FrameworkConfiguration { - //virtuoso jdbc - // private String virtuosoJdbcConnString = "jdbc:virtuoso://localhost:1111"; - // private String virtuosoDbaUser = "dba"; - // private String virtuosoDbaPassword = "dba"; - - //virtuoso sparql - // private String sparqlEndpoint = "http://localhost:8890/sparql-auth"; - // private String publicSparqlEndpoint = "http://localhost:8890/sparql"; - // private String sparqlFrameworkLogin = "generator"; - // private String sparqlFrameworkPassword = "generator"; - - // //system graphs - // private String accountsGraph = "http://generator.geoknow.eu/accounts/accountsGraph"; - // private String defaultSettingsGraph = "http://generator.geoknow.eu/resource/settingsGraph"; //settings for unauthorized users - // private String initialSettingsGraph = "http://generator.geoknow.eu/resource/initialSettingsGraph"; //initial setting for new users - // private String groupsGraph = "http://generator.geoknow.eu/resource/graphGroups"; - - // //namespaces - // private String accountsNamespace = "http://generator.geoknow.eu/accounts/"; - // private String accountsOntologyNamespace = "http://generator.geoknow.eu/accounts/ontology/"; - // private String resourceNamespace = "http://generator.geoknow.eu/resource/"; - - - //email - private String smtpHost = "smtp.gmail.com"; + + //email registration notifications + private String smtpHost = ""; private String smtpTLSPort = "587"; private String smtpSSLPort = "465"; - //set this parameters before run private String emailAddress = ""; private String emailUsername = ""; private String emailPassword = ""; + private String accountsOntologyNS = ""; + private String resourceNS = ""; + private String frameworkOntologyNS = ""; + + private String virtuosoJdbcConnString = ""; private String virtuosoDbaUser = ""; private String virtuosoDbaPassword = ""; + + private String publicSparqlEndpoint = ""; private String authSparqlEndpoint = ""; - private String sparqlFrameworkLogin = ""; - private String sparqlFrameworkPassword = ""; - private String accountsNamespace = ""; - private String accountsOntologyNamespace = ""; + private String AuthSparqlUser = ""; + private String AuthSparqlPassword = ""; + private String accountsGraph = ""; - private String defaultSettingsGraph = ""; + private String settingsGraph = ""; private String initialSettingsGraph = ""; - private String resourceNamespace = ""; - private String publicSparqlEndpoint = ""; private String groupsGraph = ""; - private String virtuosoJdbcConnString = ""; + private static FrameworkConfiguration instance; - public static synchronized FrameworkConfiguration getInstance(ServletContext context) { + public static synchronized FrameworkConfiguration getInstance(ServletContext context) throws Exception { + if (instance==null){ + instance = new FrameworkConfiguration(); - - instance.setVirtuosoJdbcConnString(context.getInitParameter("jdbc-virtuoso-conn-string")); - instance.setVirtuosoDbaUser(context.getInitParameter("virtuoso-dba-user")); - instance.setVirtuosoDbaPassword(context.getInitParameter("virtuoso-dba-password")); - instance.setAuthSparqlEndpoint(context.getInitParameter("sparql-auth-endpoint")); - instance.setSparqlFrameworkLogin(context.getInitParameter("framework-user")); - instance.setSparqlFrameworkPassword(context.getInitParameter("framework-password")); - instance.setAccountsNamespace(context.getInitParameter("users-accounts-ns")); - instance.setAccountsOntologyNamespace(context.getInitParameter("users-accounts-ontology")); - instance.setAccountsGraph(context.getInitParameter("users-accounts-graph")); - instance.setDefaultSettingsGraph(context.getInitParameter("guest-settings-graph")); - instance.setInitialSettingsGraph(context.getInitParameter("new-user-settings")); + + String configurationFile = "framework-configuration.ttl"; + String graphsFile = "framework-graphs.ttl"; + String datasetsFile = "framework-datasets.ttl"; + String componentsFile = "framework-components.ttl"; + String ontologyFile = "framework-ontology.ttl"; + String accountsOntologyFile = "framework-accounts-ontology.ttl"; + + String frameworkUri = context.getInitParameter("framework-uri"); + + instance.setFrameworkOntologyNS(context.getInitParameter("framework-ontology-ns")); + instance.setAccountsOntologyNamespace(context.getInitParameter("accounts-ns")); instance.setResourceNamespace(context.getInitParameter("framework-ns")); - instance.setPublicSparqlEndpoint(context.getInitParameter("sparql-public-endpoint")); - instance.setGroupsGraph(context.getInitParameter("groups-graph")); + + instance.setSmtpHost(context.getInitParameter("smtp-host")); + instance.setSmtpTLSPort(context.getInitParameter("smpt-tls-port")); + instance.setSmtpSSLPort(context.getInitParameter("smtp-ssl-port")); + instance.setEmailAddress(context.getInitParameter("email")); + instance.setEmailUsername(context.getInitParameter("user-name")); + instance.setEmailPassword(context.getInitParameter("password")); + + + Model configurationModel = ModelFactory.createDefaultModel() ; + Model graphsModel = ModelFactory.createDefaultModel() ; + + try { + configurationModel.read(configurationFile); + graphsModel.read(graphsFile); + } + catch(RiotException e){ + throw new IOException ("Malformed "+ configurationFile + " or " + graphsFile+ " file"); + } + // get and set the properties framework configutation (endpoints and credentials) + String query = "PREFIX lds: " + + " SELECT ?endpoint WHERE {" + + " <"+ frameworkUri +"> lds:integrates ?component ." + + " ?component lds:providesService ?service ." + + " ?service a lds:SPARQLEndPointService ." + + " ?service lds:serviceUrl ?endpoint }"; + + QueryExecution qexec = QueryExecutionFactory.create(query, configurationModel) ; + ResultSet results = qexec.execSelect() ; + if (!results.hasNext()) throw new NullPointerException("Invalid initial parameter required"); + for ( ; results.hasNext() ; ){ + QuerySolution soln = results.next() ; + instance.setPublicSparqlEndpoint (soln.get("endpoint").toString()); + } + qexec.close() ; + + query = "PREFIX lds: " + + " SELECT ?endpoint ?user ?password WHERE {" + + " <"+ frameworkUri +"> lds:integrates ?component ." + + " ?component lds:providesService ?service ." + + " ?service a lds:SecuredSPARQLEndPointService ." + + " ?service lds:serviceUrl ?endpoint ." + + " ?service lds:user ?user ." + + " ?service lds:password ?password }"; + + qexec = QueryExecutionFactory.create(query, configurationModel) ; + results = qexec.execSelect() ; + if (!results.hasNext()) throw new NullPointerException("Invalid initial parameter required"); + for ( ; results.hasNext() ; ){ + QuerySolution soln = results.next() ; + instance.setAuthSparqlEndpoint (soln.get("endpoint").toString()); + instance.setAuthSparqlUser (soln.get("user").asLiteral().getString()); + instance.setAuthSparqlPassword (soln.get("password").asLiteral().getString()); + } + qexec.close() ; + + // get and set the database configuration (Virtuoso) + query = "PREFIX lds: " + + " SELECT ?connectionString ?user ?password WHERE {" + + " <"+ frameworkUri +"> lds:integrates ?component ." + + " ?component lds:providesService ?service ." + + " ?service a lds:StorageService ." + + " ?service lds:connectionString ?connectionString ." + + " ?service lds:user ?user ." + + " ?service lds:password ?password }"; + qexec = QueryExecutionFactory.create(query, configurationModel) ; + results = qexec.execSelect() ; + if (!results.hasNext()) throw new NullPointerException("Invalid initial parameter required"); + for ( ; results.hasNext() ; ){ + QuerySolution soln = results.next() ; + instance.setVirtuosoJdbcConnString (soln.get("connectionString").asLiteral().getString()); + instance.setVirtuosoDbaUser (soln.get("user").asLiteral().getString()); + instance.setVirtuosoDbaPassword (soln.get("password").asLiteral().getString()); + } + qexec.close() ; + + // get and set the named graphs + query = "PREFIX sd: " + + "PREFIX rdfs: " + + "SELECT ?name ?label " + + "WHERE " + + "{ ?s sd:namedGraph ?o . ?o sd:name ?name . ?o sd:graph ?g . ?g rdfs:label ?label } "; + + qexec = QueryExecutionFactory.create(query, graphsModel) ; + results = qexec.execSelect() ; + if (!results.hasNext()) throw new NullPointerException("Invalid initial parameter required"); + for ( ; results.hasNext() ; ){ + QuerySolution soln = results.next() ; + + if("settings".equals(soln.get("label").asLiteral().getString())) + instance.setSettingsGraph(soln.get("name").toString()); + else if("initialSettings".equals(soln.get("label").asLiteral().getString())) + instance.setInitialSettingsGraph(soln.get("name").toString()); + else if("accounts".equals(soln.get("label").asLiteral().getString())) + instance.setAccountsGraph(soln.get("name").toString()); + else if("groups".equals(soln.get("label").asLiteral().getString())) + instance.setGroupsGraph(soln.get("name").toString()); + } + qexec.close() ; + + // creates the system user exist for the application in virtuoso + VirtuosoUserManager userManager = instance.getVirtuosoUserManager(); + try { + userManager.createUser(instance.getAuthSparqlUser(), instance.getAuthSparqlPassword()); + userManager.grantRole(instance.getAuthSparqlUser(), "SPARQL_UPDATE"); + userManager.setDefaultRdfPermissions(instance.getAuthSparqlUser(), 3); + }catch(Exception e){ + if ("virtuoso.jdbc4.VirtuosoException".equals(e.getClass().getCanonicalName()) ) + System.out.println("Seems that the user is already there"); + else + throw e; + } + + SecureRdfStoreManagerImpl frameworkRdfStoreManager = new SecureRdfStoreManagerImpl(instance.getAuthSparqlEndpoint(), + instance.getAuthSparqlUser() , instance.getAuthSparqlPassword()); + + // check if settingsGraph exist do not overwrite + String queryString = " ASK { GRAPH <"+instance.getSettingsGraph()+"> {?s a ?o} }"; + String response = frameworkRdfStoreManager.execute(queryString, "text/plain"); + if(response.toLowerCase().indexOf("true")<0){ + + System.out.println("Create required graphs and load default settings"); + + //Read configuration files + Model datrasetModel = ModelFactory.createDefaultModel(); + Model componentsModel = ModelFactory.createDefaultModel(); + Model ontologyModel = ModelFactory.createDefaultModel(); + Model ontologyAccountsModel = ModelFactory.createDefaultModel(); + + try { + datrasetModel.read(datasetsFile) ; + componentsModel.read(componentsFile) ; + ontologyModel.read(ontologyFile) ; + ontologyAccountsModel.read(accountsOntologyFile); + } + catch(RiotException e){ + throw new IOException ("Malformed configuration files"); + } + + // create required named graphs and load the configuration files using framework default user + frameworkRdfStoreManager.createGraph(instance.getSettingsGraph()); + frameworkRdfStoreManager.createGraph(instance.getAccountsGraph()); + frameworkRdfStoreManager.createGraph(instance.getGroupsGraph() ); + frameworkRdfStoreManager.createGraph(instance.getInitialSettingsGraph() ); + + //Make graphs accessible to framework user only + userManager.setRdfGraphPermissions(instance.getAuthSparqlUser(), instance.getSettingsGraph(), 3); + userManager.setRdfGraphPermissions(instance.getAuthSparqlUser(), instance.getAccountsGraph(), 3); + userManager.setRdfGraphPermissions(instance.getAuthSparqlUser(), instance.getGroupsGraph(), 3); + userManager.setRdfGraphPermissions(instance.getAuthSparqlUser(), instance.getInitialSettingsGraph(), 3); + + Model settingsModel = ModelFactory.createDefaultModel(); + settingsModel.add(configurationModel); + settingsModel.add(datrasetModel ); + settingsModel.add(componentsModel); + settingsModel.add(ontologyModel ); + // write the initial settings model (default settings for new users) + ByteArrayOutputStream os = new ByteArrayOutputStream(); + settingsModel.write(os, "N-TRIPLES"); + queryString = "INSERT DATA { GRAPH <" + instance.getInitialSettingsGraph() + "> { " + os.toString() + " } }"; + os.close(); + frameworkRdfStoreManager.execute(queryString, null); + + // write the system settings model (include system graphs data) + os = new ByteArrayOutputStream(); + settingsModel.write(os, "N-TRIPLES"); + settingsModel.add(graphsModel); + queryString = "INSERT DATA { GRAPH <" + instance.getSettingsGraph() + "> { " + os.toString() + " } }"; + os.close(); + frameworkRdfStoreManager.execute(queryString, null); + + // create and add accounts ontology to the accounts graph + os = new ByteArrayOutputStream(); + ontologyAccountsModel.write(os, "N-TRIPLES"); + queryString = "INSERT DATA { GRAPH <" + instance.getAccountsGraph() + "> { " + os.toString() + " } }"; + os.close(); + frameworkRdfStoreManager.execute(queryString, null); + } } + return instance; } - public FrameworkUserManager getFrameworkUserManager() { - return new FrameworkUserManager(new VirtuosoUserManager(getVirtuosoJdbcConnString(), getVirtuosoDbaUser(), getVirtuosoDbaPassword()), - new SecureRdfStoreManagerImpl(getAuthSparqlEndpoint(), getSparqlFrameworkLogin(), getSparqlFrameworkPassword()), instance); + return new FrameworkUserManager(new VirtuosoUserManager(this.virtuosoJdbcConnString, this.virtuosoDbaUser, this.virtuosoDbaPassword), + new SecureRdfStoreManagerImpl(this.authSparqlEndpoint, this.AuthSparqlUser, this.AuthSparqlPassword), instance); } public VirtuosoUserManager getVirtuosoUserManager() { - return new VirtuosoUserManager(getVirtuosoJdbcConnString(), getVirtuosoDbaUser(), getVirtuosoDbaPassword()); + return new VirtuosoUserManager(this.virtuosoJdbcConnString, this.virtuosoDbaUser, this.virtuosoDbaPassword); } public EmailSender getDefaultEmailSender() { @@ -96,11 +267,11 @@ public EmailSender getDefaultEmailSender() { } public EmailSender getTLSEmailSender() { - return new TLSEmailSender(smtpHost, smtpTLSPort, emailAddress, emailUsername, emailPassword); + return new TLSEmailSender(this.smtpHost, this.smtpTLSPort, this.emailAddress, this.emailUsername, this.emailPassword); } public EmailSender getSSLEmailSender() { - return new SSLEmailSender(smtpHost, smtpSSLPort, emailAddress, emailUsername, emailPassword); + return new SSLEmailSender(this.smtpHost, this.smtpSSLPort, this.emailAddress, this.emailUsername, this.emailPassword); } public String getSmtpHost() { @@ -175,36 +346,36 @@ public void setAuthSparqlEndpoint(String authSparqlEndpoint) { this.authSparqlEndpoint = authSparqlEndpoint; } - public String getSparqlFrameworkLogin() { - return sparqlFrameworkLogin; + public String getAuthSparqlUser() { + return AuthSparqlUser; } - public void setSparqlFrameworkLogin(String sparqlFrameworkLogin) { - this.sparqlFrameworkLogin = sparqlFrameworkLogin; + public void setAuthSparqlUser(String authSparqlUser) { + this.AuthSparqlUser = authSparqlUser; } - public String getSparqlFrameworkPassword() { - return sparqlFrameworkPassword; + public String getAuthSparqlPassword() { + return AuthSparqlPassword; } - public void setSparqlFrameworkPassword(String sparqlFrameworkPassword) { - this.sparqlFrameworkPassword = sparqlFrameworkPassword; + public void setAuthSparqlPassword(String authSparqlPassword) { + this.AuthSparqlPassword = authSparqlPassword; } - public String getAccountsNamespace() { - return accountsNamespace; - } - - public void setAccountsNamespace(String accountsNamespace) { - this.accountsNamespace = accountsNamespace; - } + // public String getAccountsNamespace() { + // return accountsNamespace; + // } + // + // public void setAccountsNamespace(String accountsNamespace) { + // this.accountsNamespace = accountsNamespace; + // } public String getAccountsOntologyNamespace() { - return accountsOntologyNamespace; + return accountsOntologyNS; } - public void setAccountsOntologyNamespace(String accountsOntologyNamespace) { - this.accountsOntologyNamespace = accountsOntologyNamespace; + public void setAccountsOntologyNamespace(String accountsNamespace) { + this.accountsOntologyNS = accountsNamespace; } public String getAccountsGraph() { @@ -215,12 +386,12 @@ public void setAccountsGraph(String accountsGraph) { this.accountsGraph = accountsGraph; } - public String getDefaultSettingsGraph() { - return defaultSettingsGraph; + public String getSettingsGraph() { + return settingsGraph; } - public void setDefaultSettingsGraph(String defaultSettingsGraph) { - this.defaultSettingsGraph = defaultSettingsGraph; + public void setSettingsGraph(String settingsGraph) { + this.settingsGraph = settingsGraph; } public String getInitialSettingsGraph() { @@ -232,11 +403,11 @@ public void setInitialSettingsGraph(String initialSettingsGraph) { } public String getResourceNamespace() { - return resourceNamespace; + return resourceNS; } public void setResourceNamespace(String resourceNamespace) { - this.resourceNamespace = resourceNamespace; + this.resourceNS = resourceNamespace; } public String getPublicSparqlEndpoint() { @@ -262,4 +433,12 @@ public String getVirtuosoJdbcConnString() { public void setVirtuosoJdbcConnString(String virtuosoJdbcConnString) { this.virtuosoJdbcConnString = virtuosoJdbcConnString; } + + public String getFrameworkOntologyNS() { + return frameworkOntologyNS; + } + + public void setFrameworkOntologyNS(String frameworkOntologyNS) { + this.frameworkOntologyNS = frameworkOntologyNS; + } } diff --git a/src/main/java/authentication/web/AuthenticationServlet.java b/src/main/java/authentication/web/AuthenticationServlet.java index 49dff6d..ff9aa71 100644 --- a/src/main/java/authentication/web/AuthenticationServlet.java +++ b/src/main/java/authentication/web/AuthenticationServlet.java @@ -15,17 +15,29 @@ import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; + +import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.UUID; public class AuthenticationServlet extends HttpServlet { - private FrameworkUserManager frameworkUserManager; + /** + * + */ + private static final long serialVersionUID = 1L; + private FrameworkUserManager frameworkUserManager; @Override public void init(ServletConfig config) throws ServletException { super.init(config); - frameworkUserManager = FrameworkConfiguration.getInstance(getServletContext()).getFrameworkUserManager(); + try { + frameworkUserManager = FrameworkConfiguration.getInstance(getServletContext()).getFrameworkUserManager(); + } catch (FileNotFoundException e) { + throw new ServletException(e); + } catch (Exception e) { + throw new ServletException(e); + } } @@ -96,12 +108,15 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) t throw new ServletException("Failed to create account " + username, e); } - EmailSender emailSender = FrameworkConfiguration.getInstance(getServletContext()).getDefaultEmailSender(); try { + EmailSender emailSender = FrameworkConfiguration.getInstance(getServletContext()).getDefaultEmailSender(); + emailSender.send(email, "GeoKnow registration", "Your login: " + username + ", password: " + password); } catch (MessagingException e) { throw new ServletException(e); - } + } catch (Exception e) { + throw new ServletException(e); + } String responseStr = "{\"message\" : \"Your password will be sent to your e-mail address " + email + " \"}"; response.getWriter().print(responseStr); @@ -152,12 +167,15 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) t } //send new password to user - EmailSender emailSender = FrameworkConfiguration.getInstance(getServletContext()).getDefaultEmailSender(); + try { + EmailSender emailSender = FrameworkConfiguration.getInstance(getServletContext()).getDefaultEmailSender(); emailSender.send(userProfile.getEmail(), "GeoKnow restore password", "Your login: " + username + ", password: " + password); } catch (MessagingException e) { throw new ServletException(e); - } + } catch (Exception e) { + throw new ServletException(e); + } String responseStr = "{\"message\" : \"New password will be sent to your e-mail address " + userProfile.getEmail() + " \"}"; response.getWriter().print(responseStr); diff --git a/src/main/java/authentication/web/GraphManagerServlet.java b/src/main/java/authentication/web/GraphManagerServlet.java index ed6ec59..4642ca2 100644 --- a/src/main/java/authentication/web/GraphManagerServlet.java +++ b/src/main/java/authentication/web/GraphManagerServlet.java @@ -17,22 +17,36 @@ import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; + +import java.io.FileNotFoundException; import java.io.IOException; import java.util.*; public class GraphManagerServlet extends HttpServlet { - private FrameworkUserManager frameworkUserManager; + /** + * + */ + private static final long serialVersionUID = 1L; + private FrameworkUserManager frameworkUserManager; private VirtuosoUserManager virtuosoUserManager; private VirtuosoGraphGroupManager virtuosoGraphGroupManager; @Override public void init(ServletConfig config) throws ServletException { super.init(config); - FrameworkConfiguration frameworkConfig = FrameworkConfiguration.getInstance(getServletContext()); + FrameworkConfiguration frameworkConfig; + try { + frameworkConfig = FrameworkConfiguration.getInstance(getServletContext()); + frameworkUserManager = frameworkConfig.getFrameworkUserManager(); virtuosoUserManager = frameworkConfig.getVirtuosoUserManager(); virtuosoGraphGroupManager = new VirtuosoGraphGroupManager(frameworkConfig.getVirtuosoJdbcConnString(), frameworkConfig.getVirtuosoDbaUser(), frameworkConfig.getVirtuosoDbaPassword()); + } catch (FileNotFoundException e) { + throw new ServletException(e); + } catch (Exception e) { + throw new ServletException(e); + } } @Override @@ -95,7 +109,7 @@ protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws S //remove graph from graph groups descriptions FrameworkConfiguration frameworkConf = FrameworkConfiguration.getInstance(getServletContext()); RdfStoreManager frameworkRdfStoreManager = new SecureRdfStoreManagerImpl(frameworkConf.getAuthSparqlEndpoint(), - frameworkConf.getSparqlFrameworkLogin(), frameworkConf.getSparqlFrameworkPassword()); + frameworkConf.getAuthSparqlUser(), frameworkConf.getAuthSparqlPassword()); String query = "PREFIX sd: " + " WITH <" + frameworkConf.getGroupsGraph() + "> DELETE {?s sd:namedGraph <" + graph + ">} " + " WHERE {?s sd:namedGraph <" + graph + ">}"; @@ -134,7 +148,7 @@ protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws S //update metadata FrameworkConfiguration frameworkConf = FrameworkConfiguration.getInstance(getServletContext()); RdfStoreManager frameworkRdfStoreManager = new SecureRdfStoreManagerImpl(frameworkConf.getAuthSparqlEndpoint(), - frameworkConf.getSparqlFrameworkLogin(), frameworkConf.getSparqlFrameworkPassword()); + frameworkConf.getAuthSparqlUser(), frameworkConf.getAuthSparqlPassword()); String graphLabel = graphNode.path("graph").path("label").getTextValue(); String graphDescription = graphNode.path("graph").path("description").getTextValue(); @@ -184,7 +198,7 @@ else if (publicAccess.equals("acl:Write")) String settingsGraph = frameworkUserManager.getDescribedIn(graph); FrameworkConfiguration frameworkConf = FrameworkConfiguration.getInstance(getServletContext()); RdfStoreManager frameworkRdfStoreManager = new SecureRdfStoreManagerImpl(frameworkConf.getAuthSparqlEndpoint(), - frameworkConf.getSparqlFrameworkLogin(), frameworkConf.getSparqlFrameworkPassword()); + frameworkConf.getAuthSparqlUser(), frameworkConf.getAuthSparqlPassword()); String query = "PREFIX sd: \n" + "PREFIX gkg: \n" + "WITH <" + settingsGraph + "> " diff --git a/src/main/java/authentication/web/HttpRequestManager.java b/src/main/java/authentication/web/HttpRequestManager.java index 2e9886f..a90fcf0 100644 --- a/src/main/java/authentication/web/HttpRequestManager.java +++ b/src/main/java/authentication/web/HttpRequestManager.java @@ -10,192 +10,201 @@ import java.net.URL; import java.util.List; +import javax.xml.ws.http.HTTPException; + + public class HttpRequestManager { - public static String executePost(String url, String urlParameters) throws Exception { - return readResult(sendPost(url, urlParameters)); - } - - public static String executePost(String url, String urlParameters, String username, String password) throws Exception { - System.out.println("Execute POST to " + url + " with parameters " + urlParameters); - HttpURLConnection connection = sendPost(url, urlParameters); - int responseCode = connection.getResponseCode(); - if (responseCode==401) { //unauthorized - WWWAuthenticateHeader wwwAuthenticateHeader = getWWWAuthenticationHeader(connection); - if (wwwAuthenticateHeader.isDigest()) { - // send authorized request - connection = sendAuthorizedPost(url, urlParameters, wwwAuthenticateHeader, username, password); - System.out.println("Response Code : " + connection.getResponseCode()); - System.out.println("Response Message : " + connection.getResponseMessage()); - return readResult(connection); - } else - throw new Exception("Unsupported authentication type: " + wwwAuthenticateHeader.getAuthenticationScheme()); - } else { - return readResult(connection); - } - } - - private static HttpURLConnection sendPost(String url, String urlParameters) throws IOException { - URL targetURL = new URL(url); - HttpURLConnection connection = (HttpURLConnection) targetURL.openConnection(); - connection.setDoOutput(true); - connection.setDoInput(true); - connection.setInstanceFollowRedirects(false); - connection.setRequestMethod("POST"); - connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); - connection.setRequestProperty("charset", "utf-8"); - connection.setRequestProperty("Content-Length", "" + Integer.toString(urlParameters.getBytes().length)); - connection.setUseCaches(false); - DataOutputStream wr = new DataOutputStream(connection.getOutputStream ()); - wr.writeBytes(urlParameters); - wr.flush(); - wr.close(); - return connection; - } - - private static HttpURLConnection sendAuthorizedPost(String url, String urlParameters, WWWAuthenticateHeader wwwAuthenticateHeader, - String username, String password) - throws Exception - { - System.out.println("Execute authorized POST to " + url); - URL targetURL = new URL(url); - HttpURLConnection connection = (HttpURLConnection) targetURL.openConnection(); - connection.setDoOutput(true); - connection.setDoInput(true); - connection.setInstanceFollowRedirects(false); - connection.setRequestMethod("POST"); - connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); - connection.setRequestProperty("charset", "utf-8"); - connection.setRequestProperty("Content-Length", "" + Integer.toString(urlParameters.getBytes().length)); - connection.setUseCaches(false); - connection.setRequestProperty("Authorization", getDigestAuthorizationProperty(url, wwwAuthenticateHeader, username, password, "POST")); - DataOutputStream wr = new DataOutputStream(connection.getOutputStream()); - wr.writeBytes(urlParameters); - wr.flush(); - wr.close(); - return connection; - } - - private static WWWAuthenticateHeader getWWWAuthenticationHeader(HttpURLConnection connection) { - List authenticateParams = connection.getHeaderFields().get("WWW-Authenticate"); - if (authenticateParams==null) - return null; - WWWAuthenticateHeader wwwAuthenticateHeader = new WWWAuthenticateHeader(); - for (String s : authenticateParams) { - String[] fields = s.split(","); - for (String f : fields) { - String[] pair = f.trim().split("="); - String paramName = pair[0].trim(); - String paramValue = pair[1].trim(); - if (paramValue.startsWith("\"") && paramValue.endsWith("\"")) - paramValue = paramValue.substring(1, paramValue.length()-1); - if (paramName.startsWith("Digest")) { - wwwAuthenticateHeader.setAuthenticationScheme("digest"); - paramName = paramName.substring("Digest".length()).trim(); - } - wwwAuthenticateHeader.set(paramName, paramValue); - } - } - return wwwAuthenticateHeader; - } - - private static String getDigestAuthorizationProperty(String endpoint, WWWAuthenticateHeader wwwAuthenticateHeader, - String username, String password, String requestMethod) - throws Exception - { - if (!wwwAuthenticateHeader.isDigest()) - throw new Exception("Unexpected authentication scheme " + wwwAuthenticateHeader.getAuthenticationScheme() + ", Digest expected"); - String nc = "00000001"; - String cnonce = DigestUtils.md5Hex(Long.toString(System.currentTimeMillis())); - String a1 = DigestUtils.md5Hex(username + ":" + wwwAuthenticateHeader.getRealm() + ":" + password); - String a2 = DigestUtils.md5Hex(requestMethod + ":" + endpoint); - String hash = DigestUtils.md5Hex(a1 + ":" + wwwAuthenticateHeader.getNonce() + ":" + nc + ":" + cnonce + ":" + wwwAuthenticateHeader.getQop() + ":" + a2); - return "Digest username=\"" + username + "\"" + - ", realm=" + wwwAuthenticateHeader.getRealm() + - ", nonce=" + wwwAuthenticateHeader.getNonce() + - ", uri=" + endpoint + - ", response=" + hash + - ", opaque=" + wwwAuthenticateHeader.getOpaque() + - ", qop=" + wwwAuthenticateHeader.getQop() + - ", nc=" + nc + - ", cnonce=" + cnonce; - } - - private static String readResult(HttpURLConnection connection) throws IOException { - BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); - String inputLine; - StringBuilder response = new StringBuilder(); - while ((inputLine = in.readLine()) != null) { - response.append(inputLine).append("\n"); - } - in.close(); - return response.toString(); - } - - public static class WWWAuthenticateHeader { - private String realm; - private String domain; - private String nonce; - private String opaque; - private String stale; - private String qop; - private String algorithm; - private String authenticationScheme; - - public void set(String paramName, String paramValue) { - if (paramName.equals("realm")) - realm = paramValue; - else if (paramName.equals("domain")) - domain = paramValue; - else if (paramName.equals("nonce")) - nonce = paramValue; - else if (paramName.equals("opaque")) - opaque = paramValue; - else if (paramName.equals("stale")) - stale = paramValue; - else if (paramName.equals("qop")) - qop = paramValue; - else if (paramName.equals("algorithm")) - algorithm = paramValue; - } - - public String getRealm() { - return realm; - } - - public String getDomain() { - return domain; - } - - public String getNonce() { - return nonce; - } - - public String getOpaque() { - return opaque; - } - - public String getStale() { - return stale; - } - - public String getQop() { - return qop; - } - - public String getAlgorithm() { - return algorithm; - } - - public String getAuthenticationScheme() { - return authenticationScheme; - } - - public void setAuthenticationScheme(String authenticationScheme) { - this.authenticationScheme = authenticationScheme; - } - - public boolean isDigest() { - return authenticationScheme !=null && authenticationScheme.toLowerCase().equals("digest"); - } - } + public static String executePost(String url, String urlParameters) throws Exception { + return readResult(sendPost(url, urlParameters)); + } + + public static String executePost(String url, String urlParameters, String username, String password) throws Exception { + // TODO: Add a debug mode for these information + // System.out.println("Execute POST to " + url + " with parameters " + urlParameters); + HttpURLConnection connection = sendPost(url, urlParameters); + int responseCode = connection.getResponseCode(); + switch (responseCode) { + case 200: + return readResult(connection); + case 401: //unauthorized + WWWAuthenticateHeader wwwAuthenticateHeader = getWWWAuthenticationHeader(connection); + if (wwwAuthenticateHeader.isDigest()) { + // send authorized request + connection = sendAuthorizedPost(url, urlParameters, wwwAuthenticateHeader, username, password); + System.out.println("Response Code : " + connection.getResponseCode()); + System.out.println("Response Message : " + connection.getResponseMessage()); + return readResult(connection); + } else + throw new Exception("Unsupported authentication type: " + wwwAuthenticateHeader.getAuthenticationScheme()); + default: + throw new HTTPException(responseCode); + } + + + } + + private static HttpURLConnection sendPost(String url, String urlParameters) throws IOException { + URL targetURL = new URL(url); + HttpURLConnection connection = (HttpURLConnection) targetURL.openConnection(); + connection.setDoOutput(true); + connection.setDoInput(true); + connection.setInstanceFollowRedirects(false); + connection.setRequestMethod("POST"); + connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); + connection.setRequestProperty("charset", "utf-8"); + connection.setRequestProperty("Content-Length", "" + Integer.toString(urlParameters.getBytes().length)); + connection.setUseCaches(false); + DataOutputStream wr = new DataOutputStream(connection.getOutputStream ()); + wr.writeBytes(urlParameters); + wr.flush(); + wr.close(); + return connection; + } + + private static HttpURLConnection sendAuthorizedPost(String url, String urlParameters, WWWAuthenticateHeader wwwAuthenticateHeader, + String username, String password) + throws Exception + { + System.out.println("Execute authorized POST to " + url); + URL targetURL = new URL(url); + HttpURLConnection connection = (HttpURLConnection) targetURL.openConnection(); + connection.setDoOutput(true); + connection.setDoInput(true); + connection.setInstanceFollowRedirects(false); + connection.setRequestMethod("POST"); + connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); + connection.setRequestProperty("charset", "utf-8"); + connection.setRequestProperty("Content-Length", "" + Integer.toString(urlParameters.getBytes().length)); + connection.setUseCaches(false); + connection.setRequestProperty("Authorization", getDigestAuthorizationProperty(url, wwwAuthenticateHeader, username, password, "POST")); + DataOutputStream wr = new DataOutputStream(connection.getOutputStream()); + wr.writeBytes(urlParameters); + wr.flush(); + wr.close(); + return connection; + } + + private static WWWAuthenticateHeader getWWWAuthenticationHeader(HttpURLConnection connection) { + List authenticateParams = connection.getHeaderFields().get("WWW-Authenticate"); + if (authenticateParams==null) + return null; + WWWAuthenticateHeader wwwAuthenticateHeader = new WWWAuthenticateHeader(); + for (String s : authenticateParams) { + String[] fields = s.split(","); + for (String f : fields) { + String[] pair = f.trim().split("="); + String paramName = pair[0].trim(); + String paramValue = pair[1].trim(); + if (paramValue.startsWith("\"") && paramValue.endsWith("\"")) + paramValue = paramValue.substring(1, paramValue.length()-1); + if (paramName.startsWith("Digest")) { + wwwAuthenticateHeader.setAuthenticationScheme("digest"); + paramName = paramName.substring("Digest".length()).trim(); + } + wwwAuthenticateHeader.set(paramName, paramValue); + } + } + return wwwAuthenticateHeader; + } + + private static String getDigestAuthorizationProperty(String endpoint, WWWAuthenticateHeader wwwAuthenticateHeader, + String username, String password, String requestMethod) + throws Exception + { + if (!wwwAuthenticateHeader.isDigest()) + throw new Exception("Unexpected authentication scheme " + wwwAuthenticateHeader.getAuthenticationScheme() + ", Digest expected"); + String nc = "00000001"; + String cnonce = DigestUtils.md5Hex(Long.toString(System.currentTimeMillis())); + String a1 = DigestUtils.md5Hex(username + ":" + wwwAuthenticateHeader.getRealm() + ":" + password); + String a2 = DigestUtils.md5Hex(requestMethod + ":" + endpoint); + String hash = DigestUtils.md5Hex(a1 + ":" + wwwAuthenticateHeader.getNonce() + ":" + nc + ":" + cnonce + ":" + wwwAuthenticateHeader.getQop() + ":" + a2); + return "Digest username=\"" + username + "\"" + + ", realm=" + wwwAuthenticateHeader.getRealm() + + ", nonce=" + wwwAuthenticateHeader.getNonce() + + ", uri=" + endpoint + + ", response=" + hash + + ", opaque=" + wwwAuthenticateHeader.getOpaque() + + ", qop=" + wwwAuthenticateHeader.getQop() + + ", nc=" + nc + + ", cnonce=" + cnonce; + } + + private static String readResult(HttpURLConnection connection) throws IOException { + BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); + String inputLine; + StringBuilder response = new StringBuilder(); + while ((inputLine = in.readLine()) != null) { + response.append(inputLine).append("\n"); + } + in.close(); + return response.toString(); + } + + public static class WWWAuthenticateHeader { + private String realm; + private String domain; + private String nonce; + private String opaque; + private String stale; + private String qop; + private String algorithm; + private String authenticationScheme; + + public void set(String paramName, String paramValue) { + if (paramName.equals("realm")) + realm = paramValue; + else if (paramName.equals("domain")) + domain = paramValue; + else if (paramName.equals("nonce")) + nonce = paramValue; + else if (paramName.equals("opaque")) + opaque = paramValue; + else if (paramName.equals("stale")) + stale = paramValue; + else if (paramName.equals("qop")) + qop = paramValue; + else if (paramName.equals("algorithm")) + algorithm = paramValue; + } + + public String getRealm() { + return realm; + } + + public String getDomain() { + return domain; + } + + public String getNonce() { + return nonce; + } + + public String getOpaque() { + return opaque; + } + + public String getStale() { + return stale; + } + + public String getQop() { + return qop; + } + + public String getAlgorithm() { + return algorithm; + } + + public String getAuthenticationScheme() { + return authenticationScheme; + } + + public void setAuthenticationScheme(String authenticationScheme) { + this.authenticationScheme = authenticationScheme; + } + + public boolean isDigest() { + return authenticationScheme !=null && authenticationScheme.toLowerCase().equals("digest"); + } + } } diff --git a/src/main/java/authentication/web/RdfStoreProxy.java b/src/main/java/authentication/web/RdfStoreProxy.java index 86a9d89..f0f8fb8 100644 --- a/src/main/java/authentication/web/RdfStoreProxy.java +++ b/src/main/java/authentication/web/RdfStoreProxy.java @@ -6,66 +6,85 @@ import rdf.RdfStoreManagerImpl; import rdf.SecureRdfStoreManagerImpl; import util.HttpUtils; +import util.JsonResponse; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; + +import org.codehaus.jackson.map.ObjectMapper; + +import java.io.FileNotFoundException; import java.io.IOException; public class RdfStoreProxy extends HttpServlet { - /** + /** * */ private static final long serialVersionUID = 1L; - + private FrameworkUserManager frameworkUserManager; - private RdfStoreManager frameworkRdfStoreManager; + private RdfStoreManager frameworkRdfStoreManager; + + // provides a response to the webapp with more information about errors + JsonResponse res = new JsonResponse(); + ObjectMapper mapper = new ObjectMapper(); + + @Override + public void init(ServletConfig config) throws ServletException { + super.init(config); + FrameworkConfiguration frameworkConf; + try { + frameworkConf = FrameworkConfiguration.getInstance(getServletContext()); + frameworkUserManager = frameworkConf.getFrameworkUserManager(); + frameworkRdfStoreManager = new SecureRdfStoreManagerImpl(frameworkConf.getAuthSparqlEndpoint(), + frameworkConf.getAuthSparqlUser() , frameworkConf.getAuthSparqlPassword()); + } catch (FileNotFoundException e) { + throw new ServletException(e.getLocalizedMessage(), e); + } catch (Exception e) { + throw new ServletException(e.getLocalizedMessage(), e); + } + + } - @Override - public void init(ServletConfig config) throws ServletException { - super.init(config); - FrameworkConfiguration frameworkConf = FrameworkConfiguration.getInstance(getServletContext()); - frameworkUserManager = frameworkConf.getFrameworkUserManager(); - frameworkRdfStoreManager = new SecureRdfStoreManagerImpl(frameworkConf.getAuthSparqlEndpoint(), - frameworkConf.getSparqlFrameworkLogin(), frameworkConf.getSparqlFrameworkPassword()); - } + @Override + protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + doGet(req, resp); + } - @Override - protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - doGet(req, resp); - } + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + String responseFormat = req.getParameter("format"); + String username = req.getParameter("username"); + String token = HttpUtils.getCookieValue(req, "token"); + String mode = req.getParameter("mode"); + String query = req.getParameter("query"); - @Override - protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - String responseFormat = req.getParameter("format"); - String username = req.getParameter("username"); - String token = HttpUtils.getCookieValue(req, "token"); - String mode = req.getParameter("mode"); - String query = req.getParameter("query"); + System.out.println("mode " + mode); + System.out.println(query); - System.out.println(query); - try { - RdfStoreManager rdfStoreManager; - if ("settings".equals(mode)) { // framework manages settings graphs (public setting for unauthorized user) - System.out.println("mode" + mode); - rdfStoreManager = frameworkRdfStoreManager; - } else if (username!=null && !username.isEmpty()) { - System.out.println("username:" + username); - boolean valid = frameworkUserManager.checkToken(username, token); - if (!valid) - throw new ServletException("invalid token"); - rdfStoreManager = frameworkUserManager.getRdfStoreManager(username); - } else { - System.out.println("new RdfStoreManagerImpl"); - rdfStoreManager = new RdfStoreManagerImpl(FrameworkConfiguration.getInstance(getServletContext()).getPublicSparqlEndpoint()); - } - String result = rdfStoreManager.execute(query, responseFormat); - resp.setContentType(responseFormat); - resp.getWriter().print(result); - } catch (Exception e) { - throw new ServletException(e); - } - } + try { + RdfStoreManager rdfStoreManager; + if ("settings".equals(mode)) { // framework manages settings graphs (public setting for unauthorized user) + System.out.println("unregustered user settings"); + rdfStoreManager = frameworkRdfStoreManager; + } else if (username!=null && !username.isEmpty()) { + System.out.println("username:" + username); + boolean valid = frameworkUserManager.checkToken(username, token); + if (!valid) + throw new ServletException("invalid token"); + rdfStoreManager = frameworkUserManager.getRdfStoreManager(username); + } else { + System.out.println("new RdfStoreManagerImpl"); + rdfStoreManager = new RdfStoreManagerImpl(FrameworkConfiguration.getInstance(getServletContext()).getPublicSparqlEndpoint()); + } + String result = rdfStoreManager.execute(query, responseFormat); + resp.setContentType(responseFormat); + resp.getWriter().print(result); + } catch (Exception e) { + throw new ServletException(e); + } + } } diff --git a/src/main/java/authentication/web/UserManagerServlet.java b/src/main/java/authentication/web/UserManagerServlet.java index 7e9d090..68f6961 100644 --- a/src/main/java/authentication/web/UserManagerServlet.java +++ b/src/main/java/authentication/web/UserManagerServlet.java @@ -16,18 +16,30 @@ import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; + +import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class UserManagerServlet extends HttpServlet { - private FrameworkUserManager frameworkUserManager; + /** + * + */ + private static final long serialVersionUID = 1L; + private FrameworkUserManager frameworkUserManager; @Override public void init(ServletConfig config) throws ServletException { super.init(config); - frameworkUserManager = FrameworkConfiguration.getInstance(getServletContext()).getFrameworkUserManager(); + try { + frameworkUserManager = FrameworkConfiguration.getInstance(getServletContext()).getFrameworkUserManager(); + } catch (FileNotFoundException e) { + throw new ServletException(e); + } catch (Exception e) { + throw new ServletException(e); + } } @Override @@ -103,12 +115,15 @@ protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws S } //send email with login and password - EmailSender emailSender = FrameworkConfiguration.getInstance(getServletContext()).getDefaultEmailSender(); + try { + EmailSender emailSender = FrameworkConfiguration.getInstance(getServletContext()).getDefaultEmailSender(); emailSender.send(email, "GeoKnow registration", "Your login: " + username + ", password: " + password); } catch (MessagingException e) { throw new ServletException(e); - } + } catch (Exception e) { + throw new ServletException(e); + } } else if ("delete".equals(mode)) { String username = req.getParameter("username"); try { diff --git a/src/main/java/authentication/web/VirtuosoProxy.java b/src/main/java/authentication/web/VirtuosoProxy.java index 267fd3c..2a1bfe8 100644 --- a/src/main/java/authentication/web/VirtuosoProxy.java +++ b/src/main/java/authentication/web/VirtuosoProxy.java @@ -10,17 +10,29 @@ import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; + +import java.io.FileNotFoundException; import java.io.IOException; import java.net.URLEncoder; import java.util.Enumeration; public class VirtuosoProxy extends HttpServlet { - private FrameworkUserManager frameworkUserManager; + /** + * + */ + private static final long serialVersionUID = 1L; + private FrameworkUserManager frameworkUserManager; @Override public void init(ServletConfig config) throws ServletException { super.init(config); - frameworkUserManager = FrameworkConfiguration.getInstance(getServletContext()).getFrameworkUserManager(); + try { + frameworkUserManager = FrameworkConfiguration.getInstance(getServletContext()).getFrameworkUserManager(); + } catch (FileNotFoundException e) { + throw new ServletException(e); + } catch (Exception e) { + throw new ServletException(e); + } } @Override diff --git a/src/main/resources/generator-accounts-ontology.ttl b/src/main/resources/framework-accounts-ontology.ttl similarity index 94% rename from src/main/resources/generator-accounts-ontology.ttl rename to src/main/resources/framework-accounts-ontology.ttl index 03d620d..7fb2bd4 100644 --- a/src/main/resources/generator-accounts-ontology.ttl +++ b/src/main/resources/framework-accounts-ontology.ttl @@ -6,7 +6,7 @@ @prefix xml: . @prefix xsd: . @prefix rdfs: . -@prefix user: +@prefix user: . : rdf:type owl:Ontology . diff --git a/src/main/resources/framework-components.ttl b/src/main/resources/framework-components.ttl new file mode 100644 index 0000000..edb4bdc --- /dev/null +++ b/src/main/resources/framework-components.ttl @@ -0,0 +1,101 @@ +@prefix : . +@prefix d2rq: . +@prefix dcmit: . +@prefix dcterms: . +@prefix lds: . +@prefix owl: . +@prefix rdf: . +@prefix rdfs: . +@prefix schema: . +@prefix sd: . +@prefix void: . +@prefix xsd: . +@prefix foaf: . +@prefix gkg: . +@prefix acl: . + +########### ABOUT THIS FILE ############################################################# +# This file contains the default set-up of components in the framework; +# this file is to be loaded initially on the settigns Graph of the default user, +# and for each new user. +# NOTE: avoid using blank nodes may cause problems loading the file: +# - https://www.mail-archive.com/virtuoso-users@lists.sourceforge.net/msg05138.html +# ####################################################################################### + +########### COMPONENT DESCRIPTION ####################################################### +# Following triples describes the configured components in the framework +# ####################################################################################### + +:GeoKnowGenerator + lds:integrates :Facete, :Limes, :Sparqlify, :TripleGeo, :GeoLift, :OntoWiki, :Mappify . + +:Sparqlify + a lds:StackComponent ; + rdfs:label "Sparqlify"^^xsd:string ; + lds:providesService :SparqlifyService ; + lds:version "0.1-SNAPSHOT"^^xsd:string ; + foaf:homepage . + +:SparqlifyService + a lds:ExplorationService ; + lds:serviceUrl . + +:Facete + a lds:StackComponent ; + rdfs:label "Facete"^^xsd:string ; + lds:providesService :FaceteService ; + lds:version "0.1-SNAPSHOT"^^xsd:string ; + foaf:homepage . +:FaceteService + a lds:ExplorationService ; + lds:serviceUrl . + +:Limes + a lds:StackComponent ; + rdfs:label "Limes Linking Service"^^xsd:string ; + lds:providesService :LimesService; + lds:version "0.6.4"^^xsd:string ; + foaf:homepage . +:LimesService + a lds:InterlinkingService ; + lds:serviceUrl . + +:TripleGeo + a lds:StackComponent ; + rdfs:label "TripleGeo"^^xsd:string ; + lds:providesService :TripleGeoService ; + lds:version "1.0"^^xsd:string ; + foaf:homepage . +:TripleGeoService + a lds:ExtractionService ; + lds:serviceUrl . + +:GeoLift + a lds:StackComponent ; + rdfs:label "GeoLift"^^xsd:string ; + lds:providesService :GeoLiftService ; + lds:version "0.6.4"^^xsd:string ; + foaf:homepage . +:GeoLiftService + a lds:EnrichmentService ; + lds:serviceUrl . + +:OntoWiki + a lds:StackComponent ; + rdfs:label "OntoWiki"^^xsd:string ; + lds:providesService :OntoWikiService ; + lds:version "0.9.10-1"^^xsd:string ; + foaf:homepage . +:OntoWikiService + a lds:AuthoringService ; + lds:serviceUrl . + +:Mappify + a lds:StackComponent ; + rdfs:label "Mappify"^^xsd:string ; + lds:providesService :MappifyService ; + lds:version "0.9.10-1"^^xsd:string ; + foaf:homepage . +:MappifyService + a lds:ExplorationService ; + lds:serviceUrl . diff --git a/src/main/resources/framework-configuration.ttl b/src/main/resources/framework-configuration.ttl new file mode 100644 index 0000000..6fdd78a --- /dev/null +++ b/src/main/resources/framework-configuration.ttl @@ -0,0 +1,60 @@ +@prefix : . +@prefix d2rq: . +@prefix dcmit: . +@prefix dcterms: . +@prefix lds: . +@prefix owl: . +@prefix rdf: . +@prefix rdfs: . +@prefix schema: . +@prefix sd: . +@prefix void: . +@prefix xsd: . +@prefix foaf: . +@prefix gkg: . + + +########### ABOUT THIS FILE ############################################################# +# This file contains the configuration for the GeoKnow generator concerning +# the endpoints and default user credentials +# This file has to be added to the :settingsGraph and to :initialSettingsGraph +# NOTE: avoid using blank nodes may cause problems loading the file: +# - https://www.mail-archive.com/virtuoso-users@lists.sourceforge.net/msg05138.html +# ####################################################################################### + +# These triples describes the URL endpoints for the application + +:GeoKnowGenerator + a lds:StackComponent ; + rdfs:comment "This resource contains all the configuration required by the application"^^xsd:string ; + rdfs:label "GeoKnowGeneator"^^xsd:string ; + dcterms:hasVersion "2.0"^^xsd:string ; + lds:integrates :Virtuoso ; + foaf:homepage "http://localhost:8080/generator"^^xsd:string . + +:Virtuoso + a lds:StackComponent ; + rdfs:label "Service URL"^^xsd:string ; + dcterms:hasVersion "7.0"^^xsd:string ; + lds:providesService :VirtuosoConductor; + lds:providesService :VirtuosoAutSPARQLEndpoint; + lds:providesService :VirtuosoEndpoint; + foaf:homepage . + +:VirtuosoConductor + a lds:StorageService ; + lds:password "dba"^^xsd:string ; + lds:serviceUrl "http://192.168.2.21:8890/conductor"^^xsd:string ; + lds:connectionString "jdbc:virtuoso://192.168.2.21:1111/"^^xsd:string; + lds:user "dba"^^xsd:string . + +:VirtuosoAutSPARQLEndpoint + a lds:SecuredSPARQLEndPointService ; + lds:password "generator"^^xsd:string ; + lds:serviceUrl ; + lds:user "generator"^^xsd:string . + +:VirtuosoEndpoint + a lds:SPARQLEndPointService ; + lds:serviceUrl . + diff --git a/src/main/resources/framework-datasets.ttl b/src/main/resources/framework-datasets.ttl new file mode 100644 index 0000000..63486fe --- /dev/null +++ b/src/main/resources/framework-datasets.ttl @@ -0,0 +1,53 @@ +@prefix : . +@prefix d2rq: . +@prefix dcmit: . +@prefix dcterms: . +@prefix lds: . +@prefix owl: . +@prefix rdf: . +@prefix rdfs: . +@prefix schema: . +@prefix sd: . +@prefix void: . +@prefix xsd: . +@prefix foaf: . +@prefix gkg: . +@prefix acl: . + +########### ABOUT THIS FILE ############################################################# +# This file contains the default set-up of components in the framework; +# +# Following triples describes the Data sources (Endpoints and Databases) +# NOTE: avoid using blank nodes may cause problems loading the file: +# - https://www.mail-archive.com/virtuoso-users@lists.sourceforge.net/msg05138.html +######################################################################################### + +:Dbpedia + a void:Dataset , gkg:SPARQLEndpoint , gkg:DataSource ; + rdfs:label "Dbpedia"^^xsd:string ; + foaf:homepage ; + void:sparqlEndpoint . + +:GeoLinkedDataEs + a void:Dataset , gkg:SPARQLEndpoint , gkg:DataSource ; + rdfs:label "Spanish GeoLinkedData"^^xsd:string ; + foaf:homepage ; + void:sparqlEndpoint . + +:osm-semantic-network + a void:Dataset , gkg:SPARQLEndpoint , gkg:DataSource ; + rdfs:label "OSM Semantic Network"^^xsd:string ; + foaf:homepage ; + void:sparqlEndpoint . + +:LinkedGeoData + a void:Dataset , gkg:SPARQLEndpoint , gkg:DataSource ; + rdfs:label "LinkedGeoData"^^xsd:string ; + foaf:homepage ; + void:sparqlEndpoint . + +:oxpoints + a void:Dataset , gkg:SPARQLEndpoint , gkg:DataSource ; + rdfs:label "OxPoints (University of Oxford)"^^xsd:string ; + foaf:homepage ; + void:sparqlEndpoint . diff --git a/src/main/resources/framework-graphs.ttl b/src/main/resources/framework-graphs.ttl new file mode 100644 index 0000000..4f46db5 --- /dev/null +++ b/src/main/resources/framework-graphs.ttl @@ -0,0 +1,97 @@ +@prefix : . +@prefix d2rq: . +@prefix dcmit: . +@prefix dcterms: . +@prefix lds: . +@prefix owl: . +@prefix rdf: . +@prefix rdfs: . +@prefix schema: . +@prefix sd: . +@prefix void: . +@prefix xsd: . +@prefix foaf: . +@prefix gkg: . + + +########### ABOUT THIS FILE ############################################################# +# This file contains the service information for the GeoKnow generator +# Following triples simulates implementation of the Service Descrioption recommendation +# in order to describe named graphs (Datasets) +# The named graphs described in this file have to be created in the famework endpoint +# and loaded with their corresponding data +# This file has to be added to the :settingsGraph +# NOTE: avoid using blank nodes may cause problems loading the file: +# - https://www.mail-archive.com/virtuoso-users@lists.sourceforge.net/msg05138.html +# ####################################################################################### + +# Triples describing the named graphs required by the application + +:default-dataset + a sd:Dataset; + rdfs:label "Default dataset"; + dcterms:description "This is the endpoint default dataset"^^xsd:string; + sd:defaultGraph :defaultNamedGraph; + sd:namedGraph :settingsNamedGraph; + sd:namedGraph :initialSettingsNamedGraph ; + sd:namedGraph :accountsNamedGraph ; + sd:namedGraph :groupsNamedGraph . + +:defaultNamedGraph + sd:name ; + sd:graph :defaultGraph . + +:defaultGraph + a sd:Graph, void:Dataset; + rdfs:label "default"^^xsd:string; + dcterms:title "default"^^xsd:string; + dcterms:description "Default graph"^^xsd:string . + +:settingsNamedGraph + sd:name :settingsGraph; + sd:graph :settingsGraph . + +:settingsGraph + a sd:Graph, void:Dataset; + rdfs:label "settings"^^xsd:string; + dcterms:description "GeoKnow Generator settings and configurations"^^xsd:string; + dcterms:modified "2013-09-12"^^xsd:date; + dcterms:created "2013-09-12"^^xsd:date; + void:sparqlEndpoint . + +:initialSettingsNamedGraph + sd:name :initialSettingsGraph; + sd:graph :initialSettingsGraph . + +:initialSettingsGraph + a sd:Graph, void:Dataset; + rdfs:label "initialSettings"^^xsd:string; + dcterms:description "Initial configuration of components in the framework"^^xsd:string; + dcterms:modified "2013-09-12"^^xsd:date; + dcterms:created "2013-09-12"^^xsd:date; + void:sparqlEndpoint . + +:accountsNamedGraph + sd:name :accountsGraph; + sd:graph :accountsGraph . + +:accountsGraph + a sd:Graph, void:Dataset; + rdfs:label "accounts"^^xsd:string; + dcterms:description "A graph to store the users accounts"^^xsd:string; + dcterms:modified "2014-04-12"^^xsd:date; + dcterms:created "2014-04-12"^^xsd:date; + void:sparqlEndpoint . + +:groupsNamedGraph + sd:name :groupsGraph; + sd:graph :groupsGraph . + +:groupsGraph + a sd:Graph, void:Dataset; + rdfs:label "groups"^^xsd:string; + dcterms:description "A graph for groups of graphs"^^xsd:string; + dcterms:modified "2014-04-12"^^xsd:date; + dcterms:created "2014-04-12"^^xsd:date; + void:sparqlEndpoint . + diff --git a/src/main/resources/generator-ontology.ttl b/src/main/resources/framework-ontology.ttl similarity index 99% rename from src/main/resources/generator-ontology.ttl rename to src/main/resources/framework-ontology.ttl index 5a115f9..dcf3537 100644 --- a/src/main/resources/generator-ontology.ttl +++ b/src/main/resources/framework-ontology.ttl @@ -35,8 +35,7 @@ rdfs:label "Database types"@en ; rdfs:subClassOf owl:Thing . - - :dbHost +:dbHost rdf:type owl:DatatypeProperty ; rdfs:domain :Database ; rdfs:label "Service URL"^^xsd:string ; diff --git a/src/main/resources/geoknow-initial-settings.ttl b/src/main/resources/geoknow-initial-settings.ttl deleted file mode 100644 index 2b748e6..0000000 --- a/src/main/resources/geoknow-initial-settings.ttl +++ /dev/null @@ -1,173 +0,0 @@ -@prefix : . -@prefix d2rq: . -@prefix dcmit: . -@prefix dcterms: . -@prefix lds: . -@prefix owl: . -@prefix rdf: . -@prefix rdfs: . -@prefix schema: . -@prefix sd: . -@prefix void: . -@prefix xsd: . -@prefix foaf: . -@prefix gkg: . -@prefix acl: . - - -########### SERVICE DESCRIPTION ######################################################### -# Following triples simulates implementation of the Service Descrioption recommendation -# in order to describe named graphs (Datasets) -# ####################################################################################### - -:GeoKnowGeneratorService a sd:Service; - sd:endpoint ; - sd:supportedLanguage sd:SPARQL11Query ; - sd:defaultDataset :default-dataset; - . - -:default-dataset a sd:Dataset; - rdfs:label "GeoKnow Generator"; - dcterms:description "The GeoKnow Generator Service"^^xsd:string; - sd:defaultGraph ; - sd:namedGraph :settingsGraph; -. - a sd:Graph, void:Dataset; - rdfs:label "Default Graph"; - dcterms:description "Default graph"^^xsd:string; -. - -########### COMPONENT DESCRIPTION ####################################################### -# Following triples describes the configured components in the generator -# ####################################################################################### - -:GeoKnowGenerator - rdf:type lds:StackComponent ; - rdfs:comment "This resource contains all the configuration required by the application"^^xsd:string ; - rdfs:label "GeoKnowGeneator"^^xsd:string ; - lds:version "0.1"^^xsd:string ; - lds:integrates :Virtuoso, :Facete, :Limes . - -:Virtuoso - a lds:StackComponent ; - rdfs:label "Virtuoso"^^xsd:string ; - lds:providesService - [ a lds:StorageService ; - rdfs:label "Virtuoso Generator Conductor"^^xsd:string ; - lds:dbPassword "dba"^^xsd:string ; - lds:dbUser "dba"^^xsd:string ; - lds:serviceUrl - ] ; - lds:providesService :VirtuosoGeneratorEndpoint ; - lds:version "7.0"^^xsd:string ; - foaf:homepage . - -:VirtuosoGeneratorEndpoint - a lds:SPARQLEndPointService ; - rdfs:label "Virtuoso Generator Endpoint"^^xsd:string ; - lds:serviceUrl . - -:Sparqlify - a lds:StackComponent ; - rdfs:label "Sparqlify"^^xsd:string ; - lds:providesService - [ a lds:ExplorationService ; - lds:serviceUrl - ] ; - lds:version "0.1-SNAPSHOT"^^xsd:string ; - foaf:homepage . - -:Facete - a lds:StackComponent ; - rdfs:label "Facete"^^xsd:string ; - lds:providesService - [ a lds:ExplorationService ; - lds:serviceUrl - ] ; - lds:version "0.1-SNAPSHOT"^^xsd:string ; - foaf:homepage . - -:Limes - a lds:StackComponent ; - rdfs:label "Limes Linking Service"^^xsd:string ; - lds:providesService - [ a lds:InterlinkingService ; - lds:serviceUrl - ] ; - lds:version "0.6.4"^^xsd:string ; - foaf:homepage . - -:TripleGeo - a lds:StackComponent ; - rdfs:label "TripleGeo"^^xsd:string ; - lds:providesService - [ a lds:ExtractionService ; - lds:serviceUrl - ] ; - lds:version "1.0"^^xsd:string ; - foaf:homepage . - -:GeoLift - a lds:StackComponent ; - rdfs:label "GeoLift"^^xsd:string ; - lds:providesService - [ a lds:EnrichmentService ; - lds:serviceUrl - ] ; - lds:version "0.6.4"^^xsd:string ; - foaf:homepage . - -:OntoWiki - a lds:StackComponent ; - rdfs:label "OntoWiki"^^xsd:string ; - lds:providesService - [ a lds:AuthoringService ; - lds:serviceUrl - ] ; - lds:version "0.9.10-1"^^xsd:string ; - foaf:homepage . - -:Mappify - a lds:StackComponent ; - rdfs:label "Mappify"^^xsd:string ; - lds:providesService - [ a lds:AuthoringService ; - lds:serviceUrl - ] ; - lds:version "0.9.10-1"^^xsd:string ; - foaf:homepage . - - -########### DATA SOURCES ################################################################ -# Following triples describes the Data sources (Endpoints and Databases) -######################################################################################### - -:Dbpedia - a void:Dataset , gkg:SPARQLEndpoint , gkg:DataSource ; - rdfs:label "Dbpedia"^^xsd:string ; - foaf:homepage ; - void:sparqlEndpoint . - -:GeoLinkedDataEs - a void:Dataset , gkg:SPARQLEndpoint , gkg:DataSource ; - rdfs:label "Spanish GeoLinkedData"^^xsd:string ; - foaf:homepage ; - void:sparqlEndpoint . - -:osm-semantic-network - a void:Dataset , gkg:SPARQLEndpoint , gkg:DataSource ; - rdfs:label "OSM Semantic Network"^^xsd:string ; - foaf:homepage ; - void:sparqlEndpoint . - -:LinkedGeoData - a void:Dataset , gkg:SPARQLEndpoint , gkg:DataSource ; - rdfs:label "LinkedGeoData"^^xsd:string ; - foaf:homepage ; - void:sparqlEndpoint . - -:oxpoints - a void:Dataset , gkg:SPARQLEndpoint , gkg:DataSource ; - rdfs:label "OxPoints (University of Oxford)"^^xsd:string ; - foaf:homepage ; - void:sparqlEndpoint . diff --git a/src/main/resources/geoknow-settings.ttl b/src/main/resources/geoknow-settings.ttl deleted file mode 100644 index 1d7cab6..0000000 --- a/src/main/resources/geoknow-settings.ttl +++ /dev/null @@ -1,207 +0,0 @@ -@prefix : . -@prefix d2rq: . -@prefix dcmit: . -@prefix dcterms: . -@prefix lds: . -@prefix owl: . -@prefix rdf: . -@prefix rdfs: . -@prefix schema: . -@prefix sd: . -@prefix void: . -@prefix xsd: . -@prefix foaf: . -@prefix gkg: . - - -########### ABOUT THIS FILE ############################################################# -# This is the default configuration for the demonstator on a local server -# all components are supposed to be installed on the localhost. -# This file is mainly used for the VM -# ####################################################################################### - - -########### SERVICE DESCRIPTION ######################################################### -# Following triples simulates implementation of the Service Descrioption recommendation -# in order to describe named graphs (Datasets) -# ####################################################################################### - -:GeoKnowGeneratorService a sd:Service; - sd:endpoint ; - sd:supportedLanguage sd:SPARQL11Query ; - sd:defaultDataset :default-dataset; - . - -:default-dataset a sd:Dataset; - rdfs:label "GeoKnow Generator"; - dcterms:description "The GeoKnow Generator Service"^^xsd:string; - sd:defaultGraph ; - sd:namedGraph :settingsGraph; - sd:namedGraph :testing; -. - a sd:Graph, void:Dataset; - rdfs:label "Default Graph"; - dcterms:description "Default graph"^^xsd:string; -. - -:settingsGraph a sd:NamedGraph; - sd:name :settingsGraph; - sd:graph [ - a sd:Graph, void:Dataset; - rdfs:label "Generator Settings"^^xsd:string; - dcterms:description "GeoKnow Generator settings and configurations"^^xsd:string; - foaf:homepage ; - dcterms:modified "2013-09-12"^^xsd:date; - dcterms:created "2013-09-12"^^xsd:date; - void:sparqlEndpoint ; - ]; -. - -:testing a sd:NamedGraph; - sd:name :testing; - sd:graph [ - a sd:Graph, void:Dataset; - rdfs:label "Just to test loading data"^^xsd:string; - dcterms:description "This is a graph to tes loading data"^^xsd:string; - dcterms:modified "2013-09-12"^^xsd:date; - dcterms:created "2013-09-12"^^xsd:date; - void:sparqlEndpoint ; - ]; -. - -########### COMPONENT DESCRIPTION ####################################################### -# Following triples describes the configured components in the generator -# ####################################################################################### - -:GeoKnowGenerator - rdf:type lds:StackComponent ; - rdfs:comment "This resource contains all the configuration required by the application"^^xsd:string ; - rdfs:label "GeoKnowGeneator"^^xsd:string ; - lds:version "0.1"^^xsd:string ; - lds:integrates :Virtuoso, :Facete, :Limes . - -:Virtuoso - a lds:StackComponent ; - rdfs:label "Virtuoso"^^xsd:string ; - lds:providesService - [ a lds:StorageService ; - rdfs:label "Virtuoso Generator Conductor"^^xsd:string ; - lds:dbPassword "dba"^^xsd:string ; - lds:dbUser "dba"^^xsd:string ; - lds:serviceUrl - ] ; - lds:providesService :VirtuosoGeneratorEndpoint ; - lds:version "7.0"^^xsd:string ; - foaf:homepage . - -:VirtuosoGeneratorEndpoint - a lds:SPARQLEndPointService ; - rdfs:label "Virtuoso Generator Endpoint"^^xsd:string ; - ## This is to be the same URL as the configuration of the Generator - ## TODO: find a way to link both - lds:serviceUrl . - -:Sparqlify - a lds:StackComponent ; - rdfs:label "Sparqlify"^^xsd:string ; - lds:providesService - [ a lds:ExplorationService ; - lds:serviceUrl - ] ; - lds:version "0.1-SNAPSHOT"^^xsd:string ; - foaf:homepage . - -:Facete - a lds:StackComponent ; - rdfs:label "Facete"^^xsd:string ; - lds:providesService - [ a lds:ExplorationService ; - lds:serviceUrl - ] ; - lds:version "0.1-SNAPSHOT"^^xsd:string ; - foaf:homepage . - -:Limes - a lds:StackComponent ; - rdfs:label "Limes Linking Service"^^xsd:string ; - lds:providesService - [ a lds:InterlinkingService ; - lds:serviceUrl - ] ; - lds:version "0.6.4"^^xsd:string ; - foaf:homepage . - -:TripleGeo - a lds:StackComponent ; - rdfs:label "TripleGeo"^^xsd:string ; - lds:providesService - [ a lds:ExtractionService ; - lds:serviceUrl - ] ; - lds:version "1.0"^^xsd:string ; - foaf:homepage . - -:GeoLift - a lds:StackComponent ; - rdfs:label "GeoLift"^^xsd:string ; - lds:providesService - [ a lds:EnrichmentService ; - lds:serviceUrl - ] ; - lds:version "0.6.4"^^xsd:string ; - foaf:homepage . - -:OntoWiki - a lds:StackComponent ; - rdfs:label "OntoWiki"^^xsd:string ; - lds:providesService - [ a lds:AuthoringService ; - lds:serviceUrl - ] ; - lds:version "0.9.10-1"^^xsd:string ; - foaf:homepage . - - -########### DATA SOURCES ################################################################ -# Following triples describes the Data sources (Endpoints and Databases) -######################################################################################### - -:Dbpedia - a void:Dataset , gkg:SPARQLEndpoint , gkg:DataSource ; - rdfs:label "Dbpedia"^^xsd:string ; - foaf:homepage ; - void:sparqlEndpoint . - -:GeoLinkedDataEs - a void:Dataset , gkg:SPARQLEndpoint , gkg:DataSource ; - rdfs:label "Spanish GeoLinkedData"^^xsd:string ; - foaf:homepage ; - void:sparqlEndpoint . - -:osm-semantic-network - a void:Dataset , gkg:SPARQLEndpoint , gkg:DataSource ; - rdfs:label "OSM Semantic Network"^^xsd:string ; - foaf:homepage ; - void:sparqlEndpoint . - -:LinkedGeoData - a void:Dataset , gkg:SPARQLEndpoint , gkg:DataSource ; - rdfs:label "LinkedGeoData"^^xsd:string ; - foaf:homepage ; - void:sparqlEndpoint . - -:oxpoints - a void:Dataset , gkg:SPARQLEndpoint , gkg:DataSource ; - rdfs:label "OxPoints (University of Oxford)"^^xsd:string ; - foaf:homepage ; - void:sparqlEndpoint . - -:UHotels - a gkg:Database , gkg:DataSource ; - rdfs:label "Hotles Dataset"^^xsd:string ; - gkg:dbHost "127.0.0.1"^^xsd:string ; - gkg:dbName "hotels"^^xsd:string ; - gkg:dbPassword "1234"^^xsd:string ; - gkg:dbPort "3306"^^xsd:string ; - gkg:dbType gkg:MySQL ; - gkg:dbUser "root"^^xsd:string . diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml index 3700d25..8afb661 100644 --- a/src/main/webapp/WEB-INF/web.xml +++ b/src/main/webapp/WEB-INF/web.xml @@ -28,92 +28,67 @@ temp-data /uploads/tmp/ + - - Virtuoso server - virtuoso-jdbc-conn-string - jdbc:virtuoso://generator.geoknow.eu:1111/ - + Framework URI is used to get the configuration data from the framework-configuration.ttl file + framework-uri + http://generator.geoknow.eu/resource/GeoKnowGenerator + + - Virtuoso server user - virtuoso-dba-user - dba + Framework Ontology Namespace + framework-ontology-ns + http://generator.geoknow.eu/ontology/ - Virtuoso server password - virtuoso-dba-password - dba - - - - - SPARQL Public Endpoint - sparql-public-endpoint - http://generator.geoknow.eu:8890/sparql - - - SPARQL Auth Endpoint - sparql-auth-endpoint - http://generator.geoknow.eu:8890/sparql + User Accounts Namespace + accounts-ns + http://generator.geoknow.eu/accounts/ontology/ - Settings Graph - settings-graph - http://generator.geoknow.eu/resource/settingsGraph + Framework Default Namespace + framework-ns + http://generator.geoknow.eu/resource/ + + - - - Framework User - framework-user - generator - - - Framework Password - framework-password - generator - + - Initial Settings for new users - new-user-settings - http://generator.geoknow.eu/resource/newUuserSettings + SMPT Host + smtp-host + ***REMOVED*** - Groups Graph - groups-graph - http://generator.geoknow.eu/resource/graphGroups + SMPT TLS Port + smpt-tls-port + 587 - Users Accounts Graph - users-accounts-graph - http://generator.geoknow.eu/resource/accountsGraph + SMPT SSL Port + smtp-ssl-port + 465 - Guest Settings Graph - guest-settings-graph - http://generator.geoknow.eu/resource/guestSettingsGraph + email + email + ***REMOVED*** - - Users Accounts Namespace - users-accounts-ns - http://generator.geoknow.eu/accounts/ - - - User Accounts Ontology - users-accounts-ontology - http://generator.geoknow.eu/accounts/ontology/ + User Name + user-name + ***REMOVED*** - Framework Default Namespace - framework-ns - http://generator.geoknow.eu/resource/ - - + password + password + ***REMOVED*** + + ImportRDF - ImportRDF + ImportRDFServlet diff --git a/src/main/webapp/js/config.js b/src/main/webapp/js/config.js index 46bc0b1..aabb41a 100644 --- a/src/main/webapp/js/config.js +++ b/src/main/webapp/js/config.js @@ -1,4 +1,4 @@ -/** + /** * GeoKnow Generator * Configuration management * @@ -29,350 +29,352 @@ "use strict"; angular.module("app.configuration", []) -.factory("Config", function($q, $http, flash, AccountService) +.factory("Config", function($q, $http, flash, AccountService, ServerErrorResponse) { - $http.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded; charset=UTF-8"; - - // the public and authenticated enpoints that will be used by the application - var AUTH_ENDPOINT = "http://generator.geoknow.eu:8890/sparql-auth"; - var PUBLIC_ENDPOINT = "http://generator.geoknow.eu:8890/sparql"; - // if new resorces are created they will use this name space, and it can be changed - var NS = "http://generator.geoknow.eu/resource/"; - // this is the graph where settings are stored, it doesnt change, and independent on the Namespace - var DEFAULT_SETTINGS_GRAPH_URI = "http://generator.geoknow.eu/resource/settingsGraph"; - // SETTINGS_GRAPH_URI is initalized with DEFAULT_SETTINGS_GRAPH_URI, but can be changed with setGraph, - var SETTINGS_GRAPH_URI = DEFAULT_SETTINGS_GRAPH_URI; - // Create a graph for groups of users - var GROUPS_GRAPH_URI = "http://generator.geoknow.eu/resource/groupsGraph"; - - - var namespaces = + $http.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded; charset=UTF-8"; + + // the public and authenticated enpoints that will be used by the application + var AUTH_ENDPOINT; + var PUBLIC_ENDPOINT; + // if new resorces are created they will use this name space, and it can be changed + var NS = "http://generator.geoknow.eu/resource/"; + // this is the graph where settings are stored, it doesnt change, and independent on the Namespace + var DEFAULT_SETTINGS_GRAPH_URI = "http://generator.geoknow.eu/resource/settingsGraph"; + // SETTINGS_GRAPH_URI is initalized with DEFAULT_SETTINGS_GRAPH_URI, but can be changed with setGraph, + var SETTINGS_GRAPH_URI = DEFAULT_SETTINGS_GRAPH_URI; + // Create a graph for groups of users + var GROUPS_GRAPH_URI = "http://generator.geoknow.eu/resource/groupsGraph"; + + + var namespaces = + { + "http://dbpedia.org/resource/" : "dbpedia:", + "http://purl.org/dc/elements/1.1/" : "dc:", + "http://purl.org/dc/terms/" : "dcterms:", + "http://xmlns.com/foaf/0.1/" : "foaf:", + "http://stack.linkeddata.org/ldis-schema/" : "lds:", + "http://generator.geoknow.eu/ontology/" : "gkg:", + "http://www.w3.org/1999/02/22-rdf-syntax-ns#" : "rdf:", + "http://www.w3.org/2000/01/rdf-schema#" : "rdfs:", + "http://www.w3.org/ns/sparql-service-description#" : "sd:", + "http://rdfs.org/ns/void#" : "void:", + "http://www.w3.org/ns/auth/acl#" : "acl:" + }; + namespaces[NS] = ":"; + + var GRAPH = "<" + SETTINGS_GRAPH_URI + ">"; + var EOL = "\n"; + var PREFIXES = ""; + for (var namespace in namespaces) + PREFIXES += "PREFIX " + namespaces[namespace] + " <" + namespace + ">" + EOL; + + var settings = {}; + var isLoaded = false; + + var request = function(url, data, success){ + var deferred = $q.defer(); + + $http.post(url, $.param(data)) + .success(function(data) { - "http://dbpedia.org/resource/" : "dbpedia:", - "http://purl.org/dc/elements/1.1/" : "dc:", - "http://purl.org/dc/terms/" : "dcterms:", - "http://xmlns.com/foaf/0.1/" : "foaf:", - "http://stack.linkeddata.org/ldis-schema/" : "lds:", - "http://generator.geoknow.eu/ontology/" : "gkg:", - "http://www.w3.org/1999/02/22-rdf-syntax-ns#" : "rdf:", - "http://www.w3.org/2000/01/rdf-schema#" : "rdfs:", - "http://www.w3.org/ns/sparql-service-description#" : "sd:", - "http://rdfs.org/ns/void#" : "void:", - "http://www.w3.org/ns/auth/acl#" : "acl:" - }; - namespaces[NS] = ":"; + try{ + deferred.resolve(success ? success(data) : data.results.bindings[0]["callret-0"].value); + } + catch (e){ + console.log("ERROR with no more explai"); + flash.error = ServerErrorResponse.getMessage(data.message); - var GRAPH = "<" + SETTINGS_GRAPH_URI + ">"; - var EOL = "\n"; - var PREFIXES = ""; - for (var namespace in namespaces) - PREFIXES += "PREFIX " + namespaces[namespace] + " <" + namespace + ">" + EOL; + deferred.reject(e); + } + }) + .error(function(data, status){ + var message = ServerErrorResponse.getMessage(status) + "at " + AUTH_ENDPOINT ; + console.log(message); + flash.error = message; + deferred.reject(message); + }); - var settings = {}; - var isLoaded = false; + return deferred.promise; + }; - var request = function(url, data, success) - { - var deferred = $q.defer(); + var ns = function(v){ + var value = v.value || v; - $http.post(url, $.param(data)) - .success(function(data) - { - try - { - deferred.resolve(success ? success(data) : data.results.bindings[0]["callret-0"].value); - } - catch (e) + if (!v.type || v.type == "uri") + { + var namespace = /.*[#\/]/.exec(value); + if (namespace) + { + var prefix = namespaces[namespace = namespace[0]]; + if (prefix) + return prefix + value.slice(namespace.length); + } + } + + return value; + }; + + var setEndpoint = function(url) + { + AUTH_ENDPOINT = url; + }; + + var getEndpoint = function() + { + return AUTH_ENDPOINT; + }; + + var setNS = function(ns) + { + NS = ns; + }; + + var getNS = function() + { + return NS; + }; + + var getGraph = function() + { + return SETTINGS_GRAPH_URI; + }; + + var setGraph = function(uri) { + SETTINGS_GRAPH_URI = uri; + GRAPH = "<" + SETTINGS_GRAPH_URI + ">"; + isLoaded = false; + read(); + }; + + var restoreDefault = function() { + return setGraph(DEFAULT_SETTINGS_GRAPH_URI); + }; + + var getSettings = function() + { + return settings; + }; + + var select = function(property, value) + { + property = ns(property); + value = ns(value); + + var elements = {}; + var resource; + + var walk = function(element) + { + for (var key in element) + { + var prop = element[key]; + if (prop) + if (key == property) + for (var i in prop) { - deferred.reject(e); - + var val = prop[i]; + if (val == value) + { + elements[resource] = element; + break; + } } - }) - .error(function(data, status) - { - var message = data || AUTH_ENDPOINT + " not found"; - deferred.reject(message); - flash.error = message; - }); - - return deferred.promise; - }; - - var ns = function(v) - { - var value = v.value || v; - - if (!v.type || v.type == "uri") - { - var namespace = /.*[#\/]/.exec(value); - if (namespace) + else + for (var i in prop) { - var prefix = namespaces[namespace = namespace[0]]; - if (prefix) - return prefix + value.slice(namespace.length); + var val = prop[i]; + if (typeof val === "object") + walk(val); } - } - - return value; + } }; - var setEndpoint = function(url) - { - AUTH_ENDPOINT = url; - }; + for (resource in settings) + walk(settings[resource]); - var getEndpoint = function() - { - return AUTH_ENDPOINT; - }; - - var setNS = function(ns) - { - NS = ns; - }; + return elements; + }; - var getNS = function() - { - return NS; - }; + var parseSparqlResults = function(data) { + var bindings = data.results.bindings; + var triples = []; - var getGraph = function() + for (var i in bindings) { - return SETTINGS_GRAPH_URI; - }; + var binding = bindings[i]; + triples.push([ ns(binding.s), ns(binding.p), ns(binding.o) ]); + } - var setGraph = function(uri) { - SETTINGS_GRAPH_URI = uri; - GRAPH = "<" + SETTINGS_GRAPH_URI + ">"; - isLoaded = false; - read(); - }; + var result = {}; - var restoreDefault = function() { - return setGraph(DEFAULT_SETTINGS_GRAPH_URI); - }; - - var getSettings = function() - { - return settings; - }; + var bnodes = {}; - var select = function(property, value) + for (var i in triples) { - property = ns(property); - value = ns(value); - - var elements = {}; - var resource; - - var walk = function(element) - { - for (var key in element) - { - var prop = element[key]; - if (prop) - if (key == property) - for (var i in prop) - { - var val = prop[i]; - if (val == value) - { - elements[resource] = element; - break; - } - } - else - for (var i in prop) - { - var val = prop[i]; - if (typeof val === "object") - walk(val); - } - } - }; + var triple = triples[i], + s = triple[0], + p = triple[1], + o = triple[2]; - for (resource in settings) - walk(settings[resource]); - - return elements; - }; - - var parseSparqlResults = function(data) { - var bindings = data.results.bindings; - var triples = []; - - for (var i in bindings) + if (/^nodeID:\/\//.test(s)) { - var binding = bindings[i]; - triples.push([ ns(binding.s), ns(binding.p), ns(binding.o) ]); + var id = s.slice(9), + map = bnodes[id] = bnodes[id] || {}; } - - var result = {}; - - var bnodes = {}; - - for (var i in triples) + else { - var triple = triples[i], - s = triple[0], - p = triple[1], - o = triple[2]; - - if (/^nodeID:\/\//.test(s)) - { - var id = s.slice(9), - map = bnodes[id] = bnodes[id] || {}; - } - else - { - var map = result[s] || (result[s] = {}); - } - - if (/^nodeID:\/\//.test(o)) - { - var id = o.slice(9); - o = bnodes[id] = bnodes[id] || {}; - } - - (map[p] || (map[p] = [])).push(o); + var map = result[s] || (result[s] = {}); } - return result; - }; - - var read = function() - { - if (isLoaded) - { - var deferred = $q.defer(); - deferred.resolve(settings); - return deferred.promise; - } + if (/^nodeID:\/\//.test(o)) + { + var id = o.slice(9); + o = bnodes[id] = bnodes[id] || {}; + } - var requestData = { - format: "application/sparql-results+json", - query: "SELECT * FROM " + GRAPH + EOL - + "WHERE { ?s ?p ?o }" + EOL - + "ORDER BY ?s ?p ?o", - mode: "settings" - }; + (map[p] || (map[p] = [])).push(o); + } - return request("RdfStoreProxy", requestData, - function(data) - { - settings = parseSparqlResults(data); - isLoaded = true; - return settings; - } - ); - }; + return result; + }; - var write = function() + var read = function() + { + if (isLoaded) { - var wrap = function(s) - { - return /^https?:\/\//.test(s) ? "<" + s + ">" : !/^\w*:/.test(s) ? '"' + s + '"' : s; - }; - - var data = "", - bnodeIndex = 0; - - var walk = function(s, map) - { - for (var p in map) - { - var arr = map[p]; - for (var i in arr) - { - var o = arr[i]; - if (typeof o === "string") - data += wrap(s) + " " + wrap(p) + " " + wrap(o) + " ." + EOL; - else - { - var bnode = "_:b" + ++bnodeIndex; - data += wrap(s) + " " + wrap(p) + " " + bnode + " ." + EOL; - walk(bnode, o); - } - } - } - }; - - for (var s in settings) - walk(s, settings[s]); - - var requestData = { - format: "application/sparql-results+json", - query: PREFIXES - + "DROP SILENT GRAPH " + GRAPH + EOL - + "CREATE SILENT GRAPH " + GRAPH + EOL - + "INSERT INTO " + GRAPH + EOL - + "{" + EOL - + data - + "}", - mode: "settings" - }; - - return request("RdfStoreProxy", requestData); + var deferred = $q.defer(); + deferred.resolve(settings); + return deferred.promise; + } + + var requestData = { + format: "application/sparql-results+json", + query: "SELECT * FROM " + GRAPH + EOL + + "WHERE { ?s ?p ?o }" + EOL + + "ORDER BY ?s ?p ?o", + mode: "settings" }; - var createGraph = function(name, permissions) - { - var requestData = { - format: "application/sparql-results+json", - mode: "create", - graph: name, - permissions: permissions, - username: AccountService.getUsername() + return request("RdfStoreProxy", requestData, + function(data) + { + settings = parseSparqlResults(data); + isLoaded = true; + return settings; } - return request("GraphManagerServlet", requestData); - }; + ); + }; - var dropGraph = function(name) + var write = function() + { + var wrap = function(s) { - var requestData = { - format: "application/sparql-results+json", - mode: "drop", - graph: name, - username: AccountService.getUsername() - } - return request("GraphManagerServlet", requestData); + return /^https?:\/\//.test(s) ? "<" + s + ">" : !/^\w*:/.test(s) ? '"' + s + '"' : s; }; - var setGraphPermissions = function(name, permissions) { - var requestData = { - format: "application/sparql-results+json", - graph: name, - mode: "update", - permissions: permissions, - username: AccountService.getUsername() - }; - return request("GraphManagerServlet", requestData); - }; + var data = "", + bnodeIndex = 0; - var getPublicEndpoint = function() { - return PUBLIC_ENDPOINT; + var walk = function(s, map) + { + for (var p in map) + { + var arr = map[p]; + for (var i in arr) + { + var o = arr[i]; + if (typeof o === "string") + data += wrap(s) + " " + wrap(p) + " " + wrap(o) + " ." + EOL; + else + { + var bnode = "_:b" + ++bnodeIndex; + data += wrap(s) + " " + wrap(p) + " " + bnode + " ." + EOL; + walk(bnode, o); + } + } + } }; - var getGroupsGraph = function() { - return GROUPS_GRAPH_URI; + for (var s in settings) + walk(s, settings[s]); + + var requestData = { + format: "application/sparql-results+json", + query: PREFIXES + + "DROP SILENT GRAPH " + GRAPH + EOL + + "CREATE SILENT GRAPH " + GRAPH + EOL + + "INSERT INTO " + GRAPH + EOL + + "{" + EOL + + data + + "}", + mode: "settings" }; - return { - setEndpoint : setEndpoint, - getEndpoint : getEndpoint, - getNS : getNS, - getGraph : getGraph, - setGraph : setGraph, - restoreDefault : restoreDefault, - getSettings : getSettings, - select : select, - read : read, - write : write, - createGraph : createGraph, - dropGraph : dropGraph, - setGraphPermissions : setGraphPermissions, - parseSparqlResults : parseSparqlResults, - getPublicEndpoint : getPublicEndpoint, - getGroupsGraph : getGroupsGraph + return request("RdfStoreProxy", requestData); + }; + + var createGraph = function(name, permissions) + { + var requestData = { + format: "application/sparql-results+json", + mode: "create", + graph: name, + permissions: permissions, + username: AccountService.getUsername() + } + return request("GraphManagerServlet", requestData); + }; + + var dropGraph = function(name) + { + var requestData = { + format: "application/sparql-results+json", + mode: "drop", + graph: name, + username: AccountService.getUsername() + } + return request("GraphManagerServlet", requestData); + }; + + var setGraphPermissions = function(name, permissions) { + var requestData = { + format: "application/sparql-results+json", + graph: name, + mode: "update", + permissions: permissions, + username: AccountService.getUsername() }; + return request("GraphManagerServlet", requestData); + }; + + var setPublicEndpoint = function(endpoint) { + PUBLIC_ENDPOINT = endpoint; + }; + + var getPublicEndpoint = function() { + return PUBLIC_ENDPOINT; + }; + + var getGroupsGraph = function() { + return GROUPS_GRAPH_URI; + }; + + return { + setEndpoint : setEndpoint, + getEndpoint : getEndpoint, + getNS : getNS, + getGraph : getGraph, + setGraph : setGraph, + restoreDefault : restoreDefault, + getSettings : getSettings, + select : select, + read : read, + write : write, + createGraph : createGraph, + dropGraph : dropGraph, + setGraphPermissions : setGraphPermissions, + parseSparqlResults : parseSparqlResults, + getPublicEndpoint : getPublicEndpoint, + getGroupsGraph : getGroupsGraph + }; }); \ No newline at end of file