Author: tdraier
Date: Thu Nov 15 18:50:16 2007
New Revision: 19163

URL: https://svndev.jahia.net/websvn/listing.php?sc=3D1&rev=3D19163&repname=
=3Djahia
Log:
introduce simple public user service and jcr login module

Added:
    tags/JAHIA_5_0_3/public-api/
    tags/JAHIA_5_0_3/public-api/locator.ent   (with props)
    tags/JAHIA_5_0_3/public-api/project.xml   (with props)
    tags/JAHIA_5_0_3/public-api/src/
    tags/JAHIA_5_0_3/public-api/src/java/
    tags/JAHIA_5_0_3/public-api/src/java/org/
    tags/JAHIA_5_0_3/public-api/src/java/org/jahia/
    tags/JAHIA_5_0_3/public-api/src/java/org/jahia/api/
    tags/JAHIA_5_0_3/public-api/src/java/org/jahia/api/user/
    tags/JAHIA_5_0_3/public-api/src/java/org/jahia/api/user/JahiaUserServic=
e.java
    tags/JAHIA_5_0_3/public-api/src/java/org/jahia/api/user/JahiaUserServic=
eFactory.java
    tags/JAHIA_5_0_3/public-api/src/java/org/jahia/api/user/JahiaUserServic=
eProxy.java
    tags/JAHIA_5_0_3/public-api/src/java/org/jahia/jaas/
    tags/JAHIA_5_0_3/public-api/src/java/org/jahia/jaas/JahiaLoginModule.ja=
va
    tags/JAHIA_5_0_3/public-api/src/java/org/jahia/jaas/JahiaPrincipal.java

Added: tags/JAHIA_5_0_3/public-api/locator.ent
URL: https://svndev.jahia.net/websvn/filedetails.php?path=3D/tags/JAHIA_5_0=
_3/public-api/locator.ent&rev=3D19163&repname=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- tags/JAHIA_5_0_3/public-api/locator.ent (added)
+++ tags/JAHIA_5_0_3/public-api/locator.ent Thu Nov 15 18:50:16 2007
@@ -0,0 +1,6 @@
+<!ENTITY common-dependencies SYSTEM "file:../../common-packagedwebapps/pom=
-fragments/common-dependencies.ent">    =

+<!ENTITY common-topsite SYSTEM "file:../../common-packagedwebapps/pom-frag=
ments/common-topsite.ent">      =

+<!ENTITY common-toprepository SYSTEM "file:../../common-packagedwebapps/po=
m-fragments/common-toprepository.ent">  =

+<!ENTITY common-warsite SYSTEM "file:../../common-packagedwebapps/pom-frag=
ments/common-warsite.ent">      =

+<!ENTITY common-warrepository SYSTEM "file:../../common-packagedwebapps/po=
m-fragments/common-warrepository.ent">  =

+<!ENTITY jetspeed-version "2.1-dev">

Added: tags/JAHIA_5_0_3/public-api/project.xml
URL: https://svndev.jahia.net/websvn/filedetails.php?path=3D/tags/JAHIA_5_0=
_3/public-api/project.xml&rev=3D19163&repname=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- tags/JAHIA_5_0_3/public-api/project.xml (added)
+++ tags/JAHIA_5_0_3/public-api/project.xml Thu Nov 15 18:50:16 2007
@@ -0,0 +1,46 @@
+<?xml version=3D"1.0" encoding=3D"UTF-8"?>
+<!DOCTYPE project [
+    <!ENTITY % locator-entities SYSTEM "file:locator.ent"> %locator-entiti=
es;
+]>
+<project>
+  <extend>${basedir}/../project.xml</extend>
+  <pomVersion>3</pomVersion>
+  <artifactId>public-api</artifactId>
+  <groupId>jahia</groupId>
+  <package>org.jahia</package>
+
+  <url>http://projects.jahia.org/${pom.artifactId}/core</url>
+  <siteDirectory>html/${pom.artifactId}/core</siteDirectory>
+
+  <repository>
+    <connection>scm:cvs:pserver:[EMAIL PROTECTED]:/home/cvs/repos=
itory_anonymous:${pom.artifactId}/loginmodule</connection>
+    <url>http://cvspub.jahia.org/cgi-bin/cvsweb.cgi/${pom.artifactId}/core=
/</url>
+  </repository>
+
+  <dependencies>
+
+    <dependency>
+      <groupId>jsr170</groupId>
+      <artifactId>jcr</artifactId>
+      <version>1.0</version>
+      <url>http://www.day.com/maven/jsr170/jars/jcr-1.0.jar</url>
+    </dependency>
+
+    <dependency>
+      <groupId>commons-discovery</groupId>
+      <artifactId>commons-discovery</artifactId>
+      <version>0.2</version>
+    </dependency>
+    <dependency>
+      <id>commons-id</id>
+      <version>0.1-dev</version>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <nagEmailAddress>[EMAIL PROTECTED]</nagEmailAddress>
+    <sourceDirectory>src/java</sourceDirectory>
+    <unitTestSourceDirectory>src/test/src/java</unitTestSourceDirectory>
+  </build>
+
+</project>

