You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
146 lines
4.8 KiB
146 lines
4.8 KiB
package org.wntr.mdeditor
|
|
|
|
import android.content.Context
|
|
import android.util.Log
|
|
import android.widget.Toast
|
|
import com.franmontiel.persistentcookiejar.ClearableCookieJar
|
|
import com.franmontiel.persistentcookiejar.PersistentCookieJar
|
|
import com.franmontiel.persistentcookiejar.cache.SetCookieCache
|
|
import com.franmontiel.persistentcookiejar.persistence.SharedPrefsCookiePersistor
|
|
import okhttp3.MultipartBody
|
|
import okhttp3.OkHttpClient
|
|
import okhttp3.ResponseBody
|
|
import org.json.JSONObject
|
|
import retrofit2.Call
|
|
import retrofit2.Retrofit
|
|
import retrofit2.converter.jackson.JacksonConverterFactory
|
|
import retrofit2.http.Body
|
|
import retrofit2.http.DELETE
|
|
import retrofit2.http.GET
|
|
import retrofit2.http.Multipart
|
|
import retrofit2.http.POST
|
|
import retrofit2.http.PUT
|
|
import retrofit2.http.Part
|
|
import retrofit2.http.Path
|
|
|
|
object RetrofitClient {
|
|
fun getClient(applicationContext: Context, baseUrl: String): Retrofit {
|
|
/* Detailed logging
|
|
val loggingInterceptor = HttpLoggingInterceptor().apply {
|
|
this.setLevel(HttpLoggingInterceptor.Level.BASIC)
|
|
}*/
|
|
Log.i(javaClass.simpleName, "Retrofitclient baseurl: $baseUrl")
|
|
for (cookie in SharedPrefsCookiePersistor(applicationContext).loadAll()) {
|
|
Log.d(javaClass.simpleName, "cookie for: ${cookie.domain}")
|
|
}
|
|
val cookieJar: ClearableCookieJar =
|
|
PersistentCookieJar(SetCookieCache(), SharedPrefsCookiePersistor(applicationContext))
|
|
|
|
val okHttpClient = OkHttpClient()
|
|
.newBuilder()
|
|
/*
|
|
.addInterceptor(RequestInterceptor)
|
|
*/
|
|
/*
|
|
.addInterceptor(loggingInterceptor)
|
|
*/
|
|
.cookieJar(cookieJar)
|
|
.build()
|
|
|
|
return Retrofit.Builder()
|
|
.client(okHttpClient)
|
|
.baseUrl(baseUrl + "/ghost/api/admin/")
|
|
.addConverterFactory(JacksonConverterFactory.create())
|
|
.build()
|
|
|
|
}
|
|
}
|
|
|
|
class ghostAPI(applicationContext: Context, instance: String) {
|
|
val retrofit = RetrofitClient.getClient(applicationContext, instance)
|
|
val postApi = retrofit.create(PostApi::class.java)
|
|
|
|
|
|
fun register(credentials: Credentials): String {
|
|
return try {
|
|
val response = postApi.getCookie(credentials).execute()
|
|
if (!response.isSuccessful) {
|
|
Log.d(javaClass.simpleName, "Response code ${response.code()}")
|
|
when (response.code()) {
|
|
401 -> {
|
|
return "404"
|
|
}
|
|
404 -> {
|
|
return "404"
|
|
}
|
|
|
|
429 -> {
|
|
Log.d(javaClass.simpleName, "Too many failures")
|
|
return "TOO_MANY_FAILURES"
|
|
}
|
|
|
|
else -> {
|
|
val errors = JSONObject(response.errorBody()!!.string())
|
|
val code =
|
|
errors.getJSONArray("errors").getJSONObject(0).getString("code")
|
|
Log.d(javaClass.simpleName, "Error code $code")
|
|
if (code.equals("PASSWORD_INCORRECT")) {
|
|
Log.d(javaClass.simpleName, "Password incorrect")
|
|
|
|
}
|
|
if (code !== null) return code
|
|
else return response.code().toString()
|
|
}
|
|
}
|
|
}
|
|
return "SUCCESS"
|
|
} catch (ex: Exception) {
|
|
Log.d(javaClass.simpleName, "Couldn't log in. Exception: ${ex}")
|
|
return "EXCEPTION"
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/* Detailed logging
|
|
|
|
object RequestInterceptor : Interceptor {
|
|
override fun intercept(chain: Interceptor.Chain): Response {
|
|
val request = chain.request()
|
|
val newRequest = request.newBuilder()
|
|
*//*.header("Authorization", "Ghost "+ API_KEY)*//*
|
|
.header("Origin", "https://mary.joefix.it")
|
|
|
|
.build()
|
|
|
|
Log.i(javaClass.simpleName, "Outgoing request to ${newRequest.url}")
|
|
//Log.i(javaClass.simpleName, newRequest.body.toString())
|
|
return chain.proceed(newRequest)
|
|
}
|
|
}
|
|
*/
|
|
}
|
|
|
|
interface PostApi {
|
|
@GET("posts")
|
|
fun getPosts(): Call<ResponseBody>
|
|
/* fun getPosts(): Call<ResponseBody> <- for json string*/
|
|
|
|
@DELETE("posts/{id}")
|
|
fun deletePost(@Path("id") id: String): Call<ResponseBody>
|
|
|
|
@POST("session")
|
|
fun getCookie(@Body credentials: Credentials): Call<ResponseBody>
|
|
|
|
@POST("posts/?source=html")
|
|
fun pushPost(@Body postings: sendPostList): Call<ResponseBody>
|
|
|
|
@PUT("posts/{id}?source=html")
|
|
fun updatePost(@Path("id") id: String, @Body postings:sendPostList): Call<ResponseBody>
|
|
|
|
@Multipart
|
|
@POST("images/upload")
|
|
fun pushMyImage(@Part file: MultipartBody.Part): Call<imagesObj>
|
|
}
|
|
|