Skip to content

Commit 2fe2860

Browse files
committed
Implement link check api and cleanup
1 parent f0c9acc commit 2fe2860

12 files changed

Lines changed: 123 additions & 4 deletions

File tree

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package me.proxer.library.api.messenger
2+
3+
import me.proxer.library.ProxerCall
4+
import me.proxer.library.api.Endpoint
5+
import me.proxer.library.entity.messenger.LinkCheckResponse
6+
7+
/**
8+
* Endpoint for reporting a conference. The given text is sent to the moderators for investigation.
9+
*
10+
* @author Ruben Gees
11+
*/
12+
class CheckLinkEndpoint internal constructor(
13+
private val internalApi: InternalApi,
14+
private val link: String
15+
) : Endpoint<LinkCheckResponse> {
16+
17+
override fun build(): ProxerCall<LinkCheckResponse> {
18+
return internalApi.checkLink(link)
19+
}
20+
}

library/src/main/kotlin/me/proxer/library/api/messenger/InternalApi.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package me.proxer.library.api.messenger
33
import me.proxer.library.ProxerCall
44
import me.proxer.library.entity.messenger.Conference
55
import me.proxer.library.entity.messenger.ConferenceInfo
6+
import me.proxer.library.entity.messenger.LinkCheckResponse
67
import me.proxer.library.entity.messenger.Message
78
import me.proxer.library.enums.ConferenceType
89
import retrofit2.http.Field
@@ -81,4 +82,8 @@ internal interface InternalApi {
8182
@FormUrlEncoded
8283
@POST("messenger/report")
8384
fun report(@Field("conference_id") id: String?, @Field("text") text: String?): ProxerCall<Unit>
85+
86+
@FormUrlEncoded
87+
@POST("messenger/checkLink")
88+
fun checkLink(@Field("link") link: String?): ProxerCall<LinkCheckResponse>
8489
}

library/src/main/kotlin/me/proxer/library/api/messenger/MessengerApi.kt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package me.proxer.library.api.messenger
33
import me.proxer.library.api.messenger.ConferenceModificationEndpoint.ConferenceModification
44
import me.proxer.library.enums.MessageAction
55
import me.proxer.library.util.ProxerUtils
6+
import okhttp3.HttpUrl
67
import retrofit2.Retrofit
78