Added: tags/JAHIA_5_0_3/public-api/src/java/org/jahia/api/user/JahiaUserSer=
vice.java
URL: https://svndev.jahia.net/websvn/filedetails.php?path=3D/tags/JAHIA_5_0=
_3/public-api/src/java/org/jahia/api/user/JahiaUserService.java&rev=3D19163=
&repname=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- tags/JAHIA_5_0_3/public-api/src/java/org/jahia/api/user/JahiaUserServic=
e.java (added)
+++ tags/JAHIA_5_0_3/public-api/src/java/org/jahia/api/user/JahiaUserServic=
e.java Thu Nov 15 18:50:16 2007
@@ -0,0 +1,26 @@
+package org.jahia.api.user;
+
+import java.util.List;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: toto
+ * Date: 12 nov. 2007
+ * Time: 12:16:35
+ * To change this template use File | Settings | File Templates.
+ */
+public interface JahiaUserService {
+
+    public boolean checkPassword(String username, String password);
+
+    public boolean isServerAdmin(String username);
+
+    public boolean isAdmin(String username, String site);
+
+    public boolean isUserMemberOf(String username, String groupname, Strin=
g site);
+
+    public List getUserMembership(String username);
+
+    public List getGroupMembers(String groupname);
+
+}

Added: tags/JAHIA_5_0_3/public-api/src/java/org/jahia/api/user/JahiaUserSer=
viceFactory.java
URL: https://svndev.jahia.net/websvn/filedetails.php?path=3D/tags/JAHIA_5_0=
_3/public-api/src/java/org/jahia/api/user/JahiaUserServiceFactory.java&rev=
=3D19163&repname=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- tags/JAHIA_5_0_3/public-api/src/java/org/jahia/api/user/JahiaUserServic=
eFactory.java (added)
+++ tags/JAHIA_5_0_3/public-api/src/java/org/jahia/api/user/JahiaUserServic=
eFactory.java Thu Nov 15 18:50:16 2007
@@ -0,0 +1,24 @@
+package org.jahia.api.user;
+
+import javax.naming.spi.ObjectFactory;
+import javax.naming.Name;
+import javax.naming.Context;
+import java.util.Hashtable;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: toto
+ * Date: 14 nov. 2007
+ * Time: 18:42:58
+ * To change this template use File | Settings | File Templates.
+ */
+public class JahiaUserServiceFactory implements ObjectFactory {
+    public Object getObjectInstance(Object obj, Name name, Context nameCtx,
+                                    Hashtable environment)
+            throws Exception {
+
+        return new JahiaUserServiceProxy();
+    }
+
+    =

+}

