Mercurial > hg > AnnotationManagerN4J
diff src/main/java/de/mpiwg/itgroup/annotations/restlet/RestServer.java @ 1:6556943c4fb9
include neo4j and restlet
author | casties |
---|---|
date | Wed, 27 Jun 2012 17:52:02 +0200 |
parents | |
children | 47b53ae385d1 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/de/mpiwg/itgroup/annotations/restlet/RestServer.java Wed Jun 27 17:52:02 2012 +0200 @@ -0,0 +1,189 @@ +package de.mpiwg.itgroup.annotations.restlet; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.util.Hashtable; +import java.util.Properties; + +import javax.naming.NamingEnumeration; +import javax.naming.NamingException; +import javax.naming.directory.Attribute; +import javax.naming.directory.DirContext; +import javax.naming.directory.InitialDirContext; +import javax.naming.directory.SearchControls; +import javax.naming.directory.SearchResult; +import javax.servlet.ServletContext; + +import org.apache.log4j.BasicConfigurator; +import org.apache.log4j.Logger; +import org.restlet.Application; +import org.restlet.Context; +import org.restlet.Restlet; +import org.restlet.routing.Router; +import org.restlet.security.ChallengeAuthenticator; + +import scala.sys.process.ProcessBuilderImpl.Dummy; + +public class RestServer extends Application { + + public static Logger logger = Logger.getRootLogger(); + + private ChallengeAuthenticator authenticator; + + /** + * Properties holding consumer keys and secrets + */ + private Properties consumerKeys; + public final String CONSUMER_KEYS_PATH = "WEB-INF/consumerkeys.property"; + + /** + * constructor + * + * @param parentContext + */ + public RestServer(Context parentContext) { + super(parentContext); + + Logger rl = Logger.getRootLogger(); + BasicConfigurator.configure(); + // read consumerKeys from webapp + consumerKeys = new Properties(); + ServletContext sc = (ServletContext) getContext().getServerDispatcher() + .getContext().getAttributes() + .get("org.restlet.ext.servlet.ServletContext"); + if (sc != null) { + InputStream ps = sc.getResourceAsStream(CONSUMER_KEYS_PATH); + if (ps == null) { + // try as file + File pf = new File(sc.getRealPath(CONSUMER_KEYS_PATH)); + if (pf != null) { + rl.debug("trying file for consumer keys: "+pf); + try { + ps = new FileInputStream(pf); + } catch (FileNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + } + if (ps != null) { + rl.debug("loading consumer keys from "+CONSUMER_KEYS_PATH); + try { + consumerKeys.load(ps); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + rl.debug("consumer keys: "+consumerKeys); + } else { + rl.error("Unable to get resource "+CONSUMER_KEYS_PATH); + } + } else { + rl.error("Unable to get ServletContext!"); + } + + } + + /** + * returns consumer secret for consumer key. + * returns null if consumer key doesn't exist. + * @param consumerKey + * @return + */ + public String getConsumerSecret(String consumerKey) { + return consumerKeys.getProperty(consumerKey); + } + + + /* + * (non-Javadoc) + * + * @see org.restlet.Application#createInboundRoot() + */ + @Override + public Restlet createInboundRoot() { + //this.authenticator = createAuthenticator(); + + // String target = "{rh}/{rf}/XX"; + // Redirector redirector = new + // Redirector(getContext().createChildContext(), target, + // Redirector.MODE_CLIENT_SEE_OTHER); + + Router router = new Router(getContext()); + /* + router.attach("/annotator/annotations", AnnotatorAnnotations.class); + router.attach("/annotator/annotations/{id}", AnnotatorAnnotations.class); + router.attach("/annotator/search", AnnotatorSearch.class); + + // router.attach("",redirector); + router.attach("/annotator", ExtendedAnnotationInput.class); + */ + router.attach("/", AnnotatorInfo.class); + //authenticator.setNext(router); + //return authenticator; + + return router; + } + + /** + * Hole den vollen Benutzernamen aus dem LDAP + * + * @param creator + * @return + */ + public String getUserNameFromLdap(String creator) { + String retString = creator; // falls nichts gefunden wird einfach den + // creator zurueckgeben + Hashtable<String, String> env = new Hashtable<String, String>(); + String sp = "com.sun.jndi.ldap.LdapCtxFactory"; + env.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY, sp); + + String ldapUrl = "ldap://ldapreplik.mpiwg-berlin.mpg.de/dc=mpiwg-berlin,dc=mpg,dc=de"; // TODO should go into config file + env.put(javax.naming.Context.PROVIDER_URL, ldapUrl); + + DirContext dctx; + try { + dctx = new InitialDirContext(env); + } catch (NamingException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + return retString; + } + + String base = "ou=People"; + + SearchControls sc = new SearchControls(); + String[] attributeFilter = { "cn", "mail" }; + sc.setReturningAttributes(attributeFilter); + sc.setSearchScope(SearchControls.SUBTREE_SCOPE); + + String filter = "(uid=" + creator + ")"; + + try { + NamingEnumeration<SearchResult> results = dctx.search(base, filter, + sc); + while (results.hasMore()) { + SearchResult sr = (SearchResult) results.next(); + javax.naming.directory.Attributes attrs = sr.getAttributes(); + + Attribute attr = attrs.get("cn"); + retString = (String) attr.get(); + } + } catch (NamingException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + try { + dctx.close(); + } catch (NamingException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return retString; + } + +}