This is an automated email from the ASF dual-hosted git repository.
rabbah pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-openwhisk.git
The following commit(s) were added to refs/heads/master by this push:
new 5e1571a Avoid regenerating auth key multiple times (#3821)
5e1571a is described below
commit 5e1571a61aa606eecfef7d7e44d46187d29e0026
Author: Chetan Mehrotra <[email protected]>
AuthorDate: Fri Jun 29 07:21:47 2018 +0530
Avoid regenerating auth key multiple times (#3821)
---
.../whisk/core/database/UserCommandTests.scala | 6 ++++
.../scala/whisk/core/database/UserCommand.scala | 38 ++++++++++++----------
2 files changed, 26 insertions(+), 18 deletions(-)
diff --git a/tests/src/test/scala/whisk/core/database/UserCommandTests.scala
b/tests/src/test/scala/whisk/core/database/UserCommandTests.scala
index 9e69b0d..680e2ea 100644
--- a/tests/src/test/scala/whisk/core/database/UserCommandTests.scala
+++ b/tests/src/test/scala/whisk/core/database/UserCommandTests.scala
@@ -62,6 +62,12 @@ class UserCommandTests extends FlatSpec with
WhiskAdminCliTestBase {
admin.executeCommand().futureValue.right.get shouldBe key.compact
}
+ it should "create a user with default key" in {
+ val subject = newSubject()
+ val generatedKey = resultOk("user", "create", subject)
+ resultOk("user", "get", subject) shouldBe generatedKey
+ }
+
it should "add namespace to existing user" in {
val subject = newSubject()
val key = AuthKey()
diff --git a/tools/admin/src/main/scala/whisk/core/database/UserCommand.scala
b/tools/admin/src/main/scala/whisk/core/database/UserCommand.scala
index e32f39b..f4119dd 100644
--- a/tools/admin/src/main/scala/whisk/core/database/UserCommand.scala
+++ b/tools/admin/src/main/scala/whisk/core/database/UserCommand.scala
@@ -85,9 +85,7 @@ class UserCommand extends Subcommand("user") with
WhiskCommand {
def isUUID(u: String) = Try(UUID.fromString(u)).isSuccess
- def desiredNamespace =
Namespace(EntityName(namespace.getOrElse(subject()).trim), authKey.uuid)
-
- def authKey: AuthKey = auth.map(AuthKey(_)).getOrElse(AuthKey())
+ def desiredNamespace(authKey: AuthKey) =
Namespace(EntityName(namespace.getOrElse(subject()).trim), authKey.uuid)
}
val create = new CreateUserCmd
@@ -171,22 +169,26 @@ class UserCommand extends Subcommand("user") with
WhiskCommand {
def createUser(authStore: AuthStore)(implicit transid: TransactionId,
ec: ExecutionContext):
Future[Either[CommandError, String]] = {
- authStore.get[ExtendedAuth](DocInfo(create.subject())).flatMap { auth =>
- if (auth.isBlocked) {
- Future.successful(Left(IllegalState(CommandMessages.subjectBlocked)))
- } else if (auth.namespaces.exists(_.namespace.name ==
create.desiredNamespace.name)) {
- Future.successful(Left(IllegalState(CommandMessages.namespaceExists)))
- } else {
- val newNS = auth.namespaces + WhiskNamespace(create.desiredNamespace,
create.authKey)
- val newAuth = WhiskAuth(auth.subject,
newNS).revision[WhiskAuth](auth.rev)
- authStore.put(newAuth).map(_ => Right(create.authKey.compact))
+ val authKey = create.auth.map(AuthKey(_)).getOrElse(AuthKey())
+ authStore
+ .get[ExtendedAuth](DocInfo(create.subject()))
+ .flatMap { auth =>
+ if (auth.isBlocked) {
+ Future.successful(Left(IllegalState(CommandMessages.subjectBlocked)))
+ } else if (auth.namespaces.exists(_.namespace.name ==
create.desiredNamespace(authKey).name)) {
+
Future.successful(Left(IllegalState(CommandMessages.namespaceExists)))
+ } else {
+ val newNS = auth.namespaces +
WhiskNamespace(create.desiredNamespace(authKey), authKey)
+ val newAuth = WhiskAuth(auth.subject,
newNS).revision[WhiskAuth](auth.rev)
+ authStore.put(newAuth).map(_ => Right(authKey.compact))
+ }
+ }
+ .recoverWith {
+ case _: NoDocumentException =>
+ val auth =
+ WhiskAuth(Subject(create.subject()),
Set(WhiskNamespace(create.desiredNamespace(authKey), authKey)))
+ authStore.put(auth).map(_ => Right(authKey.compact))
}
- }
- }.recoverWith {
- case _: NoDocumentException =>
- val auth =
- WhiskAuth(Subject(create.subject()),
Set(WhiskNamespace(create.desiredNamespace, create.authKey)))
- authStore.put(auth).map(_ => Right(create.authKey.compact))
}
def deleteUser(authStore: AuthStore)(implicit transid: TransactionId,