You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@esme.apache.org by vd...@apache.org on 2009/04/25 22:36:27 UTC

svn commit: r768598 - in /incubator/esme/branches/access-pools/server/src/main/scala/org/apache/esme: api/RestAPI.scala model/AccessPool.scala model/Privilege.scala

Author: vdichev
Date: Sat Apr 25 20:36:26 2009
New Revision: 768598

URL: http://svn.apache.org/viewvc?rev=768598&view=rev
Log:
ESME-56 RESTful API to add user to an access pool.

Modified:
    incubator/esme/branches/access-pools/server/src/main/scala/org/apache/esme/api/RestAPI.scala
    incubator/esme/branches/access-pools/server/src/main/scala/org/apache/esme/model/AccessPool.scala
    incubator/esme/branches/access-pools/server/src/main/scala/org/apache/esme/model/Privilege.scala

Modified: incubator/esme/branches/access-pools/server/src/main/scala/org/apache/esme/api/RestAPI.scala
URL: http://svn.apache.org/viewvc/incubator/esme/branches/access-pools/server/src/main/scala/org/apache/esme/api/RestAPI.scala?rev=768598&r1=768597&r2=768598&view=diff
==============================================================================
--- incubator/esme/branches/access-pools/server/src/main/scala/org/apache/esme/api/RestAPI.scala (original)
+++ incubator/esme/branches/access-pools/server/src/main/scala/org/apache/esme/api/RestAPI.scala Sat Apr 25 20:36:26 2009
@@ -100,6 +100,9 @@
 
     case Req("api" :: "add_pool" :: poolName :: Nil, "", PostRequest) =>
       () => addPool(poolName)
+
+    case Req("api" :: "add_user_pool" :: Nil, "", PostRequest) =>
+      addUserToPool
   }
 
   def findAction: Box[Action] =
@@ -354,6 +357,24 @@
     r
   }
   
+  def addUserToPool(): LiftResponse = {
+    val r: Box[Boolean] = 
+    for (adminUser <- User.currentUser;
+         poolName <- S.param("pool") ?~ "Pool not specified";
+         realm <- (S.param("realm") or Full("Native"));
+         pool <- AccessPool.findPool(poolName, realm) ?~ "Pool not found";
+         _ <- Privilege.find(By(Privilege.pool, pool),
+                             By(Privilege.user, adminUser),
+                             By(Privilege.permission, Permission.Admin)) ?~ "User has no permission to administer pool";
+         userName <- S.param("user") ?~ "User to add to pool not specified";
+         user <- User.findFromWeb(userName) ?~ "User not found";
+         permissionName <- (S.param("permission") or Full("Write"));
+         permission <- Box(Permission.valueOf(permissionName)) ?~ "Unknown permission type"
+    ) yield Privilege.create.user(user).pool(pool).permission(permission).save
+    
+    r
+  }
+  
   def createTag(in: NodeSeq) = <esme_api>{in}</esme_api>
 
   

Modified: incubator/esme/branches/access-pools/server/src/main/scala/org/apache/esme/model/AccessPool.scala
URL: http://svn.apache.org/viewvc/incubator/esme/branches/access-pools/server/src/main/scala/org/apache/esme/model/AccessPool.scala?rev=768598&r1=768597&r2=768598&view=diff
==============================================================================
--- incubator/esme/branches/access-pools/server/src/main/scala/org/apache/esme/model/AccessPool.scala (original)
+++ incubator/esme/branches/access-pools/server/src/main/scala/org/apache/esme/model/AccessPool.scala Sat Apr 25 20:36:26 2009
@@ -30,18 +30,20 @@
 
 object AccessPool extends AccessPool with LongKeyedMetaMapper[AccessPool] {
 
+  def findPool(name: String, realm: String): Box[AccessPool] = 
+    AccessPool.find(By(AccessPool.name,  name),
+                    By(AccessPool.realm, realm))
+
 }
 
 class AccessPool extends LongKeyedMapper[AccessPool] {
   def getSingleton = AccessPool
   def primaryKeyField = id
 
-  private def sameName(name: String) = 
-    AccessPool.findAll(By(AccessPool.name, name)).
-      filter(_.realm.is.equalsIgnoreCase(this.realm.is))
-  
   object id extends MappedLongIndex(this)
 
+  object realm extends MappedString(this, 256)
+
   private[model] object name extends MappedString(this, 256) {
     
     override def validations = checkDuplicate _ :: super.validations
@@ -58,6 +60,8 @@
     case List(_,_*) => Failure("Duplicate access pool name!")
   }
 
-  object realm extends MappedString(this, 256)
-
+  private def sameName(name: String) = 
+    AccessPool.findAll(By(AccessPool.name, name)).
+      filter(_.realm.is.equalsIgnoreCase(this.realm.is))
+  
 }

Modified: incubator/esme/branches/access-pools/server/src/main/scala/org/apache/esme/model/Privilege.scala
URL: http://svn.apache.org/viewvc/incubator/esme/branches/access-pools/server/src/main/scala/org/apache/esme/model/Privilege.scala?rev=768598&r1=768597&r2=768598&view=diff
==============================================================================
--- incubator/esme/branches/access-pools/server/src/main/scala/org/apache/esme/model/Privilege.scala (original)
+++ incubator/esme/branches/access-pools/server/src/main/scala/org/apache/esme/model/Privilege.scala Sat Apr 25 20:36:26 2009
@@ -26,7 +26,14 @@
 import util._
 
 object Privilege extends Privilege with LongKeyedMetaMapper[Privilege] {
+  
+  override def beforeSave = deleteExisting _ :: super.beforeSave
 
+  private def deleteExisting(in: Privilege) {
+    findAll(By(pool, in.pool),
+            By(user, in.user)).
+    foreach(_.delete_!)
+  }
 }
 
 class Privilege extends LongKeyedMapper[Privilege] {