diff --git a/app/controllers/Api.scala b/app/controllers/Api.scala index 2ef385cb62..f6bee8b72f 100644 --- a/app/controllers/Api.scala +++ b/app/controllers/Api.scala @@ -42,7 +42,11 @@ object Api extends LilaController { } def user(name: String) = ApiRequest { implicit ctx => - userApi one name map toApiResult + userApi.one(name, isAuth = ctx.me.exists(_ is name)) map toApiResult + } + + def me = ApiRequestAuth { implicit ctx => me => + userApi.one(me.id, isAuth = true) map toApiResult } private val UsersRateLimitGlobal = new lila.memo.RateLimit[String]( @@ -299,6 +303,10 @@ object Api extends LilaController { js(ctx) map toHttp } + def ApiRequestAuth(js: Context => lila.user.User => Fu[ApiResult]) = Auth { implicit ctx => me => + js(ctx)(me) map toHttp + } + private val tooManyRequests = TooManyRequest(jsonError("Try again later")) private def toHttp(result: ApiResult)(implicit ctx: Context): Result = result match { diff --git a/conf/routes b/conf/routes index 13b3edfcaf..bd93f9c4cb 100644 --- a/conf/routes +++ b/conf/routes @@ -501,6 +501,7 @@ GET /stat/rating/distribution/:perf controllers.Stat.ratingDistribution(perf: # API GET /api/user controllers.Api.users POST /api/users controllers.Api.usersByIds +GET /api/user/me controllers.Api.me GET /api/user/:name controllers.Api.user(name: String) GET /api/user/:name/games controllers.Api.userGames(name: String) GET /api/user/:name/activity controllers.Api.activity(name: String) diff --git a/modules/api/src/main/UserApi.scala b/modules/api/src/main/UserApi.scala index 6563eb5f18..e6b4df5b3b 100644 --- a/modules/api/src/main/UserApi.scala +++ b/modules/api/src/main/UserApi.scala @@ -21,7 +21,7 @@ private[api] final class UserApi( jsonView(u) ++ Json.obj("url" -> makeUrl(s"@/${u.username}")) })) - def one(username: String)(implicit ctx: Context): Fu[Option[JsObject]] = UserRepo named username flatMap { + def one(username: String, isAuth: Boolean)(implicit ctx: Context): Fu[Option[JsObject]] = UserRepo named username flatMap { case None => fuccess(none) case Some(u) if u.disabled => fuccess { Json.obj( diff --git a/modules/user/src/main/User.scala b/modules/user/src/main/User.scala index cf55ce9eda..be84662401 100644 --- a/modules/user/src/main/User.scala +++ b/modules/user/src/main/User.scala @@ -106,6 +106,8 @@ case class User( def planMonths: Option[Int] = activePlan.map(_.months) def createdSinceDays(days: Int) = createdAt isBefore DateTime.now.minusDays(days) + + def is(name: String) = id == User.normalize(name) } object User {