diff --git a/build.gradle b/build.gradle index 17b6216..2647cec 100644 --- a/build.gradle +++ b/build.gradle @@ -94,7 +94,7 @@ dependencyManagement { // appengine versions for various environment def gaeVersions = [ - dev: "0-7", stable: "0-7", nightly: "0-7", prod: "0-7" + dev: "0-8", stable: "0-8", nightly: "0-8", prod: "0-8" ] ext.getDeployConfig = { -> diff --git a/src/main/java/org/mozilla/msrp/platform/user/FirefoxAccountData.kt b/src/main/java/org/mozilla/msrp/platform/user/FirefoxAccountData.kt index 1f6d2c8..b1e6be6 100644 --- a/src/main/java/org/mozilla/msrp/platform/user/FirefoxAccountData.kt +++ b/src/main/java/org/mozilla/msrp/platform/user/FirefoxAccountData.kt @@ -2,13 +2,9 @@ package org.mozilla.msrp.platform.user import com.fasterxml.jackson.annotation.JsonIgnoreProperties - +@JsonIgnoreProperties(ignoreUnknown = true) class FxaTokenResponse( - val access_token: String? = null, - val token_type: String? = null, - val scope: String? = null, - val expires_in: Int? = null, - val auth_at: Long? = null + val access_token: String? = null ) class FxaTokenRequest( diff --git a/src/main/java/org/mozilla/msrp/platform/user/UserController.java b/src/main/java/org/mozilla/msrp/platform/user/UserController.java index 2e62177..2d56d48 100644 --- a/src/main/java/org/mozilla/msrp/platform/user/UserController.java +++ b/src/main/java/org/mozilla/msrp/platform/user/UserController.java @@ -39,6 +39,8 @@ void login(@RequestParam(value = "code") String code, @RequestParam(value = "state") String state, HttpServletResponse httpResponse) { // need HttpServletResponse to redirect + log.info("[login][/api/v1/login][" + state + "] "); + try { FxaTokenRequest fxaTokenRequest = firefoxAccountService.genFxaTokenRequest(code); String fxaAccessToken = firefoxAccountService.token(fxaTokenRequest); @@ -58,7 +60,7 @@ void login(@RequestParam(value = "code") String code, String fxUid = profileResponse.getUid(); String fxEmail = profileResponse.getEmail(); - + log.info("[login] User[" + fxUid + "] login with email:" + fxEmail); if (fxUid == null || fxEmail == null) { log.error("[login][" + state + "] No such user in fxa"); httpResponse.sendRedirect("/api/v1/done?login_success=false&msg=no_Fxa_user"); @@ -87,12 +89,16 @@ void login(@RequestParam(value = "code") String code, String customToken = userRepository.createCustomToken(oldFbUid, additionalClaims); // log are handled in the repository if (loginResponse instanceof LoginResponse.Success) { + log.info("[login]bind FxA success: login for the fist time"); httpResponse.sendRedirect("/api/v1/done?jwt=" + customToken + "&login_success=true&disabled=false×=1"); } else if (loginResponse instanceof LoginResponse.SuspiciousWarning) { + log.info("[login]bind success: login for the second time"); httpResponse.sendRedirect("/api/v1/done?jwt=" + customToken + "&login_success=true&disabled=false×=2"); } else if (loginResponse instanceof LoginResponse.UserSuspended) { + log.info("[login]bind success: login more than three times. User suspended"); httpResponse.sendRedirect("/api/v1/done?jwt=" + customToken + "&login_success=true&disabled=true×=3"); } else if (loginResponse instanceof LoginResponse.Fail) { + log.info("[login]bind fail:" + ((LoginResponse.Fail) loginResponse).getMessage()); httpResponse.sendRedirect("/api/v1/done?login_success=false"); } diff --git a/src/main/java/org/mozilla/msrp/platform/vertical/news/NewsFeedController.kt b/src/main/java/org/mozilla/msrp/platform/vertical/news/NewsFeedController.kt index 0306516..efd3533 100644 --- a/src/main/java/org/mozilla/msrp/platform/vertical/news/NewsFeedController.kt +++ b/src/main/java/org/mozilla/msrp/platform/vertical/news/NewsFeedController.kt @@ -103,7 +103,7 @@ class NewsFeedController @Inject constructor( log.info("[NEWS]====No news for topic $String") return ResponseEntity("No news for topic", HttpStatus.NO_CONTENT) } - log.info("[NEWS]====found [${newsItems.size}] news item for topic $String") + log.info("[NEWS]====found [${newsItems.size}] news item for topic $topic") return ResponseEntity(newsItems, HttpStatus.OK) } diff --git a/src/main/java/org/mozilla/msrp/platform/vertical/news/NewsFeedData.kt b/src/main/java/org/mozilla/msrp/platform/vertical/news/NewsFeedData.kt index 504b85a..7713694 100644 --- a/src/main/java/org/mozilla/msrp/platform/vertical/news/NewsFeedData.kt +++ b/src/main/java/org/mozilla/msrp/platform/vertical/news/NewsFeedData.kt @@ -6,6 +6,8 @@ import org.simpleframework.xml.ElementList import org.simpleframework.xml.Path import org.simpleframework.xml.Root import org.simpleframework.xml.Text +import java.text.ParseException +import java.text.SimpleDateFormat open class Rss { @@ -42,7 +44,12 @@ class GoogleRss : Rss() { override var feedItems: List? = null } -open class FeedItem { +open class FeedItem : Comparable { + + companion object { + private val sharedRssDateFormat = SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz") + } + open var pubDate: String? = "" open var title: String? = "" @@ -55,6 +62,20 @@ open class FeedItem { open var source: String = "" + override fun compareTo(other: FeedItem): Int { + return try { + val formatter = sharedRssDateFormat + val o1Date = formatter.parse(this.pubDate) + val o2Date = formatter.parse(other.pubDate) + if (o1Date.before(o2Date)) { + 1 + } else { + -1 + } + } catch (e: ParseException) { + 1 + } + } } @Root(name = "item", strict = false) diff --git a/src/main/java/org/mozilla/msrp/platform/vertical/news/NewsFeedService.kt b/src/main/java/org/mozilla/msrp/platform/vertical/news/NewsFeedService.kt index 297a9fb..4a1318a 100644 --- a/src/main/java/org/mozilla/msrp/platform/vertical/news/NewsFeedService.kt +++ b/src/main/java/org/mozilla/msrp/platform/vertical/news/NewsFeedService.kt @@ -10,7 +10,10 @@ class GoogleNewsFeedService @Inject constructor(private val googleRssFeedReposit fun getNews(language: String) = googleRssFeedRepository.news(language) - fun getNews(topic: String, hl: String, gl: String, ceid: String) = googleRssFeedRepository.news(topic, hl, gl, ceid) + fun getNews(topic: String, hl: String, gl: String, ceid: String): List? { + val list = googleRssFeedRepository.news(topic, hl, gl, ceid) + return list?.sorted() + } } @@ -30,26 +33,7 @@ class IndonesiaNewsFeedService @Inject constructor( val allNewsList = liputan6List.toMutableList().apply { addAll(detikList) } - - allNewsList.sortWith(Comparator { o1, o2 -> - val grater = o1?.let { - try { - val formatter = SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz") - val o1Date = formatter.parse(it.pubDate) - val o2Date = formatter.parse(o2.pubDate) - o1Date.before(o2Date) - } catch (e: ParseException) { - false - } - } ?: false - if (grater) { - 1 - } else { - -1 - } - }) - - return allNewsList + return allNewsList.sorted() } } diff --git a/src/test/java/org/mozilla/msrp/platform/user/FirefoxAccountServiceTest.kt b/src/test/java/org/mozilla/msrp/platform/user/FirefoxAccountServiceTest.kt index 475e650..783768f 100644 --- a/src/test/java/org/mozilla/msrp/platform/user/FirefoxAccountServiceTest.kt +++ b/src/test/java/org/mozilla/msrp/platform/user/FirefoxAccountServiceTest.kt @@ -43,7 +43,7 @@ class FirefoxAccountServiceTest { val accessToken = "token" onRetrofitExecute(authClient.token(fxaTokenRequest)) - ?.thenReturn(Response.success(FxaTokenResponse(accessToken, ""))) + ?.thenReturn(Response.success(FxaTokenResponse(accessToken))) val response = firefoxAccountService.token(fxaTokenRequest)