Added: tags/JAHIA_5_0_3/public-api/src/java/org/jahia/api/user/JahiaUserSer=
viceProxy.java
URL: https://svndev.jahia.net/websvn/filedetails.php?path=3D/tags/JAHIA_5_0=
_3/public-api/src/java/org/jahia/api/user/JahiaUserServiceProxy.java&rev=3D=
19163&repname=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- tags/JAHIA_5_0_3/public-api/src/java/org/jahia/api/user/JahiaUserServic=
eProxy.java (added)
+++ tags/JAHIA_5_0_3/public-api/src/java/org/jahia/api/user/JahiaUserServic=
eProxy.java Thu Nov 15 18:50:16 2007
@@ -0,0 +1,42 @@
+package org.jahia.api.user;
+
+import java.util.List;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: toto
+ * Date: 14 nov. 2007
+ * Time: 18:35:35
+ * To change this template use File | Settings | File Templates.
+ */
+public class JahiaUserServiceProxy implements JahiaUserService {
+    private JahiaUserService service;
+
+    public void setService(JahiaUserService service) {
+        this.service =3D service;
+    }
+
+    public boolean checkPassword(String username, String password) {
+        return service.checkPassword(username, password);
+    }
+
+    public boolean isServerAdmin(String username) {
+        return service.isServerAdmin(username);
+    }
+
+    public boolean isAdmin(String username, String site) {
+        return service.isAdmin(username, site);
+    }
+
+    public boolean isUserMemberOf(String username, String groupname, Strin=
g site) {
+        return service.isUserMemberOf(username, groupname, site);
+    }
+
+    public List getUserMembership(String username) {
+        return service.getUserMembership(username);
+    }
+
+    public List getGroupMembers(String groupname) {
+        return service.getGroupMembers(groupname);
+    }
+}

