Return-Path: X-Original-To: apmail-clerezza-commits-archive@www.apache.org Delivered-To: apmail-clerezza-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id F3DE7104F4 for ; Wed, 4 Dec 2013 15:21:37 +0000 (UTC) Received: (qmail 6223 invoked by uid 500); 4 Dec 2013 15:21:23 -0000 Delivered-To: apmail-clerezza-commits-archive@clerezza.apache.org Received: (qmail 6160 invoked by uid 500); 4 Dec 2013 15:21:22 -0000 Mailing-List: contact commits-help@clerezza.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@clerezza.apache.org Delivered-To: mailing list commits@clerezza.apache.org Received: (qmail 6044 invoked by uid 99); 4 Dec 2013 15:21:19 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 04 Dec 2013 15:21:19 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id 4CC26B353; Wed, 4 Dec 2013 15:21:19 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: reto@apache.org To: commits@clerezza.apache.org Date: Wed, 04 Dec 2013 15:21:24 -0000 Message-Id: In-Reply-To: <1f142b8ebee54188999069f70f15e0b3@git.apache.org> References: <1f142b8ebee54188999069f70f15e0b3@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [7/9] CLEREZZA-435: repaced tabs with spaces in scala files http://git-wip-us.apache.org/repos/asf/clerezza/blob/35448624/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/AcpPermissionDescriptionsProvider.scala ---------------------------------------------------------------------- diff --git a/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/AcpPermissionDescriptionsProvider.scala b/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/AcpPermissionDescriptionsProvider.scala index a357de8..5d41410 100644 --- a/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/AcpPermissionDescriptionsProvider.scala +++ b/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/AcpPermissionDescriptionsProvider.scala @@ -30,46 +30,46 @@ import org.apache.felix.scr.annotations.Service * PermissionDescriptons of Account Control Panel permissions. * The following permissions are described: *
    - *
  • org.apache.clerezza.platform.accountcontrolpanel.AccountControlPanelAppPermission
  • - *
  • org.apache.clerezza.platform.accountcontrolpanel.ChangePasswordPermission
  • - *
  • org.apache.clerezza.platform.accountcontrolpanel.UserBundlePermission
  • + *
  • org.apache.clerezza.platform.accountcontrolpanel.AccountControlPanelAppPermission
  • + *
  • org.apache.clerezza.platform.accountcontrolpanel.ChangePasswordPermission
  • + *
  • org.apache.clerezza.platform.accountcontrolpanel.UserBundlePermission
  • *