89
/**
@@ -116,6 +117,20 @@ class MessengerApi internal constructor(retrofit: Retrofit) {
116117
return ReportConferenceEndpoint(internalApi, id, text)
117118
}
118119

120+
/**
121+
* Returns the respective endpoint.
122+
*/
123+
fun checkLink(link: String): CheckLinkEndpoint {
124+
return CheckLinkEndpoint(internalApi, link)
125+
}
126+
127+
/**
128+
* Returns the respective endpoint.
129+
*/
130+
fun checkLink(link: HttpUrl): CheckLinkEndpoint {
131+
return CheckLinkEndpoint(internalApi, link.toString())
132+
}
133+
119134
private fun constructMessageFromAction(action: MessageAction, subject: String): String {
120135
require(action != MessageAction.NONE) { "Invalid action: $action" }
121136

library/src/main/kotlin/me/proxer/library/entity/info/EpisodeInfo.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package me.proxer.library.entity.info
22

33
import com.squareup.moshi.Json
4+
import com.squareup.moshi.JsonClass
45
import me.proxer.library.enums.Category
56
import me.proxer.library.enums.MediaLanguage
67

@@ -16,6 +17,7 @@ import me.proxer.library.enums.MediaLanguage
1617
*
1718
* @author Ruben Gees
1819
*/
20+
@JsonClass(generateAdapter = true)
1921
data class EpisodeInfo(
2022
@Json(name = "start") val firstEpisode: Int,
2123
@Json(name = "end") val lastEpisode: Int,

library/src/main/kotlin/me/proxer/library/entity/messenger/Conference.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package me.proxer.library.entity.messenger
22

33
import com.squareup.moshi.Json
4+
import com.squareup.moshi.JsonClass
45
import me.proxer.library.entity.ProxerDateItem
56
import me.proxer.library.entity.ProxerIdItem
67
import me.proxer.library.entity.ProxerImageItem
@@ -21,6 +22,7 @@ import java.util.Date
2122
*
2223
* @author Ruben Gees
2324
*/
25+
@JsonClass(generateAdapter = true)
2426
data class Conference(
2527
@Json(name = "id") override val id: String,
2628
@Json(name = "topic") val topic: String,

library/src/main/kotlin/me/proxer/library/entity/messenger/ConferenceInfo.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package me.proxer.library.entity.messenger
22

33
import com.squareup.moshi.Json
4+
import com.squareup.moshi.JsonClass
45
import java.util.Date
56

67
/**
@@ -15,6 +16,7 @@ import java.util.Date
1516
*
1617
* @author Desnoo
1718
*/
19+
@JsonClass(generateAdapter = true)
1820
data class ConferenceInfo(
1921
@Json(name = "topic") val topic: String,
2022
@Json(name = "count") val participantAmount: Int,
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package me.proxer.library.entity.messenger
2+
3+
import com.squareup.moshi.Json
4+
import com.squareup.moshi.JsonClass
5+
6+
/**
7+
* Entity containing the results of a link check.
8+
*
9+
* @param isSecure If the link is not on any blacklist.
10+
* @param link The link sent.
11+
*/
12+
@JsonClass(generateAdapter = true)
13+
data class LinkCheckResponse(
14+
@Json(name = "secure") val isSecure: Boolean,
15+
@Json(name = "link") val link: String
16+
)

library/src/main/kotlin/me/proxer/library/entity/notifications/Notification.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package me.proxer.library.entity.notifications
22

33
import com.squareup.moshi.Json
4+
import com.squareup.moshi.JsonClass
45
import me.proxer.library.entity.ProxerDateItem
56
import me.proxer.library.entity.ProxerIdItem
67
import me.proxer.library.enums.NotificationType
@@ -19,6 +20,7 @@ import java.util.Date
1920
*
2021
* @author Ruben Gees
2122
*/
23+
@JsonClass(generateAdapter = true)
2224
data class Notification(
2325
@Json(name = "id") override val id: String,
2426
@Json(name = "type") val type: NotificationType,

library/src/main/kotlin/me/proxer/library/entity/notifications/NotificationInfo.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package me.proxer.library.entity.notifications
22

3+
import com.squareup.moshi.JsonClass
4+
35
/**
46
* Entity holding counts of notification types.
57
*
@@ -10,6 +12,7 @@ package me.proxer.library.entity.notifications
1012
*
1113
* @author Ruben Gees
1214
*/
15+
@JsonClass(generateAdapter = true)
1316
data class NotificationInfo(
1417
val messageAmount: Int,
1518
val friendRequestAmount: Int,

library/src/test/kotlin/me/proxer/library/TestUtils.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,15 @@ package me.proxer.library
33
import okhttp3.mockwebserver.MockResponse
44
import okhttp3.mockwebserver.MockWebServer
55
import okhttp3.mockwebserver.RecordedRequest
6-
import okio.buffer
7-
import okio.source
86
import java.lang.invoke.MethodHandles
97
import java.text.SimpleDateFormat
108
import java.util.Date
119
import java.util.Locale
1210
import java.util.concurrent.TimeUnit
1311

1412
fun fromResource(file: String): String = MethodHandles.lookup().lookupClass().classLoader
15-
.let { requireNotNull(it.getResourceAsStream(file)) }
16-
.let { it.source().buffer().readUtf8() }
13+
.let { requireNotNull(it.getResource(file)) }
14+
.readText(Charsets.UTF_8)
1715

1816
fun String.toProxerDate(): Date = SimpleDateFormat("yyyy-MM-dd", Locale.GERMANY).parse(this)
1917
fun String.toProxerDateTime(): Date = SimpleDateFormat("yyyy-MM-dd hh:mm:ss", Locale.GERMANY).parse(this)

0 commit comments

Comments
 (0)