Added: tags/JAHIA_5_0_3/public-api/src/java/org/jahia/jaas/JahiaLoginModule=
.java
URL: https://svndev.jahia.net/websvn/filedetails.php?path=3D/tags/JAHIA_5_0=
_3/public-api/src/java/org/jahia/jaas/JahiaLoginModule.java&rev=3D19163&rep=
name=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- tags/JAHIA_5_0_3/public-api/src/java/org/jahia/jaas/JahiaLoginModule.ja=
va (added)
+++ tags/JAHIA_5_0_3/public-api/src/java/org/jahia/jaas/JahiaLoginModule.ja=
va Thu Nov 15 18:50:16 2007
@@ -0,0 +1,133 @@
+package org.jahia.jaas;
+
+import org.apache.commons.id.IdentifierGenerator;
+import org.apache.commons.id.IdentifierGeneratorFactory;
+import org.jahia.api.user.JahiaUserService;
+
+import javax.jcr.Credentials;
+import javax.jcr.SimpleCredentials;
+import javax.security.auth.Subject;
+import javax.security.auth.callback.*;
+import javax.security.auth.login.FailedLoginException;
+import javax.security.auth.login.LoginException;
+import javax.security.auth.spi.LoginModule;
+import javax.naming.NamingException;
+import javax.naming.InitialContext;
+import javax.naming.Context;
+import java.io.IOException;
+import java.security.Principal;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Hashtable;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: toto
+ * Date: 27 f=C3=83=C2=A9vr. 2006
+ * Time: 12:00:21
+ * To change this template use File | Settings | File Templates.
+ */
+public class JahiaLoginModule implements LoginModule {
+    public static final String SYSTEM =3D "@system";
+    public static final String GUEST =3D "@guest";
+
+    private static IdentifierGenerator idGen =3D IdentifierGeneratorFactor=
y.newInstance().uuidVersionFourGenerator();
+    private static HashMap systemPass =3D new HashMap();
+
+    private Subject subject;
+    private Principal user =3D null;
+    private CallbackHandler callbackHandler;
+    private Map sharedState;
+    private Map options;
+
+    public void initialize(Subject subject, CallbackHandler callbackHandle=
r, Map sharedState, Map options) {
+        this.subject =3D subject;
+        this.callbackHandler =3D callbackHandler;
+        this.sharedState =3D sharedState;
+        this.options =3D options;
+    }
+
+    public boolean login() throws LoginException {
+        try {
+            Callback[] callbacks =3D new Callback[] { new NameCallback("na=
me?"), new PasswordCallback("pass?",false) } ;
+            callbackHandler.handle(callbacks);
+
+            String name =3D ((NameCallback)callbacks[0]).getName();
+            char[] pass =3D ((PasswordCallback)callbacks[1]).getPassword();
+            if (name !=3D null) {
+                if (SYSTEM.equals(name)) {
+                    String key =3D new String(pass);
+                    if (name.equals(systemPass.get(key))) {
+                        systemPass.remove(key);
+                        user =3D new JahiaPrincipal(SYSTEM, true, false);
+                    }
+                } else if (GUEST.equals(name)) {
+                    user =3D new JahiaPrincipal(GUEST, false, true);
+                } else {
+                    String key =3D new String(pass);
+                    if (name.equals(systemPass.get(key)) || getJahiaUserSe=
rvice().checkPassword(name,key)) {
+                        systemPass.remove(key);
+                        user =3D new JahiaPrincipal(name);
+                    }
+                }
+                if (user =3D=3D null) {
+                    throw new FailedLoginException();
+                }
+            }
+        } catch (Exception e) {
+        }
+        return user !=3D null;
+    }
+
+    public boolean commit() throws LoginException {
+        if (user =3D=3D null) {
+            return false;
+        } else {
+            // add a principals (authenticated identities) to the Subject
+            subject.getPrincipals().add(user);
+            return true;
+        }
+    }
+
+    public boolean abort() throws LoginException {
+        if (user =3D=3D null) {
+            return false;
+        } else {
+            logout();
+        }
+        return true;
+    }
+
+    public boolean logout() throws LoginException {
+        subject.getPrincipals().remove(user);
+        user =3D null;
+        return true;
+    }
+
+    private static String getSystemPass(String user) {
+        String p =3D idGen.nextIdentifier().toString();
+        systemPass.put(p, user);
+        return p;
+    }
+
+    public static Credentials getSystemCredentials() {
+        return new SimpleCredentials(JahiaLoginModule.SYSTEM, getSystemPas=
s(JahiaLoginModule.SYSTEM).toCharArray());
+    }
+
+    public static Credentials getGuestCredentials() {
+        return new SimpleCredentials(JahiaLoginModule.GUEST, new char[0]);
+    }
+
+    public static Credentials getCredentials(String username) {
+        return new SimpleCredentials(username, getSystemPass(username).toC=
harArray());
+    }
+
+    public JahiaUserService getJahiaUserService() throws NamingException {
+        String serviceName =3D "jahia/users";
+        Hashtable env =3D new Hashtable();
+        InitialContext initctx =3D new InitialContext(env);
+        Context ctx =3D (Context) initctx.lookup("java:comp/env");
+        return (JahiaUserService) ctx.lookup(serviceName);
+    }
+
+}

Added: tags/JAHIA_5_0_3/public-api/src/java/org/jahia/jaas/JahiaPrincipal.j=
ava
URL: https://svndev.jahia.net/websvn/filedetails.php?path=3D/tags/JAHIA_5_0=
_3/public-api/src/java/org/jahia/jaas/JahiaPrincipal.java&rev=3D19163&repna=
me=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- tags/JAHIA_5_0_3/public-api/src/java/org/jahia/jaas/JahiaPrincipal.java=
 (added)
+++ tags/JAHIA_5_0_3/public-api/src/java/org/jahia/jaas/JahiaPrincipal.java=
 Thu Nov 15 18:50:16 2007
@@ -0,0 +1,39 @@
+package org.jahia.jaas;
+
+import java.security.Principal;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: toto
+ * Date: 9 nov. 2007
+ * Time: 17:16:55
+ * To change this template use File | Settings | File Templates.
+ */
+public class JahiaPrincipal implements Principal {
+    private boolean isSystem =3D false;
+    private boolean isGuest =3D false;
+
+    private String name;
+
+    public JahiaPrincipal(String name, boolean system, boolean guest) {
+        this.name =3D name;
+        isSystem =3D system;
+        isGuest =3D guest;
+    }
+
+    public JahiaPrincipal(String name) {
+        this.name =3D name;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public boolean isSystem() {
+        return isSystem;
+    }
+
+    public boolean isGuest() {
+        return isGuest;
+    }
+}

_______________________________________________
cvs_list mailing list
[email protected]
http://lists.jahia.org/cgi-bin/mailman/listinfo/cvs_list

Reply via email to