* * @author mir */ object AcpPermissionDescriptionsProvider { - private val ACP_PERMISSION_DESCRIPTIONS: Set[PermissionDescripton] = new HashSet[PermissionDescripton] - ACP_PERMISSION_DESCRIPTIONS.add( - new PermissionDescripton("Change Own Password Permission", - "Grants permission to the user to change its own password", - null, classOf[ChangePasswordPermission], - "(org.apache.clerezza.platform.accountcontrolpanel.ChangePasswordPermission \"{username}\" \"\")" - ) - ) + private val ACP_PERMISSION_DESCRIPTIONS: Set[PermissionDescripton] = new HashSet[PermissionDescripton] + ACP_PERMISSION_DESCRIPTIONS.add( + new PermissionDescripton("Change Own Password Permission", + "Grants permission to the user to change its own password", + null, classOf[ChangePasswordPermission], + "(org.apache.clerezza.platform.accountcontrolpanel.ChangePasswordPermission \"{username}\" \"\")" + ) + ) - ACP_PERMISSION_DESCRIPTIONS.add( - new PermissionDescripton("Access Own Account Control Panel Permission", - "Grants permission to the user to access its own Account Control Panel", - null, classOf[AccountControlPanelAppPermission], - "(org.apache.clerezza.platform.accountcontrolpanel.AccountControlPanelAppPermission \"{username}\" \"\")" - ) - ) + ACP_PERMISSION_DESCRIPTIONS.add( + new PermissionDescripton("Access Own Account Control Panel Permission", + "Grants permission to the user to access its own Account Control Panel", + null, classOf[AccountControlPanelAppPermission], + "(org.apache.clerezza.platform.accountcontrolpanel.AccountControlPanelAppPermission \"{username}\" \"\")" + ) + ) - ACP_PERMISSION_DESCRIPTIONS.add( - new PermissionDescripton("Bundle Upload Permission", - "Grants permission to the user to upload a bundle", - null, classOf[AccountControlPanelAppPermission], - "(org.apache.clerezza.platform.accountcontrolpanel.UserBundlePermission \"{username}\" \"\")" - ) - ) + ACP_PERMISSION_DESCRIPTIONS.add( + new PermissionDescripton("Bundle Upload Permission", + "Grants permission to the user to upload a bundle", + null, classOf[AccountControlPanelAppPermission], + "(org.apache.clerezza.platform.accountcontrolpanel.UserBundlePermission \"{username}\" \"\")" + ) + ) } class AcpPermissionDescriptionsProvider extends PermissionDescriptionsProvider { - import AcpPermissionDescriptionsProvider._ + import AcpPermissionDescriptionsProvider._ - def getPermissionDescriptors: Set[PermissionDescripton] = { - return ACP_PERMISSION_DESCRIPTIONS - } + def getPermissionDescriptors: Set[PermissionDescripton] = { + return ACP_PERMISSION_DESCRIPTIONS + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/clerezza/blob/35448624/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/MenuItemProvider.scala ---------------------------------------------------------------------- diff --git a/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/MenuItemProvider.scala b/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/MenuItemProvider.scala index 3d9e3c1..7ab15dd 100644 --- a/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/MenuItemProvider.scala +++ b/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/MenuItemProvider.scala @@ -44,28 +44,28 @@ import org.apache.stanbol.commons.security.UserUtil * @author reto */ class MenuItemProvider extends GlobalMenuItemsProvider { - def getMenuItems: Set[GlobalMenuItem] = { - var items: Set[GlobalMenuItem] = new HashSet[GlobalMenuItem] - var userName: String = UserUtil.getCurrentUserName - if (userName != null) { - try { - AccessController.checkPermission(new AccountControlPanelAppPermission(userName, "")) - } - catch { - case e: AccessControlException => { - return items - } - } - try { - var path: String = "/user/" + URLEncoder.encode(userName, "utf-8") + "/control-panel" - items.add(new GlobalMenuItem(path, "ACP", "Account Control Panel", 5, "Administration")) - } - catch { - case e: UnsupportedEncodingException => { - throw new RuntimeException(e) - } - } - } - return items - } + def getMenuItems: Set[GlobalMenuItem] = { + var items: Set[GlobalMenuItem] = new HashSet[GlobalMenuItem] + var userName: String = UserUtil.getCurrentUserName + if (userName != null) { + try { + AccessController.checkPermission(new AccountControlPanelAppPermission(userName, "")) + } + catch { + case e: AccessControlException => { + return items + } + } + try { + var path: String = "/user/" + URLEncoder.encode(userName, "utf-8") + "/control-panel" + items.add(new GlobalMenuItem(path, "ACP", "Account Control Panel", 5, "Administration")) + } + catch { + case e: UnsupportedEncodingException => { + throw new RuntimeException(e) + } + } + } + return items + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/clerezza/blob/35448624/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/ProfilePanel.scala ---------------------------------------------------------------------- diff --git a/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/ProfilePanel.scala b/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/ProfilePanel.scala index 5a4ef94..0104077 100644 --- a/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/ProfilePanel.scala +++ b/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/ProfilePanel.scala @@ -65,402 +65,402 @@ import org.apache.clerezza.rdf.scala.utils._ @Path("/user/{id}/profile") class ProfilePanel extends Logging { - import collection.JavaConversions._ - import Preamble._ - - /** - * Returns a GraphNode describing a ProfilePage for the user identified by - * the specified UserName. A ProfilePage resourcve is retuned for any user - * disregarding if they have a WebId and if this is local. The renderlet - * may provide instrcutions on how a WebId is created for users that do - * not have a WebId and redirect them to their WebId provider if they have - * a remote WebId. - */ - @GET - def getPersonalProfilePage(@Context uriInfo: UriInfo, - @PathParam(value = "id") userName: String): GraphNode = { - TrailingSlash.enforceNotPresent(uriInfo) - //not checking as public profile must be public, more selective access control TBD - //AccessController.checkPermission(new AccountControlPanelAppPermission(userName, "")) - val resultNode= getPersonalProfile(userName, uriInfo) - return resultNode - } - - private def getPersonalProfile(userName: String, info: UriInfo): GraphNode = { - lazy val suggestedPPDUri = getSuggestedPPDUri(userName) - - val profile = AccessController.doPrivileged(new PrivilegedAction[GraphNode] { - def run: GraphNode = { - val userInSysGraph = userManager.getUserInSystemGraph(userName) - val userResource = userInSysGraph.getNode - val profile: GraphNode = userResource match { - case blank: BNode => { - //user does not have a webId yet - val g = new EzMGraph() - import g._ - val profile = bnode - (profile -- CONTROLPANEL.isLocalProfile --> bool2lit(true) - -- CONTROLPANEL.suggestedPPDUri --> suggestedPPDUri - -- FOAF.primaryTopic --> (bnode -- PLATFORM.userName --> userName)) - profile - } - case webid: UriRef => { - var webIDInfo = webIdGraphsService.getWebIdInfo(webid) - var res = new GraphNode(suggestedPPDUri, new UnionMGraph(new SimpleMGraph, webIDInfo.localPublicUserData)) - (res -- CONTROLPANEL.isLocalProfile --> bool2lit(webIDInfo.isLocal) - -- FOAF.primaryTopic --> webid) - res - } - } - /*val friendInfo:Iterator[TripleCollection] = for (kn: Triple <- profile.getGraph.filter(userResource.asInstanceOf[NonLiteral], FOAF.knows, null) - if kn.getObject.isInstanceOf[UriRef]; - friend = kn.getObject.asInstanceOf[UriRef] - if (friend != suggestedPPDUri) - ) yield { - try { - val friendGraph = tcManager.getGraph(FoafBrowser.removeHash(friend)) - new RichGraphNode(friend, friendGraph).getNodeContext - } catch { - case e => { - logger.warn("cought exception trying to fetch graph - these graphs should already be in store " + friend, e) - new EzMGraph() { - friend -- SKOS.note --> ("problem with fetching this node: " + e) - } - } - } - } - //vera bad: mixing data from different sources - for (g <- friendInfo) profile.getGraph.addAll(g) */ - profile - } - }) - - - (profile a PLATFORM.HeadedPage - a CONTROLPANEL.ProfilePage) - } - - /** - * @param userName - * @return the suggested Personal Profile Document URI - */ - def getSuggestedPPDUri(userName: String): UriRef = { - return new UriRef(platformConfig.getDefaultBaseUri.getUnicodeString + "user/" + userName + "/profile") - } - - @POST - @Path("set-existing-webid") - def setExistingWebId(@Context uriInfo: UriInfo, - @FormParam("webid") webId: UriRef, - @PathParam(value = "id") userName: String): Response = { - AccessController.checkPermission(new AccountControlPanelAppPermission(userName, "")) - return AccessController.doPrivileged(new PrivilegedAction[Response] { - def run: Response = { - var userInSystemGraph: GraphNode = userManager.getUserInSystemGraph(userName) - userInSystemGraph.replaceWith(webId) - return RedirectUtil.createSeeOtherResponse("../profile", uriInfo) - } - }) - } - - @POST - @Path("create-new-web-id") - def createNewWebId(@Context uriInfo: UriInfo, - @PathParam(value = "id") userName: String): Response = { - val ppd: UriRef = getSuggestedPPDUri(userName) - val webId: UriRef = new UriRef(ppd.getUnicodeString + "#me") - AccessController.checkPermission(new AccountControlPanelAppPermission(userName, "")) - return AccessController.doPrivileged(new PrivilegedAction[Response] { - def run: Response = { - userManager.assignPermissionsToUser(userName, java.util.Collections.singletonList(new TcPermission( - webId.getUnicodeString, TcPermission.READWRITE).toString)) - tcManager.getTcAccessController.setRequiredReadPermissionStrings( - ppd, Collections.singleton(new TcPermission( - Constants.CONTENT_GRAPH_URI_STRING, TcPermission.READ).toString)) - tcManager.createMGraph(ppd) - val webIDInfo = webIdGraphsService.getWebIdInfo(webId) - webIDInfo.localPublicUserData.addAll( - Arrays.asList( - new TripleImpl(ppd, RDF.`type`, FOAF.PersonalProfileDocument), - new TripleImpl(ppd, FOAF.primaryTopic, webId)) - ) - var userInSystemGraph: GraphNode = userManager.getUserInSystemGraph(userName) - userInSystemGraph.replaceWith(webId) - return RedirectUtil.createSeeOtherResponse("../profile", uriInfo) - } - }) - } - - /** - * Presents a confirmation form for adding a contact - */ - @GET - @Path("addContact") - def addContactConfirm(@PathParam(value = "id") userName: String, - @QueryParam("contactWebId") contactWebId: UriRef): GraphNode = { - AccessController.checkPermission(new AccountControlPanelAppPermission(userName, "")) - val contactNode = AccessController.doPrivileged(new PrivilegedAction[GraphNode] { - def run = { - graphNodeProvider.get(contactWebId); - } - }) - val resultGraph = new EzMGraph(new UnionMGraph(new SimpleMGraph, contactNode.getGraph)) - import resultGraph._ - val result: GraphNode = bnode - result a CONTROLPANEL.ContactConfirmPage - result -- FOAF.primaryTopic --> contactNode - } - - @POST - @Path("addContact") - def addContact(@PathParam(value = "id") userName: String, @Context uriInfo: UriInfo, - @FormParam("webId") newContacts: java.util.List[UriRef]): Response = { - import collection.JavaConversions._ - if (newContacts.size > 0) { - var me: GraphNode = AccessController.doPrivileged(new PrivilegedAction[GraphNode] { - def run: GraphNode = { - return userManager.getUserGraphNode(userName) - } - }) - for (contactWebID <- newContacts) { - val webIdGraphs = webIdGraphsService.getWebIdInfo(me.getNode.asInstanceOf[UriRef]) - var meGrph: GraphNode = new GraphNode(me.getNode, webIdGraphs.localPublicUserData) - meGrph.addProperty(FOAF.knows, contactWebID) - } //todo: one should catch errors here (bad uris sent for ex - } - return RedirectUtil.createSeeOtherResponse("../profile", uriInfo) - } - - /** - * Removes a contact - */ - @POST - @Path("deleteContact") - def deleteContact(@PathParam(value = "id") userName: String, @Context uriInfo: UriInfo, - @FormParam("contactWebId") contactWebId: UriRef): Response = { - import collection.JavaConversions._ - var me: GraphNode = AccessController.doPrivileged(new PrivilegedAction[GraphNode] { - def run: GraphNode = { - return userManager.getUserGraphNode(userName) - } - }) - val webIdGraphs = webIdGraphsService.getWebIdInfo(me.getNode.asInstanceOf[UriRef]) - var meGrph: GraphNode = new GraphNode(me.getNode, webIdGraphs.localPublicUserData) - meGrph.deleteProperty(FOAF.knows, contactWebId) - return RedirectUtil.createSeeOtherResponse("../profile", uriInfo) - } - - /** - * @parm webId: A list of WebIDs to be added as Subject Alternative Names - * @param cn Common Name, the name that usually appears in the certificate selection box - * @param spkac key request in format generated by Netscape, Safari, Opera - * @param crmf hey request in format generated by M$ Explorer - * @param csr key request as generated by Javascript of Netscape - * @param hours the certificate should last (hours and days add up) - * @param days the certificate should last - * @param comment a comment to be attached to the public key in the database - */ - @POST - @Path("keygen") - def createCert(@FormParam("webId") webIds: java.util.List[URI], - @FormParam("cn") commonName: String, - @FormParam("spkac") spkac: String, - @FormParam("crmf") crmf: String, - @FormParam("csr") csr: String, - @FormParam("hours") hours: String, - @FormParam("days") days: String, - @FormParam("comment") comment: String): Response = { - import scala.collection.JavaConversions._ - var cert: Certificate = null - if (spkac != null && spkac.length > 0) { - cert = keygenSrvc.createFromSpkac(spkac) - if (cert == null) { - logger.warn("unable to create certificate from spkac request") - } - } - if (cert == null && crmf != null && crmf.length > 0) { - cert = keygenSrvc.createFromCRMF(crmf) - if (cert == null) { - logger.warn("unable to create certificate from crmf requrest :" + crmf) - } - } - if (cert == null && csr != null && csr.length > 0) { - cert = keygenSrvc.createFromPEM(csr) - if (cert == null) { - logger.warn("unable to create certificate from csr request :" + csr) - } - } - if (cert == null) { - throw new RuntimeException("The server was unable to create a certificate") - } - cert.setSubjectCommonName(commonName) - cert.addDurationInHours(hours) - cert.addDurationInDays(days) - cert.startEarlier("2") - for(san: URI<-webIds) { - cert.addSubjectAlternativeName(san.toString) - } - var ser: CertSerialisation = null - try { - ser = cert.getSerialisation - } - catch { - case ex: Exception => { - throw new RuntimeException(ex) - } - } - var pubKey: RSAPublicKey = cert.getSubjectPublicKey.getPublicKey.asInstanceOf[RSAPublicKey] - var publicExponent: BigInteger = pubKey.getPublicExponent - var modulus: BigInteger = pubKey.getModulus - - for (webid: URI<-webIds - if (webid.getScheme=="https"||webid.getScheme=="http"); - val webidRef = new UriRef(webid.toString); - val webIdInfo = webIdGraphsService.getWebIdInfo(webidRef); - if (webIdInfo.isLocal) - ) { - val certGraph = new EzMGraph(webIdInfo.localPublicUserData) - import certGraph._ - val certNode = certGraph.bnode - ( (certNode a RSA.RSAPublicKey) - -- CERT.identity --> webidRef - -- RSA.modulus --> modulus - -- RSA.public_exponent --> publicExponent - -- DC.date --> cert.getStartDate ) - if (comment != null && comment.length > 0) { - certNode -- RDFS.comment --> comment - } - } - var resBuild: Response.ResponseBuilder = Response.ok(ser.getContent, MediaType.valueOf(ser.getMimeType)) - return resBuild.build - } - - @POST - @Path("deletekey") - def deleteKey(@Context uriInfo: UriInfo, - @FormParam("webId") webId: UriRef, - @FormParam("keyhash") keys: List[String]): Response = { - val webIDInfo = webIdGraphsService.getWebIdInfo(webId) - val agent: GraphNode = new GraphNode(webId, webIDInfo.localPublicUserData) - var subjects: Iterator[GraphNode] = agent.getSubjectNodes(CERT.identity) - import scala.util.control.Breaks._ - breakable { - import scala.collection.JavaConversions._ - //to for loop through iterators - for (nl <- subjects) { - var modulusIt: Iterator[Resource] = nl.getObjects(RSA.modulus) - if (!modulusIt.hasNext) break - var modLit: Resource = modulusIt.next - if (modulusIt.hasNext) logger.warn("data error, a modulus too many in cert for " + webId) - if (!(modLit.isInstanceOf[TypedLiteral])) { - logger.warn("a public key has a modulus that is not a literal for " + webId) - break - } - var modulus: BigInteger = LiteralFactory.getInstance.createObject(classOf[BigInteger], modLit.asInstanceOf[TypedLiteral]) - for (key <- keys) { - if (modulus.hashCode == Integer.decode(key)) { - nl.deleteNodeContext - break - } - } - } - } - return RedirectUtil.createSeeOtherResponse("../profile", uriInfo) - } - - @POST - @Path("modify") - def modifyProfile(@Context uriInfo: UriInfo, - @PathParam("id") userName: String, - @FormParam("webId") webId: UriRef, - @FormParam("name") name: String, - @FormParam("description") description: String): Response = { - val webIDInfo = AccessController.doPrivileged(new PrivilegedAction[WebIdInfo] { - def run = { - webIdGraphsService.getWebIdInfo(webId) - } - }) - val agent: GraphNode = new GraphNode(webId, webIDInfo.localPublicUserData) - agent.deleteProperties(FOAF.name) - agent.addPropertyValue(FOAF.name, name) - agent.deleteProperties(DC.description) - agent.addPropertyValue(DC.description, description) - logger.debug("local graph (uri: {}) is now of size {}".format(webIDInfo.webId, webIDInfo.localPublicUserData.size)) - RedirectUtil.createSeeOtherResponse("../profile", uriInfo) - } - - protected def bindUserManager(usermanager: UserManager): Unit = { - userManager = usermanager - } - - protected def unbindUserManager(usermanager: UserManager): Unit = { - if (userManager == usermanager) { - userManager = null - } - } - - protected def bindGraphNodeProvider(graphNodeProvider: GraphNodeProvider): Unit = { - this.graphNodeProvider = graphNodeProvider - } - - protected def unbindGraphNodeProvider(graphNodeProvider: GraphNodeProvider): Unit = { - this.graphNodeProvider = null - } - - protected def bindKeygenSrvc(keygenservice: KeygenService): Unit = { - keygenSrvc = keygenservice - } - - protected def unbindKeygenSrvc(keygenservice: KeygenService): Unit = { - if (keygenSrvc == keygenservice) { - keygenSrvc = null - } - } - - - protected def bindWebIdGraphsService(webidgraphsservice: WebIdGraphsService): Unit = { - webIdGraphsService = webidgraphsservice - } - - protected def unbindWebIdGraphsService(webidgraphsservice: WebIdGraphsService): Unit = { - webIdGraphsService = null - } - - protected def bindPlatformConfig(platformconfig: PlatformConfig): Unit = { - platformConfig = platformconfig - } - - protected def unbindPlatformConfig(platformconfig: PlatformConfig): Unit = { - if (platformConfig == platformconfig) { - platformConfig = null - } - } - - protected def bindTcManager(tcManager: TcManager) = { - this.tcManager = tcManager - } - - protected def unbindTcManager(tcManager: TcManager) = { - this.tcManager = null - } - - protected def activate(componentContext: ComponentContext): Unit = { - this.componentContext = componentContext - } - - - private var userManager: UserManager = null - - private var graphNodeProvider: GraphNodeProvider = null - - private var webIdGraphsService: WebIdGraphsService = null - - private var keygenSrvc: KeygenService = null - private var platformConfig: PlatformConfig = null - - - private var componentContext: ComponentContext = null - - private var tcManager: TcManager = null; + import collection.JavaConversions._ + import Preamble._ + + /** + * Returns a GraphNode describing a ProfilePage for the user identified by + * the specified UserName. A ProfilePage resourcve is retuned for any user + * disregarding if they have a WebId and if this is local. The renderlet + * may provide instrcutions on how a WebId is created for users that do + * not have a WebId and redirect them to their WebId provider if they have + * a remote WebId. + */ + @GET + def getPersonalProfilePage(@Context uriInfo: UriInfo, + @PathParam(value = "id") userName: String): GraphNode = { + TrailingSlash.enforceNotPresent(uriInfo) + //not checking as public profile must be public, more selective access control TBD + //AccessController.checkPermission(new AccountControlPanelAppPermission(userName, "")) + val resultNode= getPersonalProfile(userName, uriInfo) + return resultNode + } + + private def getPersonalProfile(userName: String, info: UriInfo): GraphNode = { + lazy val suggestedPPDUri = getSuggestedPPDUri(userName) + + val profile = AccessController.doPrivileged(new PrivilegedAction[GraphNode] { + def run: GraphNode = { + val userInSysGraph = userManager.getUserInSystemGraph(userName) + val userResource = userInSysGraph.getNode + val profile: GraphNode = userResource match { + case blank: BNode => { + //user does not have a webId yet + val g = new EzMGraph() + import g._ + val profile = bnode + (profile -- CONTROLPANEL.isLocalProfile --> bool2lit(true) + -- CONTROLPANEL.suggestedPPDUri --> suggestedPPDUri + -- FOAF.primaryTopic --> (bnode -- PLATFORM.userName --> userName)) + profile + } + case webid: UriRef => { + var webIDInfo = webIdGraphsService.getWebIdInfo(webid) + var res = new GraphNode(suggestedPPDUri, new UnionMGraph(new SimpleMGraph, webIDInfo.localPublicUserData)) + (res -- CONTROLPANEL.isLocalProfile --> bool2lit(webIDInfo.isLocal) + -- FOAF.primaryTopic --> webid) + res + } + } + /*val friendInfo:Iterator[TripleCollection] = for (kn: Triple <- profile.getGraph.filter(userResource.asInstanceOf[NonLiteral], FOAF.knows, null) + if kn.getObject.isInstanceOf[UriRef]; + friend = kn.getObject.asInstanceOf[UriRef] + if (friend != suggestedPPDUri) + ) yield { + try { + val friendGraph = tcManager.getGraph(FoafBrowser.removeHash(friend)) + new RichGraphNode(friend, friendGraph).getNodeContext + } catch { + case e => { + logger.warn("cought exception trying to fetch graph - these graphs should already be in store " + friend, e) + new EzMGraph() { + friend -- SKOS.note --> ("problem with fetching this node: " + e) + } + } + } + } + //vera bad: mixing data from different sources + for (g <- friendInfo) profile.getGraph.addAll(g) */ + profile + } + }) + + + (profile a PLATFORM.HeadedPage + a CONTROLPANEL.ProfilePage) + } + + /** + * @param userName + * @return the suggested Personal Profile Document URI + */ + def getSuggestedPPDUri(userName: String): UriRef = { + return new UriRef(platformConfig.getDefaultBaseUri.getUnicodeString + "user/" + userName + "/profile") + } + + @POST + @Path("set-existing-webid") + def setExistingWebId(@Context uriInfo: UriInfo, + @FormParam("webid") webId: UriRef, + @PathParam(value = "id") userName: String): Response = { + AccessController.checkPermission(new AccountControlPanelAppPermission(userName, "")) + return AccessController.doPrivileged(new PrivilegedAction[Response] { + def run: Response = { + var userInSystemGraph: GraphNode = userManager.getUserInSystemGraph(userName) + userInSystemGraph.replaceWith(webId) + return RedirectUtil.createSeeOtherResponse("../profile", uriInfo) + } + }) + } + + @POST + @Path("create-new-web-id") + def createNewWebId(@Context uriInfo: UriInfo, + @PathParam(value = "id") userName: String): Response = { + val ppd: UriRef = getSuggestedPPDUri(userName) + val webId: UriRef = new UriRef(ppd.getUnicodeString + "#me") + AccessController.checkPermission(new AccountControlPanelAppPermission(userName, "")) + return AccessController.doPrivileged(new PrivilegedAction[Response] { + def run: Response = { + userManager.assignPermissionsToUser(userName, java.util.Collections.singletonList(new TcPermission( + webId.getUnicodeString, TcPermission.READWRITE).toString)) + tcManager.getTcAccessController.setRequiredReadPermissionStrings( + ppd, Collections.singleton(new TcPermission( + Constants.CONTENT_GRAPH_URI_STRING, TcPermission.READ).toString)) + tcManager.createMGraph(ppd) + val webIDInfo = webIdGraphsService.getWebIdInfo(webId) + webIDInfo.localPublicUserData.addAll( + Arrays.asList( + new TripleImpl(ppd, RDF.`type`, FOAF.PersonalProfileDocument), + new TripleImpl(ppd, FOAF.primaryTopic, webId)) + ) + var userInSystemGraph: GraphNode = userManager.getUserInSystemGraph(userName) + userInSystemGraph.replaceWith(webId) + return RedirectUtil.createSeeOtherResponse("../profile", uriInfo) + } + }) + } + + /** + * Presents a confirmation form for adding a contact + */ + @GET + @Path("addContact") + def addContactConfirm(@PathParam(value = "id") userName: String, + @QueryParam("contactWebId") contactWebId: UriRef): GraphNode = { + AccessController.checkPermission(new AccountControlPanelAppPermission(userName, "")) + val contactNode = AccessController.doPrivileged(new PrivilegedAction[GraphNode] { + def run = { + graphNodeProvider.get(contactWebId); + } + }) + val resultGraph = new EzMGraph(new UnionMGraph(new SimpleMGraph, contactNode.getGraph)) + import resultGraph._ + val result: GraphNode = bnode + result a CONTROLPANEL.ContactConfirmPage + result -- FOAF.primaryTopic --> contactNode + } + + @POST + @Path("addContact") + def addContact(@PathParam(value = "id") userName: String, @Context uriInfo: UriInfo, + @FormParam("webId") newContacts: java.util.List[UriRef]): Response = { + import collection.JavaConversions._ + if (newContacts.size > 0) { + var me: GraphNode = AccessController.doPrivileged(new PrivilegedAction[GraphNode] { + def run: GraphNode = { + return userManager.getUserGraphNode(userName) + } + }) + for (contactWebID <- newContacts) { + val webIdGraphs = webIdGraphsService.getWebIdInfo(me.getNode.asInstanceOf[UriRef]) + var meGrph: GraphNode = new GraphNode(me.getNode, webIdGraphs.localPublicUserData) + meGrph.addProperty(FOAF.knows, contactWebID) + } //todo: one should catch errors here (bad uris sent for ex + } + return RedirectUtil.createSeeOtherResponse("../profile", uriInfo) + } + + /** + * Removes a contact + */ + @POST + @Path("deleteContact") + def deleteContact(@PathParam(value = "id") userName: String, @Context uriInfo: UriInfo, + @FormParam("contactWebId") contactWebId: UriRef): Response = { + import collection.JavaConversions._ + var me: GraphNode = AccessController.doPrivileged(new PrivilegedAction[GraphNode] { + def run: GraphNode = { + return userManager.getUserGraphNode(userName) + } + }) + val webIdGraphs = webIdGraphsService.getWebIdInfo(me.getNode.asInstanceOf[UriRef]) + var meGrph: GraphNode = new GraphNode(me.getNode, webIdGraphs.localPublicUserData) + meGrph.deleteProperty(FOAF.knows, contactWebId) + return RedirectUtil.createSeeOtherResponse("../profile", uriInfo) + } + + /** + * @parm webId: A list of WebIDs to be added as Subject Alternative Names + * @param cn Common Name, the name that usually appears in the certificate selection box + * @param spkac key request in format generated by Netscape, Safari, Opera + * @param crmf hey request in format generated by M$ Explorer + * @param csr key request as generated by Javascript of Netscape + * @param hours the certificate should last (hours and days add up) + * @param days the certificate should last + * @param comment a comment to be attached to the public key in the database + */ + @POST + @Path("keygen") + def createCert(@FormParam("webId") webIds: java.util.List[URI], + @FormParam("cn") commonName: String, + @FormParam("spkac") spkac: String, + @FormParam("crmf") crmf: String, + @FormParam("csr") csr: String, + @FormParam("hours") hours: String, + @FormParam("days") days: String, + @FormParam("comment") comment: String): Response = { + import scala.collection.JavaConversions._ + var cert: Certificate = null + if (spkac != null && spkac.length > 0) { + cert = keygenSrvc.createFromSpkac(spkac) + if (cert == null) { + logger.warn("unable to create certificate from spkac request") + } + } + if (cert == null && crmf != null && crmf.length > 0) { + cert = keygenSrvc.createFromCRMF(crmf) + if (cert == null) { + logger.warn("unable to create certificate from crmf requrest :" + crmf) + } + } + if (cert == null && csr != null && csr.length > 0) { + cert = keygenSrvc.createFromPEM(csr) + if (cert == null) { + logger.warn("unable to create certificate from csr request :" + csr) + } + } + if (cert == null) { + throw new RuntimeException("The server was unable to create a certificate") + } + cert.setSubjectCommonName(commonName) + cert.addDurationInHours(hours) + cert.addDurationInDays(days) + cert.startEarlier("2") + for(san: URI<-webIds) { + cert.addSubjectAlternativeName(san.toString) + } + var ser: CertSerialisation = null + try { + ser = cert.getSerialisation + } + catch { + case ex: Exception => { + throw new RuntimeException(ex) + } + } + var pubKey: RSAPublicKey = cert.getSubjectPublicKey.getPublicKey.asInstanceOf[RSAPublicKey] + var publicExponent: BigInteger = pubKey.getPublicExponent + var modulus: BigInteger = pubKey.getModulus + + for (webid: URI<-webIds + if (webid.getScheme=="https"||webid.getScheme=="http"); + val webidRef = new UriRef(webid.toString); + val webIdInfo = webIdGraphsService.getWebIdInfo(webidRef); + if (webIdInfo.isLocal) + ) { + val certGraph = new EzMGraph(webIdInfo.localPublicUserData) + import certGraph._ + val certNode = certGraph.bnode + ( (certNode a RSA.RSAPublicKey) + -- CERT.identity --> webidRef + -- RSA.modulus --> modulus + -- RSA.public_exponent --> publicExponent + -- DC.date --> cert.getStartDate ) + if (comment != null && comment.length > 0) { + certNode -- RDFS.comment --> comment + } + } + var resBuild: Response.ResponseBuilder = Response.ok(ser.getContent, MediaType.valueOf(ser.getMimeType)) + return resBuild.build + } + + @POST + @Path("deletekey") + def deleteKey(@Context uriInfo: UriInfo, + @FormParam("webId") webId: UriRef, + @FormParam("keyhash") keys: List[String]): Response = { + val webIDInfo = webIdGraphsService.getWebIdInfo(webId) + val agent: GraphNode = new GraphNode(webId, webIDInfo.localPublicUserData) + var subjects: Iterator[GraphNode] = agent.getSubjectNodes(CERT.identity) + import scala.util.control.Breaks._ + breakable { + import scala.collection.JavaConversions._ + //to for loop through iterators + for (nl <- subjects) { + var modulusIt: Iterator[Resource] = nl.getObjects(RSA.modulus) + if (!modulusIt.hasNext) break + var modLit: Resource = modulusIt.next + if (modulusIt.hasNext) logger.warn("data error, a modulus too many in cert for " + webId) + if (!(modLit.isInstanceOf[TypedLiteral])) { + logger.warn("a public key has a modulus that is not a literal for " + webId) + break + } + var modulus: BigInteger = LiteralFactory.getInstance.createObject(classOf[BigInteger], modLit.asInstanceOf[TypedLiteral]) + for (key <- keys) { + if (modulus.hashCode == Integer.decode(key)) { + nl.deleteNodeContext + break + } + } + } + } + return RedirectUtil.createSeeOtherResponse("../profile", uriInfo) + } + + @POST + @Path("modify") + def modifyProfile(@Context uriInfo: UriInfo, + @PathParam("id") userName: String, + @FormParam("webId") webId: UriRef, + @FormParam("name") name: String, + @FormParam("description") description: String): Response = { + val webIDInfo = AccessController.doPrivileged(new PrivilegedAction[WebIdInfo] { + def run = { + webIdGraphsService.getWebIdInfo(webId) + } + }) + val agent: GraphNode = new GraphNode(webId, webIDInfo.localPublicUserData) + agent.deleteProperties(FOAF.name) + agent.addPropertyValue(FOAF.name, name) + agent.deleteProperties(DC.description) + agent.addPropertyValue(DC.description, description) + logger.debug("local graph (uri: {}) is now of size {}".format(webIDInfo.webId, webIDInfo.localPublicUserData.size)) + RedirectUtil.createSeeOtherResponse("../profile", uriInfo) + } + + protected def bindUserManager(usermanager: UserManager): Unit = { + userManager = usermanager + } + + protected def unbindUserManager(usermanager: UserManager): Unit = { + if (userManager == usermanager) { + userManager = null + } + } + + protected def bindGraphNodeProvider(graphNodeProvider: GraphNodeProvider): Unit = { + this.graphNodeProvider = graphNodeProvider + } + + protected def unbindGraphNodeProvider(graphNodeProvider: GraphNodeProvider): Unit = { + this.graphNodeProvider = null + } + + protected def bindKeygenSrvc(keygenservice: KeygenService): Unit = { + keygenSrvc = keygenservice + } + + protected def unbindKeygenSrvc(keygenservice: KeygenService): Unit = { + if (keygenSrvc == keygenservice) { + keygenSrvc = null + } + } + + + protected def bindWebIdGraphsService(webidgraphsservice: WebIdGraphsService): Unit = { + webIdGraphsService = webidgraphsservice + } + + protected def unbindWebIdGraphsService(webidgraphsservice: WebIdGraphsService): Unit = { + webIdGraphsService = null + } + + protected def bindPlatformConfig(platformconfig: PlatformConfig): Unit = { + platformConfig = platformconfig + } + + protected def unbindPlatformConfig(platformconfig: PlatformConfig): Unit = { + if (platformConfig == platformconfig) { + platformConfig = null + } + } + + protected def bindTcManager(tcManager: TcManager) = { + this.tcManager = tcManager + } + + protected def unbindTcManager(tcManager: TcManager) = { + this.tcManager = null + } + + protected def activate(componentContext: ComponentContext): Unit = { + this.componentContext = componentContext + } + + + private var userManager: UserManager = null + + private var graphNodeProvider: GraphNodeProvider = null + + private var webIdGraphsService: WebIdGraphsService = null + + private var keygenSrvc: KeygenService = null + private var platformConfig: PlatformConfig = null + + + private var componentContext: ComponentContext = null + + private var tcManager: TcManager = null; } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/clerezza/blob/35448624/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/SettingsPanel.scala ---------------------------------------------------------------------- diff --git a/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/SettingsPanel.scala b/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/SettingsPanel.scala index d7631a1..3d8d929 100644 --- a/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/SettingsPanel.scala +++ b/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/SettingsPanel.scala @@ -92,7 +92,7 @@ import org.apache.clerezza.rdf.utils.GraphNode import org.apache.clerezza.rdf.utils.UnionMGraph object SettingPanel { - val logger: Logger = LoggerFactory.getLogger(classOf[SettingsPanel]) + val logger: Logger = LoggerFactory.getLogger(classOf[SettingsPanel]) } /** @@ -104,543 +104,543 @@ object SettingPanel { @Path("/user/{id}/control-panel") class SettingsPanel { - import SettingPanel.logger + import SettingPanel.logger - /** - * Mainpage - * - * @param id is the username as given in the URL - * @return an array of installed {@link Bundle}s to be managed - * - */ - @GET - def settingsPage(@PathParam(value = "id") idP: String, - @QueryParam("changedPassword") changedPassword: String, - @Context uriInfo: UriInfo): GraphNode = { - TrailingSlash.enforceNotPresent(uriInfo) - val id: String = idP - var graphNode: GraphNode = null - AccessController.checkPermission(new AccountControlPanelAppPermission(id, "")) - try { - AccessController.checkPermission(new UserBundlePermission(id, "")) - graphNode = AccessController.doPrivileged(new PrivilegedAction[GraphNode] { - def run: GraphNode = { - var bundles: Array[Bundle] = userBundles(getAgent(id)) - return asGraphNode(id, bundles) - } - }) - } - catch { - case e: AccessControlException => { - graphNode = new GraphNode(new BNode, new SimpleMGraph) - graphNode.addProperty(CONTROLPANEL.userBundlePermission, LiteralFactory.getInstance.createTypedLiteral(false)) - } - } - try { - AccessController.checkPermission(new ChangePasswordPermission(id, "")) - graphNode.addProperty(CONTROLPANEL.changePasswordPermission, LiteralFactory.getInstance.createTypedLiteral(true)) - } - catch { - case e: AccessControlException => { - graphNode.addProperty(CONTROLPANEL.changePasswordPermission, LiteralFactory.getInstance.createTypedLiteral(false)) - } - } - if (changedPassword != null && changedPassword.equals("false")) { - graphNode.addProperty(CONTROLPANEL.changedPassword, new PlainLiteralImpl("false")) - } - graphNode.addProperty(RDF.`type`, CONTROLPANEL.SettingsPage) - graphNode.addProperty(RDF.`type`, PLATFORM.HeadedPage) - return graphNode - } + /** + * Mainpage + * + * @param id is the username as given in the URL + * @return an array of installed {@link Bundle}s to be managed + * + */ + @GET + def settingsPage(@PathParam(value = "id") idP: String, + @QueryParam("changedPassword") changedPassword: String, + @Context uriInfo: UriInfo): GraphNode = { + TrailingSlash.enforceNotPresent(uriInfo) + val id: String = idP + var graphNode: GraphNode = null + AccessController.checkPermission(new AccountControlPanelAppPermission(id, "")) + try { + AccessController.checkPermission(new UserBundlePermission(id, "")) + graphNode = AccessController.doPrivileged(new PrivilegedAction[GraphNode] { + def run: GraphNode = { + var bundles: Array[Bundle] = userBundles(getAgent(id)) + return asGraphNode(id, bundles) + } + }) + } + catch { + case e: AccessControlException => { + graphNode = new GraphNode(new BNode, new SimpleMGraph) + graphNode.addProperty(CONTROLPANEL.userBundlePermission, LiteralFactory.getInstance.createTypedLiteral(false)) + } + } + try { + AccessController.checkPermission(new ChangePasswordPermission(id, "")) + graphNode.addProperty(CONTROLPANEL.changePasswordPermission, LiteralFactory.getInstance.createTypedLiteral(true)) + } + catch { + case e: AccessControlException => { + graphNode.addProperty(CONTROLPANEL.changePasswordPermission, LiteralFactory.getInstance.createTypedLiteral(false)) + } + } + if (changedPassword != null && changedPassword.equals("false")) { + graphNode.addProperty(CONTROLPANEL.changedPassword, new PlainLiteralImpl("false")) + } + graphNode.addProperty(RDF.`type`, CONTROLPANEL.SettingsPage) + graphNode.addProperty(RDF.`type`, PLATFORM.HeadedPage) + return graphNode + } - private def addBundleDescriptionToGraph(responseGraph: MGraph, bundle: Bundle): Unit = { - var status: TypedLiteral = LiteralFactory.getInstance.createTypedLiteral(bundle.getState) - var bundleUri: UriRef = new UriRef(bundle.getLocation) - var triple: Triple = new TripleImpl(bundleUri, OSGI.status, status) - responseGraph.add(triple) - var bundleId: TypedLiteral = LiteralFactory.getInstance.createTypedLiteral(bundle.getBundleId) - triple = new TripleImpl(bundleUri, OSGI.bundle_id, bundleId) - responseGraph.add(triple) - } + private def addBundleDescriptionToGraph(responseGraph: MGraph, bundle: Bundle): Unit = { + var status: TypedLiteral = LiteralFactory.getInstance.createTypedLiteral(bundle.getState) + var bundleUri: UriRef = new UriRef(bundle.getLocation) + var triple: Triple = new TripleImpl(bundleUri, OSGI.status, status) + responseGraph.add(triple) + var bundleId: TypedLiteral = LiteralFactory.getInstance.createTypedLiteral(bundle.getBundleId) + triple = new TripleImpl(bundleUri, OSGI.bundle_id, bundleId) + responseGraph.add(triple) + } - private def asGraphNode(userId: String, bundles: Array[Bundle]): GraphNode = { - val responseGraph: MGraph = new SimpleMGraph - for (bundle <- bundles) { - addBundleDescriptionToGraph(responseGraph, bundle) - } - return AccessController.doPrivileged(new PrivilegedAction[GraphNode] { - def run: GraphNode = { - var userDescriptionGraph: Graph = new GraphNode(getAgent(userId), systemGraph).getNodeContext - var unionGraph: UnionMGraph = new UnionMGraph(responseGraph, userDescriptionGraph) - var graphNode: GraphNode = new GraphNode(getAgent(userId), unionGraph) - graphNode.addProperty(CONTROLPANEL.userBundlePermission, LiteralFactory.getInstance.createTypedLiteral(true)) - return graphNode - } - }) - } + private def asGraphNode(userId: String, bundles: Array[Bundle]): GraphNode = { + val responseGraph: MGraph = new SimpleMGraph + for (bundle <- bundles) { + addBundleDescriptionToGraph(responseGraph, bundle) + } + return AccessController.doPrivileged(new PrivilegedAction[GraphNode] { + def run: GraphNode = { + var userDescriptionGraph: Graph = new GraphNode(getAgent(userId), systemGraph).getNodeContext + var unionGraph: UnionMGraph = new UnionMGraph(responseGraph, userDescriptionGraph) + var graphNode: GraphNode = new GraphNode(getAgent(userId), unionGraph) + graphNode.addProperty(CONTROLPANEL.userBundlePermission, LiteralFactory.getInstance.createTypedLiteral(true)) + return graphNode + } + }) + } - /** - * Retrieves all bundles owned by a user represented by agent - * - * @param agent represents the user who owns bundles to be returned - * @return an array of {@link Bundle}s owned by the user - * - */ - private def userBundles(agent: NonLiteral): Array[Bundle] = { - logger.debug("Retrieve all bundles from user: {}", agent) - var installedBundles: Array[Bundle] = componentContext.getBundleContext.getBundles - val locationMapper: Map[String, Long] = new HashMap[String, Long] - for (b <- installedBundles) { - locationMapper.put(b.getLocation, b.getBundleId) - } - return AccessController.doPrivileged(new PrivilegedAction[Array[Bundle]] { - def run: Array[Bundle] = { - var bundles: Set[Bundle] = new HashSet[Bundle] - var agentBundles: Iterator[Triple] = systemGraph.filter(null, OSGI.owner, agent) - while (agentBundles.hasNext) { - val location: String = (agentBundles.next.getSubject.asInstanceOf[UriRef]).getUnicodeString - try { - val id: Long = locationMapper.get(location) - bundles.add(componentContext.getBundleContext.getBundle(id)) - } catch { - case _:NumberFormatException => None - } - } - return bundles.toArray(new Array[Bundle](bundles.size)) - } - }) - } + /** + * Retrieves all bundles owned by a user represented by agent + * + * @param agent represents the user who owns bundles to be returned + * @return an array of {@link Bundle}s owned by the user + * + */ + private def userBundles(agent: NonLiteral): Array[Bundle] = { + logger.debug("Retrieve all bundles from user: {}", agent) + var installedBundles: Array[Bundle] = componentContext.getBundleContext.getBundles + val locationMapper: Map[String, Long] = new HashMap[String, Long] + for (b <- installedBundles) { + locationMapper.put(b.getLocation, b.getBundleId) + } + return AccessController.doPrivileged(new PrivilegedAction[Array[Bundle]] { + def run: Array[Bundle] = { + var bundles: Set[Bundle] = new HashSet[Bundle] + var agentBundles: Iterator[Triple] = systemGraph.filter(null, OSGI.owner, agent) + while (agentBundles.hasNext) { + val location: String = (agentBundles.next.getSubject.asInstanceOf[UriRef]).getUnicodeString + try { + val id: Long = locationMapper.get(location) + bundles.add(componentContext.getBundleContext.getBundle(id)) + } catch { + case _:NumberFormatException => None + } + } + return bundles.toArray(new Array[Bundle](bundles.size)) + } + }) + } - private def getAgent(id: String): NonLiteral = { - logger.debug("Get agent with id {}", id) - var agents: Iterator[Triple] = systemGraph.filter(null, PLATFORM.userName, new PlainLiteralImpl(id)) - if (agents.hasNext) { - return agents.next.getSubject - } - else { - logger.debug("System graph does not contain user: {}", id) - var responseBuilder: Response.ResponseBuilder = Response.ok("User does not exist") - throw new WebApplicationException(responseBuilder.build) - } - } + private def getAgent(id: String): NonLiteral = { + logger.debug("Get agent with id {}", id) + var agents: Iterator[Triple] = systemGraph.filter(null, PLATFORM.userName, new PlainLiteralImpl(id)) + if (agents.hasNext) { + return agents.next.getSubject + } + else { + logger.debug("System graph does not contain user: {}", id) + var responseBuilder: Response.ResponseBuilder = Response.ok("User does not exist") + throw new WebApplicationException(responseBuilder.build) + } + } - private def getAgentPathPrefix(agent: NonLiteral): PlainLiteralImpl = { - return AccessController.doPrivileged(new PrivilegedAction[PlainLiteralImpl] { - def run: PlainLiteralImpl = { - var pathPrefixes: Iterator[Triple] = systemGraph.filter(agent, OSGI.agent_path_prefix, null) - if (pathPrefixes.hasNext) { - return pathPrefixes.next.getObject.asInstanceOf[PlainLiteralImpl] - } - return null - } - }) - } + private def getAgentPathPrefix(agent: NonLiteral): PlainLiteralImpl = { + return AccessController.doPrivileged(new PrivilegedAction[PlainLiteralImpl] { + def run: PlainLiteralImpl = { + var pathPrefixes: Iterator[Triple] = systemGraph.filter(agent, OSGI.agent_path_prefix, null) + if (pathPrefixes.hasNext) { + return pathPrefixes.next.getObject.asInstanceOf[PlainLiteralImpl] + } + return null + } + }) + } - /** - * Installs a bundle from the specified location. - * - * @param id is the username as given in the URL - * @param location specifies the URL of the bundle to be installed - * @return an array of installed {@link Bundle}s to be managed - * - */ - @POST - @Path("install-bundle") - @Consumes def installBundle(@PathParam(value = "id") id: String, multiForm: MultiPartBody, @Context uriInfo: UriInfo): Response = { - AccessController.checkPermission(new AccountControlPanelAppPermission(id, "")) - AccessController.checkPermission(new UserBundlePermission(id, "")) - var formFiles: Array[FormFile] = multiForm.getFormFileParameterValues("bundle") - var filename: String = formFiles(0).getFileName - var bundleBytes: Array[Byte] = formFiles(0).getContent - if (bundleBytes.length == 0) { - var message: String = null - if (filename.equals("")) { - message = "No bundle specified" - } - else { - message = "Bundle has length 0" - } - var responseBuilder: Response.ResponseBuilder = Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message) - throw new WebApplicationException(responseBuilder.build) - } - val bundleInputStream: InputStream = new ByteArrayInputStream(bundleBytes) - val location: String = "userbundle:" + id + "/" + filename - logger.info("Install bundle {} to location {}", id, location) - AccessController.doPrivileged(new PrivilegedAction[AnyRef] { - def run: Array[Bundle] = { - val agent: NonLiteral = getAgent(id) - val triple: Triple = new TripleImpl(new UriRef(location), OSGI.owner, agent) - try { - systemGraph.add(triple) - var bundle: Bundle = componentContext.getBundleContext.installBundle(location, bundleInputStream) - var prefix: PlainLiteralImpl = getAgentPathPrefix(agent) - if (prefix != null) { - addBundlePrefix(bundle, prefix.getLexicalForm) - } - return null - } - catch { - case ex: BundleException => { - systemGraph.remove(triple) - logger.debug("Failed to install a bundle from: {}", location) - logger.error("Exception during install bundle: {}", ex) - var responseBuilder: Response.ResponseBuilder = Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(ex.getMessage) - throw new WebApplicationException(responseBuilder.build) - } - } - } - }) - return RedirectUtil.createSeeOtherResponse("../control-panel", uriInfo) - } + /** + * Installs a bundle from the specified location. + * + * @param id is the username as given in the URL + * @param location specifies the URL of the bundle to be installed + * @return an array of installed {@link Bundle}s to be managed + * + */ + @POST + @Path("install-bundle") + @Consumes def installBundle(@PathParam(value = "id") id: String, multiForm: MultiPartBody, @Context uriInfo: UriInfo): Response = { + AccessController.checkPermission(new AccountControlPanelAppPermission(id, "")) + AccessController.checkPermission(new UserBundlePermission(id, "")) + var formFiles: Array[FormFile] = multiForm.getFormFileParameterValues("bundle") + var filename: String = formFiles(0).getFileName + var bundleBytes: Array[Byte] = formFiles(0).getContent + if (bundleBytes.length == 0) { + var message: String = null + if (filename.equals("")) { + message = "No bundle specified" + } + else { + message = "Bundle has length 0" + } + var responseBuilder: Response.ResponseBuilder = Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message) + throw new WebApplicationException(responseBuilder.build) + } + val bundleInputStream: InputStream = new ByteArrayInputStream(bundleBytes) + val location: String = "userbundle:" + id + "/" + filename + logger.info("Install bundle {} to location {}", id, location) + AccessController.doPrivileged(new PrivilegedAction[AnyRef] { + def run: Array[Bundle] = { + val agent: NonLiteral = getAgent(id) + val triple: Triple = new TripleImpl(new UriRef(location), OSGI.owner, agent) + try { + systemGraph.add(triple) + var bundle: Bundle = componentContext.getBundleContext.installBundle(location, bundleInputStream) + var prefix: PlainLiteralImpl = getAgentPathPrefix(agent) + if (prefix != null) { + addBundlePrefix(bundle, prefix.getLexicalForm) + } + return null + } + catch { + case ex: BundleException => { + systemGraph.remove(triple) + logger.debug("Failed to install a bundle from: {}", location) + logger.error("Exception during install bundle: {}", ex) + var responseBuilder: Response.ResponseBuilder = Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(ex.getMessage) + throw new WebApplicationException(responseBuilder.build) + } + } + } + }) + return RedirectUtil.createSeeOtherResponse("../control-panel", uriInfo) + } - private def addBundlePrefix(bundle: Bundle, prefix: String): Unit = { - var symbolicName: String = bundle.getSymbolicName - /*if (configAdmin != null) { - try { - var configuration: Configuration = configAdmin.getConfiguration(classOf[TriaxrsPrefixManager].getName) - val properties = configuration.getProperties match { - case null => new Hashtable[String, AnyRef]() - case dict: Dictionary[String, AnyRef] => dict - } - var mappings = TriaxrsPrefixManager.parseMappings(properties.get(TriaxrsPrefixManager.TRIAXRS_MAPPINGS).asInstanceOf[Array[String]]) - logger.debug("Prefix {} added to bundle {}", prefix, symbolicName) - mappings.put(symbolicName, prefix) - var newMappings: Array[String] = TriaxrsPrefixManager.unparseMappings(mappings) - properties.put(TriaxrsPrefixManager.TRIAXRS_MAPPINGS, newMappings) - configuration.update(properties) - } - catch { - case e: IOException => { - logger.warn("Unable to update configuration: {}", e.toString) - } - } - } - else { - logger.warn("Cannot add prefix mapping. Configuration Admin is missing") - }*/ - } + private def addBundlePrefix(bundle: Bundle, prefix: String): Unit = { + var symbolicName: String = bundle.getSymbolicName + /*if (configAdmin != null) { + try { + var configuration: Configuration = configAdmin.getConfiguration(classOf[TriaxrsPrefixManager].getName) + val properties = configuration.getProperties match { + case null => new Hashtable[String, AnyRef]() + case dict: Dictionary[String, AnyRef] => dict + } + var mappings = TriaxrsPrefixManager.parseMappings(properties.get(TriaxrsPrefixManager.TRIAXRS_MAPPINGS).asInstanceOf[Array[String]]) + logger.debug("Prefix {} added to bundle {}", prefix, symbolicName) + mappings.put(symbolicName, prefix) + var newMappings: Array[String] = TriaxrsPrefixManager.unparseMappings(mappings) + properties.put(TriaxrsPrefixManager.TRIAXRS_MAPPINGS, newMappings) + configuration.update(properties) + } + catch { + case e: IOException => { + logger.warn("Unable to update configuration: {}", e.toString) + } + } + } + else { + logger.warn("Cannot add prefix mapping. Configuration Admin is missing") + }*/ + } - private[accountcontrolpanel] def removeBundlePrefix(bundle: Bundle): Unit = { - var symbolicName: String = bundle.getSymbolicName - /*if ((this.configAdmin != null) && (symbolicName != null)) { - try { - val configuration: Configuration = configAdmin.getConfiguration(classOf[TriaxrsPrefixManager].getName) - val properties = configuration.getProperties match { - case null => new Hashtable[String, AnyRef]() - case dict: Dictionary[String, AnyRef] => dict - } - val mappings = TriaxrsPrefixManager.parseMappings(properties.get(TriaxrsPrefixManager.TRIAXRS_MAPPINGS).asInstanceOf[Array[String]]) - mappings.remove(symbolicName) - val newMappings: Array[String] = TriaxrsPrefixManager.unparseMappings(mappings) - properties.put(TriaxrsPrefixManager.TRIAXRS_MAPPINGS, newMappings) - configuration.update(properties) - } - catch { - case e: IOException => { - logger.warn("Unable to update configuration: {}", e.toString) - } - } - } - else { - logger.warn("Cannot add prefix mapping. Configuration Admin is missing") - }*/ - } + private[accountcontrolpanel] def removeBundlePrefix(bundle: Bundle): Unit = { + var symbolicName: String = bundle.getSymbolicName + /*if ((this.configAdmin != null) && (symbolicName != null)) { + try { + val configuration: Configuration = configAdmin.getConfiguration(classOf[TriaxrsPrefixManager].getName) + val properties = configuration.getProperties match { + case null => new Hashtable[String, AnyRef]() + case dict: Dictionary[String, AnyRef] => dict + } + val mappings = TriaxrsPrefixManager.parseMappings(properties.get(TriaxrsPrefixManager.TRIAXRS_MAPPINGS).asInstanceOf[Array[String]]) + mappings.remove(symbolicName) + val newMappings: Array[String] = TriaxrsPrefixManager.unparseMappings(mappings) + properties.put(TriaxrsPrefixManager.TRIAXRS_MAPPINGS, newMappings) + configuration.update(properties) + } + catch { + case e: IOException => { + logger.warn("Unable to update configuration: {}", e.toString) + } + } + } + else { + logger.warn("Cannot add prefix mapping. Configuration Admin is missing") + }*/ + } - /** - * Starts the bundle with the specified bundle id. - * - * @param id is the username as given in the URL - * @param bundleIdString specifies the id of the bundle to be started - * @return an array of installed {@link Bundle}s to be managed - * - */ - @POST - @Path("start-bundle") - def startBundle(@PathParam(value = "id") idP: String, - @FormParam("bundleId") bundleIdStringP: String, - @Context uriInfo: UriInfo): Response = { - val id: String = idP - val bundleIdString: String = bundleIdStringP - AccessController.checkPermission(new AccountControlPanelAppPermission(id, "")) - AccessController.checkPermission(new UserBundlePermission(id, "")) - logger.info("Start bundle {} ", id) - val bundleId: Long = bundleIdString.toLong - AccessController.doPrivileged(new PrivilegedAction[AnyRef] { - def run: Array[Bundle] = { - try { - val bundle: Bundle = componentContext.getBundleContext.getBundle(bundleId) - bundle.start - } - catch { - case e: BundleException => { - logger.debug("Failed to start bundle {}", bundleIdString) - logger.error("Exception during start bundle: {}", e) - var responseBuilder: Response.ResponseBuilder = Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage) - throw new WebApplicationException(responseBuilder.build) - } - } - return null - } - }) - return RedirectUtil.createSeeOtherResponse("../control-panel", uriInfo) - } + /** + * Starts the bundle with the specified bundle id. + * + * @param id is the username as given in the URL + * @param bundleIdString specifies the id of the bundle to be started + * @return an array of installed {@link Bundle}s to be managed + * + */ + @POST + @Path("start-bundle") + def startBundle(@PathParam(value = "id") idP: String, + @FormParam("bundleId") bundleIdStringP: String, + @Context uriInfo: UriInfo): Response = { + val id: String = idP + val bundleIdString: String = bundleIdStringP + AccessController.checkPermission(new AccountControlPanelAppPermission(id, "")) + AccessController.checkPermission(new UserBundlePermission(id, "")) + logger.info("Start bundle {} ", id) + val bundleId: Long = bundleIdString.toLong + AccessController.doPrivileged(new PrivilegedAction[AnyRef] { + def run: Array[Bundle] = { + try { + val bundle: Bundle = componentContext.getBundleContext.getBundle(bundleId) + bundle.start + } + catch { + case e: BundleException => { + logger.debug("Failed to start bundle {}", bundleIdString) + logger.error("Exception during start bundle: {}", e) + var responseBuilder: Response.ResponseBuilder = Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage) + throw new WebApplicationException(responseBuilder.build) + } + } + return null + } + }) + return RedirectUtil.createSeeOtherResponse("../control-panel", uriInfo) + } - /** - * Stops the bundle with the specified bundle id. - * - * @param id is the username as given in the URL - * @param bundleIdString specifies the id of the bundle to be stopped - * @return an array of installed {@link Bundle}s to be managed - * - */ - @POST - @Path("stop-bundle") def stopBundle(@PathParam(value = "id") idP: String, - @FormParam("bundleId") bundleIdStringP: String, - @Context uriInfo: UriInfo): Response = { - val id: String = idP - val bundleIdString: String = bundleIdStringP - AccessController.checkPermission(new AccountControlPanelAppPermission(id, "")) - AccessController.checkPermission(new UserBundlePermission(id, "")) - logger.info("Stop bundle {}", id) - val bundleId: Long = bundleIdString.toLong - AccessController.doPrivileged(new PrivilegedAction[AnyRef] { - def run: Array[Bundle] = { - try { - var bundle: Bundle = componentContext.getBundleContext.getBundle(bundleId) - bundle.stop - } - catch { - case e: BundleException => { - logger.debug("Failed to stop bundle ", bundleIdString) - logger.error("Exception during stop bundle: {}", e) - var responseBuilder: Response.ResponseBuilder = Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage) - throw new WebApplicationException(responseBuilder.build) - } - } - return null - } - }) - return RedirectUtil.createSeeOtherResponse("../control-panel", uriInfo) - } + /** + * Stops the bundle with the specified bundle id. + * + * @param id is the username as given in the URL + * @param bundleIdString specifies the id of the bundle to be stopped + * @return an array of installed {@link Bundle}s to be managed + * + */ + @POST + @Path("stop-bundle") def stopBundle(@PathParam(value = "id") idP: String, + @FormParam("bundleId") bundleIdStringP: String, + @Context uriInfo: UriInfo): Response = { + val id: String = idP + val bundleIdString: String = bundleIdStringP + AccessController.checkPermission(new AccountControlPanelAppPermission(id, "")) + AccessController.checkPermission(new UserBundlePermission(id, "")) + logger.info("Stop bundle {}", id) + val bundleId: Long = bundleIdString.toLong + AccessController.doPrivileged(new PrivilegedAction[AnyRef] { + def run: Array[Bundle] = { + try { + var bundle: Bundle = componentContext.getBundleContext.getBundle(bundleId) + bundle.stop + } + catch { + case e: BundleException => { + logger.debug("Failed to stop bundle ", bundleIdString) + logger.error("Exception during stop bundle: {}", e) + var responseBuilder: Response.ResponseBuilder = Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage) + throw new WebApplicationException(responseBuilder.build) + } + } + return null + } + }) + return RedirectUtil.createSeeOtherResponse("../control-panel", uriInfo) + } - /** - * Uninstalls the bundle with the specified bundle id. - * - * @param id is the username as given in the URL - * @param bundleIdString specifies the id of the bundle to be uninstalled - * @return an array of installed {@link Bundle}s to be managed - * - */ - @POST - @Path("uninstall-bundle") - def uninstallBundle(@PathParam(value = "id") idP: String, - @FormParam("bundleId") bundleIdStringP: String, - @Context uriInfo: UriInfo): Response = { - val id: String = idP - val bundleIdString: String = bundleIdStringP - AccessController.checkPermission(new AccountControlPanelAppPermission(id, "")) - AccessController.checkPermission(new UserBundlePermission(id, "")) - logger.info("Uninstall bundle {}", id) - val bundleId: Long = bundleIdString.toLong - AccessController.doPrivileged(new PrivilegedAction[AnyRef] { - def run: Array[Bundle] = { - val agent: NonLiteral = getAgent(id) - try { - var bundle: Bundle = componentContext.getBundleContext.getBundle(bundleId) - bundle.uninstall - val triple: Triple = new TripleImpl(new UriRef(bundle.getLocation), OSGI.owner, agent) - systemGraph.remove(triple) - removeBundlePrefix(bundle) - } - catch { - case e: BundleException => { - logger.debug("Failed to uninstall bundle {}", bundleIdString) - logger.error("Exception during uninstall bundle: {}", e) - var responseBuilder: Response.ResponseBuilder = Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage) - throw new WebApplicationException(responseBuilder.build) - } - } - return null - } - }) - return RedirectUtil.createSeeOtherResponse("../control-panel", uriInfo) - } + /** + * Uninstalls the bundle with the specified bundle id. + * + * @param id is the username as given in the URL + * @param bundleIdString specifies the id of the bundle to be uninstalled + * @return an array of installed {@link Bundle}s to be managed + * + */ + @POST + @Path("uninstall-bundle") + def uninstallBundle(@PathParam(value = "id") idP: String, + @FormParam("bundleId") bundleIdStringP: String, + @Context uriInfo: UriInfo): Response = { + val id: String = idP + val bundleIdString: String = bundleIdStringP + AccessController.checkPermission(new AccountControlPanelAppPermission(id, "")) + AccessController.checkPermission(new UserBundlePermission(id, "")) + logger.info("Uninstall bundle {}", id) + val bundleId: Long = bundleIdString.toLong + AccessController.doPrivileged(new PrivilegedAction[AnyRef] { + def run: Array[Bundle] = { + val agent: NonLiteral = getAgent(id) + try { + var bundle: Bundle = componentContext.getBundleContext.getBundle(bundleId) + bundle.uninstall + val triple: Triple = new TripleImpl(new UriRef(bundle.getLocation), OSGI.owner, agent) + systemGraph.remove(triple) + removeBundlePrefix(bundle) + } + catch { + case e: BundleException => { + logger.debug("Failed to uninstall bundle {}", bundleIdString) + logger.error("Exception during uninstall bundle: {}", e) + var responseBuilder: Response.ResponseBuilder = Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage) + throw new WebApplicationException(responseBuilder.build) + } + } + return null + } + }) + return RedirectUtil.createSeeOtherResponse("../control-panel", uriInfo) + } - /** - * changes the password of an user - * - * @param idP id is the username as given in the URL - * @param lang represents the user's new standard language. - * @return - */ - @POST - @Path("change-language") - def changeUserLanguage(@PathParam(value = "id") idP: String, - @FormParam("availablelanguages") lang: String, - @Context uriInfo: UriInfo): Response = { - val id: String = idP - AccessController.checkPermission(new AccountControlPanelAppPermission(id, "")) - AccessController.doPrivileged(new PrivilegedAction[AnyRef] { - def run: AnyRef = { - var userNode: GraphNode = new GraphNode(getAgent(id), systemGraph) - userNode.deleteProperties(PLATFORM.preferredLangInISOCode) - userNode.addProperty(PLATFORM.preferredLangInISOCode, LiteralFactory.getInstance.createTypedLiteral(lang)) - return null - } - }) - return RedirectUtil.createSeeOtherResponse("../control-panel", uriInfo) - } + /** + * changes the password of an user + * + * @param idP id is the username as given in the URL + * @param lang represents the user's new standard language. + * @return + */ + @POST + @Path("change-language") + def changeUserLanguage(@PathParam(value = "id") idP: String, + @FormParam("availablelanguages") lang: String, + @Context uriInfo: UriInfo): Response = { + val id: String = idP + AccessController.checkPermission(new AccountControlPanelAppPermission(id, "")) + AccessController.doPrivileged(new PrivilegedAction[AnyRef] { + def run: AnyRef = { + var userNode: GraphNode = new GraphNode(getAgent(id), systemGraph) + userNode.deleteProperties(PLATFORM.preferredLangInISOCode) + userNode.addProperty(PLATFORM.preferredLangInISOCode, LiteralFactory.getInstance.createTypedLiteral(lang)) + return null + } + }) + return RedirectUtil.createSeeOtherResponse("../control-panel", uriInfo) + } - /** - * changes the password of an user - * - * @param idP id is the username as given in the URL - * @param oldPW the current user password - * @param newPW the new password - * @param confirmNewPW the new password - * @return - */ - @POST - @Path("change-password") - def changePassword(@PathParam(value = "id") idP: String, - @FormParam("oldPW") oldPW: String, - @FormParam("newPW") newPW: String, - @FormParam("confirmNewPW") confirmNewPW: String, - @Context uriInfo: UriInfo): Response = { - val id: String = idP - AccessController.checkPermission(new AccountControlPanelAppPermission(id, "")) - AccessController.checkPermission(new ChangePasswordPermission(id, "")) - var changedPassword: Boolean = false - if (newPW.trim.equals(confirmNewPW.trim) && checkPWStrings(oldPW, newPW)) { - changedPassword = AccessController.doPrivileged(new PrivilegedAction[Boolean] { - private def getCurrentPassword(agent: NonLiteral): String = { - var currentPassword: String = null - var oldPWTriple: Iterator[Triple] = systemGraph.filter(agent, PERMISSION.passwordSha1, null) - if (oldPWTriple.hasNext) { - var currentPWLiteral: Literal = oldPWTriple.next.getObject.asInstanceOf[Literal] - currentPassword = currentPWLiteral.getLexicalForm - } - return currentPassword - } + /** + * changes the password of an user + * + * @param idP id is the username as given in the URL + * @param oldPW the current user password + * @param newPW the new password + * @param confirmNewPW the new password + * @return + */ + @POST + @Path("change-password") + def changePassword(@PathParam(value = "id") idP: String, + @FormParam("oldPW") oldPW: String, + @FormParam("newPW") newPW: String, + @FormParam("confirmNewPW") confirmNewPW: String, + @Context uriInfo: UriInfo): Response = { + val id: String = idP + AccessController.checkPermission(new AccountControlPanelAppPermission(id, "")) + AccessController.checkPermission(new ChangePasswordPermission(id, "")) + var changedPassword: Boolean = false + if (newPW.trim.equals(confirmNewPW.trim) && checkPWStrings(oldPW, newPW)) { + changedPassword = AccessController.doPrivileged(new PrivilegedAction[Boolean] { + private def getCurrentPassword(agent: NonLiteral): String = { + var currentPassword: String = null + var oldPWTriple: Iterator[Triple] = systemGraph.filter(agent, PERMISSION.passwordSha1, null) + if (oldPWTriple.hasNext) { + var currentPWLiteral: Literal = oldPWTriple.next.getObject.asInstanceOf[Literal] + currentPassword = currentPWLiteral.getLexicalForm + } + return currentPassword + } - def run: Boolean = { - val agent: NonLiteral = getAgent(id) - var encodedOlpPW: String = getEncodedPW(oldPW) - var currentPassword: String = getCurrentPassword(agent) - if ((currentPassword != null) && !currentPassword.equals(encodedOlpPW)) { - logger.info("Typed wrong current password!") - return false - } - else { - removeOldPwAndAddNewPW(agent, currentPassword, newPW) - return true - } - } + def run: Boolean = { + val agent: NonLiteral = getAgent(id) + var encodedOlpPW: String = getEncodedPW(oldPW) + var currentPassword: String = getCurrentPassword(agent) + if ((currentPassword != null) && !currentPassword.equals(encodedOlpPW)) { + logger.info("Typed wrong current password!") + return false + } + else { + removeOldPwAndAddNewPW(agent, currentPassword, newPW) + return true + } + } - private def removeOldPwAndAddNewPW(agent: NonLiteral, currentPassword: String, newPW: String): Unit = { - var newPWTriple: Triple = new TripleImpl(agent, PERMISSION.passwordSha1, new PlainLiteralImpl(getEncodedPW(newPW))) - if (currentPassword != null) { - var oldPWTriple: Triple = new TripleImpl(agent, PERMISSION.passwordSha1, new PlainLiteralImpl(currentPassword)) - systemGraph.remove(oldPWTriple) - logger.debug("removed old password from systemgraph") - } - systemGraph.add(newPWTriple) - logger.debug("user " + id + " changed password") - } + private def removeOldPwAndAddNewPW(agent: NonLiteral, currentPassword: String, newPW: String): Unit = { + var newPWTriple: Triple = new TripleImpl(agent, PERMISSION.passwordSha1, new PlainLiteralImpl(getEncodedPW(newPW))) + if (currentPassword != null) { + var oldPWTriple: Triple = new TripleImpl(agent, PERMISSION.passwordSha1, new PlainLiteralImpl(currentPassword)) + systemGraph.remove(oldPWTriple) + logger.debug("removed old password from systemgraph") + } + systemGraph.add(newPWTriple) + logger.debug("user " + id + " changed password") + } - private def getEncodedPW(password: String): String = { - if (password == null) { - return null - } - try { - return bytes2HexString(MessageDigest.getInstance("SHA1").digest(password.getBytes("UTF-8"))) - } - catch { - case e: NoSuchAlgorithmException => { - throw new RuntimeException(e) - } - case e: UnsupportedEncodingException => { - throw new RuntimeException(e) - } - } - } + private def getEncodedPW(password: String): String = { + if (password == null) { + return null + } + try { + return bytes2HexString(MessageDigest.getInstance("SHA1").digest(password.getBytes("UTF-8"))) + } + catch { + case e: NoSuchAlgorithmException => { + throw new RuntimeException(e) + } + case e: UnsupportedEncodingException => { + throw new RuntimeException(e) + } + } + } - private def bytes2HexString(bytes: Array[Byte]): String = { - val HEXDIGITS: Array[Char] = "0123456789abcdef".toCharArray - val result = new Array[Char](bytes.length << 1) - var j: Int = 0 - for (i <- 0 to bytes.length - 1) { - result(j) = HEXDIGITS(bytes(i) >> 4 & 0xF) - result(j + 1) = HEXDIGITS(bytes(i) & 0xF) - j += 2 - } - return new String(result) - } - }) - } - else { - logger.info("Changing password failed!") - changedPassword = false - } - if (changedPassword) { - return RedirectUtil.createSeeOtherResponse("../control-panel", uriInfo) - } - else { - return RedirectUtil.createSeeOtherResponse("../control-panel?changedPassword=false", uriInfo) - } - } + private def bytes2HexString(bytes: Array[Byte]): String = { + val HEXDIGITS: Array[Char] = "0123456789abcdef".toCharArray + val result = new Array[Char](bytes.length << 1) + var j: Int = 0 + for (i <- 0 to bytes.length - 1) { + result(j) = HEXDIGITS(bytes(i) >> 4 & 0xF) + result(j + 1) = HEXDIGITS(bytes(i) & 0xF) + j += 2 + } + return new String(result) + } + }) + } + else { + logger.info("Changing password failed!") + changedPassword = false + } + if (changedPassword) { + return RedirectUtil.createSeeOtherResponse("../control-panel", uriInfo) + } + else { + return RedirectUtil.createSeeOtherResponse("../control-panel?changedPassword=false", uriInfo) + } + } - /** - * checks if the typed strings are valid - */ - private def checkPWStrings(oldPW: String, newPW: String): Boolean = { - if (newPW.length == 0) { - return false - } - return true - } + /** + * checks if the typed strings are valid + */ + private def checkPWStrings(oldPW: String, newPW: String): Boolean = { + if (newPW.length == 0) { + return false + } + return true + } - /** - * The activate method is called when SCR activates the component configuration. - * - * @param componentContext - */ - protected def activate(componentContext: ComponentContext): Unit = { - this.componentContext = componentContext - } + /** + * The activate method is called when SCR activates the component configuration. + * + * @param componentContext + */ + protected def activate(componentContext: ComponentContext): Unit = { + this.componentContext = componentContext + } - protected def bindConfigurationAdmin(configAdmin: ConfigurationAdmin): Unit = { - logger.debug("Binding configuration admin") - this.configAdmin = configAdmin - } + protected def bindConfigurationAdmin(configAdmin: ConfigurationAdmin): Unit = { + logger.debug("Binding configuration admin") + this.configAdmin = configAdmin + } - protected def unbindConfigurationAdmin(configAdmin: ConfigurationAdmin): Unit = { - logger.debug("Unbinding configuration admin") - this.configAdmin = null - } + protected def unbindConfigurationAdmin(configAdmin: ConfigurationAdmin): Unit = { + logger.debug("Unbinding configuration admin") + this.configAdmin = null + } - protected def bindSystemGraph(mgraph: MGraph): Unit = { - systemGraph = mgraph - } + protected def bindSystemGraph(mgraph: MGraph): Unit = { + systemGraph = mgraph + } - protected def unbindSystemGraph(mgraph: MGraph): Unit = { - if (systemGraph == mgraph) { - systemGraph = null - } - } + protected def unbindSystemGraph(mgraph: MGraph): Unit = { + if (systemGraph == mgraph) { + systemGraph = null + } + } - protected def bindCgProvider(contentgraphprovider: ContentGraphProvider): Unit = { - cgProvider = contentgraphprovider - } + protected def bindCgProvider(contentgraphprovider: ContentGraphProvider): Unit = { + cgProvider = contentgraphprovider + } - protected def unbindCgProvider(contentgraphprovider: ContentGraphProvider): Unit = { - if (cgProvider == contentgraphprovider) { - cgProvider = null - } - } + protected def unbindCgProvider(contentgraphprovider: ContentGraphProvider): Unit = { + if (cgProvider == contentgraphprovider) { + cgProvider = null + } + } - private var componentContext: ComponentContext = null - private var systemGraph: MGraph = null - private var cgProvider: ContentGraphProvider = null - private var configAdmin: ConfigurationAdmin = null + private var componentContext: ComponentContext = null + private var systemGraph: MGraph = null + private var cgProvider: ContentGraphProvider = null + private var configAdmin: ConfigurationAdmin = null } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/clerezza/blob/35448624/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/html/ContactConfirmRenderlet.scala ---------------------------------------------------------------------- diff --git a/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/html/ContactConfirmRenderlet.scala b/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/html/ContactConfirmRenderlet.scala index 23e7dc3..bb306aa 100644 --- a/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/html/ContactConfirmRenderlet.scala +++ b/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/html/ContactConfirmRenderlet.scala @@ -32,78 +32,78 @@ import org.apache.clerezza.platform.typerendering.scala._ * Metadata class for the person panel */ class ContactConfirmRenderlet extends SRenderlet { - def getRdfType() = CONTROLPANEL.ContactConfirmPage + def getRdfType() = CONTROLPANEL.ContactConfirmPage - override def renderedPage(arguments: XmlResult.Arguments) = new XmlPerson(arguments) + override def renderedPage(arguments: XmlResult.Arguments) = new XmlPerson(arguments) - /** - * Content class for the Person Panel - */ - class XmlPerson(args: XmlResult.Arguments) extends XmlResult(args) { + /** + * Content class for the Person Panel + */ + class XmlPerson(args: XmlResult.Arguments) extends XmlResult(args) { - import RenderingUtility._ - - // - // the content itself. - // This is the piece that is closest to a pure ssp, though there is still too much code in it - // + import RenderingUtility._ + + // + // the content itself. + // This is the piece that is closest to a pure ssp, though there is still too much code in it + // - override def content = { - val primarySubject = res/FOAF.primaryTopic -
- { - if (primarySubject.hasProperty(RDF.`type`, FOAF.Person)) { -
- {render(primarySubject, "box-naked")} - - -
- } else { -
- The resource {primarySubject!} of type {primarySubject/RDF.`type`} is not known to be a Person - { - import collection.JavaConversions._ - val otherPersons = (for (t <- primarySubject.getNodeContext.filter(null, RDF.`type`, FOAF.Person)) - yield t.getSubject).toList - val personsWithUri: List[UriRef] = for (otherPerson <- otherPersons; - if otherPerson.isInstanceOf[UriRef]) yield otherPerson.asInstanceOf[UriRef] - if (personsWithUri.isEmpty) { - No person could be found - } else { -
- Maybe you want to add { - if (personsWithUri.size > 1) { - "one of the following "+personsWithUri.size+" persons:" - } else { - "the person" - } - } - { - for (otherPerson <- personsWithUri) yield { -
- {otherPerson} - {render(otherPerson, "box-naked")} - - -
- } - } -
- } - } - { -
- You can add {primarySubject} as contact even though it does not seem to be a person. - - -
- }
- } - } - Cancel -
- } + override def content = { + val primarySubject = res/FOAF.primaryTopic +
+ { + if (primarySubject.hasProperty(RDF.`type`, FOAF.Person)) { +
+ {render(primarySubject, "box-naked")} + + +
+ } else { +
+ The resource {primarySubject!} of type {primarySubject/RDF.`type`} is not known to be a Person + { + import collection.JavaConversions._ + val otherPersons = (for (t <- primarySubject.getNodeContext.filter(null, RDF.`type`, FOAF.Person)) + yield t.getSubject).toList + val personsWithUri: List[UriRef] = for (otherPerson <- otherPersons; + if otherPerson.isInstanceOf[UriRef]) yield otherPerson.asInstanceOf[UriRef] + if (personsWithUri.isEmpty) { + No person could be found + } else { +
+ Maybe you want to add { + if (personsWithUri.size > 1) { + "one of the following "+personsWithUri.size+" persons:" + } else { + "the person" + } + } + { + for (otherPerson <- personsWithUri) yield { +
+ {otherPerson} + {render(otherPerson, "box-naked")} + + +
+ } + } +
+ } + } + { +
+ You can add {primarySubject} as contact even though it does not seem to be a person. + + +
+ }
+ } + } + Cancel +
+ } - } + } }