@@ -26,6 +26,7 @@ package org.hatdex.hat.api.controllers
26
26
27
27
import java .net .{ URLDecoder , URLEncoder }
28
28
29
+ import akka .Done
29
30
import javax .inject .Inject
30
31
import com .mohiva .play .silhouette .api .repositories .AuthInfoRepository
31
32
import com .mohiva .play .silhouette .api .util .{ Credentials , PasswordHasherRegistry }
@@ -246,9 +247,10 @@ class Authentication @Inject() (
246
247
case Some (user) =>
247
248
applicationsService.applicationStatus()(request.dynamicEnvironment, user, request).flatMap { applications =>
248
249
val maybeApplication = applications.find(_.application.id.equals(claimHatRequest.applicationId))
249
- val maybeEmailDetails = maybeApplication.map(app => {
250
- (app.application.info.name, app.application.info.graphics.logo.normal)
251
- })
250
+ val maybeAppDetails = maybeApplication.map { app =>
251
+ ((app.application.info.name, app.application.developer.logo.map(_.normal).getOrElse(" #" )),
252
+ (app.application.id, app.application.info.version.toString))
253
+ }
252
254
253
255
val scheme = if (request.secure) {
254
256
" https://"
@@ -260,23 +262,36 @@ class Authentication @Inject() (
260
262
tokenService.retrieve(email, isSignup = true ).flatMap {
261
263
case Some (existingTokenUser) if ! existingTokenUser.isExpired =>
262
264
val claimLink = s " $scheme${request.host}/#/hat/claim/ ${existingTokenUser.id}?email= ${URLEncoder .encode(email, " UTF-8" )}"
263
- mailer.claimHat(email, claimLink, maybeEmailDetails )
265
+ mailer.claimHat(email, claimLink, maybeAppDetails.map(_._1) )
264
266
265
267
Future .successful(response)
266
268
case Some (_) => Future .successful(Ok (Json .toJson(SuccessResponse (" The HAT is already claimed" ))))
267
269
268
270
case None =>
269
- logService.logAction(request.dynamicEnvironment.domain, " unclaimed" , None , None , Some ((claimHatRequest.applicationId, applicationVersion))) recover {
270
- case _ => logger.error(" LogActionError::unclaimed" )
271
- }
272
-
273
271
val token = MailClaimTokenUser (email)
274
- tokenService.create(token).map { _ =>
272
+
273
+ val eventualResult = for {
274
+ _ <- tokenService.create(token)
275
+ _ <- logService
276
+ .logAction(request.dynamicEnvironment.domain, LogRequest (" unclaimed" , None , None ), maybeAppDetails.map(_._2))
277
+ .recover {
278
+ case e =>
279
+ logger.error(s " LogActionError::unclaimed. Reason: ${e.getMessage}" )
280
+ Done
281
+ }
282
+ } yield {
283
+
275
284
val claimLink = s " $scheme${request.host}/#/hat/claim/ ${token.id}?email= ${URLEncoder .encode(email, " UTF-8" )}"
276
- mailer.claimHat(email, claimLink, maybeEmailDetails )
285
+ mailer.claimHat(email, claimLink, maybeAppDetails.map(_._1) )
277
286
278
287
response
279
288
}
289
+
290
+ eventualResult.recover {
291
+ case e =>
292
+ logger.error(s " Could not create new HAT claim token. Reason: ${e.getMessage}" )
293
+ InternalServerError (Json .toJson(ErrorMessage (" Internal Server Error" , " Failed to initialize HAT claim process" )))
294
+ }
280
295
}
281
296
}
282
297
case None => Future .successful(response)
0 commit comments