Skip to content

Commit b932a31

Browse files
To-omnadouani
authored andcommitted
#251 Check user status before creating authContext
1 parent d87c9d2 commit b932a31

File tree

3 files changed

+16
-17
lines changed

3 files changed

+16
-17
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
- Alert can contain inconsistent data [\#234](https://github.com/CERT-BDF/TheHive/issues/234)
2828
- Search do not work with non-latin characters [\#223](https://github.com/CERT-BDF/TheHive/issues/223)
2929
- report status not updated after finish [\#212](https://github.com/CERT-BDF/TheHive/issues/212)
30+
- A locked user can use the API to create / delete / list cases \(and more\) [\#250](https://github.com/CERT-BDF/TheHive/issues/250)
3031

3132
## [2.11.3](https://github.com/CERT-BDF/TheHive/tree/2.11.3) (2017-06-14)
3233
[Full Changelog](https://github.com/CERT-BDF/TheHive/compare/debian/2.11.2...2.11.3)

thehive-backend/app/controllers/AuthenticationCtrl.scala

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package controllers
33
import javax.inject.{ Inject, Singleton }
44

55
import models.UserStatus
6-
import org.elastic4play.Timed
6+
import org.elastic4play.{ AuthorizationError, Timed }
77
import org.elastic4play.controllers.{ Authenticated, Fields, FieldsBodyParser, Renderer }
88
import org.elastic4play.database.DBIndex
99
import org.elastic4play.services.AuthSrv
@@ -34,7 +34,7 @@ class AuthenticationCtrl @Inject() (
3434
if (user.status() == UserStatus.Ok)
3535
authenticated.setSessingUser(Ok, authContext)
3636
else
37-
Unauthorized("Your account is locked")
37+
throw AuthorizationError("Your account is locked")
3838
}
3939
}
4040
}

thehive-backend/app/services/UserSrv.scala

+13-15
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,18 @@
11
package services
22

3-
import javax.inject.{ Inject, Named, Singleton }
4-
5-
import scala.annotation.implicitNotFound
6-
import scala.concurrent.{ ExecutionContext, Future }
3+
import javax.inject.{ Inject, Provider, Singleton }
74

85
import akka.NotUsed
9-
import akka.actor.{ ActorRef, actorRef2Scala }
106
import akka.stream.scaladsl.Source
11-
12-
import play.api.mvc.RequestHeader
13-
14-
import org.elastic4play.AuthenticationError
7+
import models.{ User, UserModel, UserStatus }
158
import org.elastic4play.controllers.Fields
169
import org.elastic4play.database.DBIndex
17-
import org.elastic4play.services.{ AuthContext, CreateSrv, DeleteSrv, FindSrv, GetSrv, QueryDef, Role, UpdateSrv }
10+
import org.elastic4play.services._
1811
import org.elastic4play.utils.Instance
12+
import org.elastic4play.{ AuthenticationError, AuthorizationError }
13+
import play.api.mvc.RequestHeader
1914

20-
import models.{ User, UserModel }
21-
import org.elastic4play.services.EventSrv
22-
import org.elastic4play.services.AuthSrv
23-
import javax.inject.Provider
15+
import scala.concurrent.{ ExecutionContext, Future }
2416

2517
@Singleton
2618
class UserSrv @Inject() (
@@ -42,7 +34,13 @@ class UserSrv @Inject() (
4234
.flatMap { user getFromUser(request, user) }
4335
}
4436

45-
override def getFromUser(request: RequestHeader, user: org.elastic4play.services.User): Future[AuthContext] = Future.successful(AuthContextImpl(user.id, user.getUserName, Instance.getRequestId(request), user.getRoles))
37+
override def getFromUser(request: RequestHeader, user: org.elastic4play.services.User): Future[AuthContext] = {
38+
user match {
39+
case u: User if u.status() == UserStatus.Ok Future.successful(AuthContextImpl(user.id, user.getUserName, Instance.getRequestId(request), user.getRoles))
40+
case _ Future.failed(AuthorizationError("Your account is locked"))
41+
}
42+
43+
}
4644

4745
override def getInitialUser(request: RequestHeader): Future[AuthContext] =
4846
dbIndex.getSize(userModel.name).map {

0 commit comments

Comments
 (0)