Add HTTP service
parent
882a03312f
commit
9a85fa22ce
|
@ -0,0 +1,108 @@
|
|||
package gallery.memories.service
|
||||
|
||||
import android.net.Uri
|
||||
import android.util.Base64
|
||||
import android.webkit.WebView
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
import org.json.JSONArray
|
||||
import org.json.JSONObject
|
||||
|
||||
class HttpService {
|
||||
companion object {
|
||||
val TAG = HttpService::class.java.simpleName
|
||||
}
|
||||
|
||||
private var authHeader: String? = null
|
||||
private var memoriesUrl: String? = null
|
||||
|
||||
/**
|
||||
* Check if the HTTP service is logged in
|
||||
*/
|
||||
fun isLoggedIn(): Boolean {
|
||||
return authHeader != null
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the Memories URL
|
||||
* @param url The URL to use
|
||||
*/
|
||||
fun setBaseUrl(url: String?) {
|
||||
memoriesUrl = url
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the authorization header
|
||||
* @param credentials The credentials to use
|
||||
*/
|
||||
fun setAuthHeader(credentials: Pair<String, String>?) {
|
||||
if (credentials != null) {
|
||||
val auth = "${credentials.first}:${credentials.second}"
|
||||
authHeader = "Basic ${Base64.encodeToString(auth.toByteArray(), Base64.NO_WRAP)}"
|
||||
return
|
||||
}
|
||||
authHeader = null
|
||||
}
|
||||
|
||||
/**
|
||||
* Load a webview at the default page
|
||||
* @param webView The webview to load
|
||||
* @return Host URL if authenticated, null otherwise
|
||||
*/
|
||||
fun loadWebView(webView: WebView): String? {
|
||||
// Load app interface if authenticated
|
||||
if (authHeader != null && memoriesUrl != null) {
|
||||
// Get host name
|
||||
val host = Uri.parse(memoriesUrl).host
|
||||
|
||||
// Set authorization header
|
||||
webView.loadUrl(memoriesUrl!!, mapOf("Authorization" to authHeader))
|
||||
|
||||
return host
|
||||
}
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
/** Get body as JSON Object */
|
||||
@Throws(Exception::class)
|
||||
fun bodyJson(response: Response): JSONObject? {
|
||||
return getBody(response)?.let { JSONObject(it) }
|
||||
}
|
||||
|
||||
/** Get body as JSON array */
|
||||
@Throws(Exception::class)
|
||||
fun bodyJsonArray(response: Response): JSONArray? {
|
||||
return getBody(response)?.let { JSONArray(it) }
|
||||
}
|
||||
|
||||
/** Get a string from the response body */
|
||||
@Throws(Exception::class)
|
||||
fun getBody(response: Response): String? {
|
||||
val body = response.body?.string()
|
||||
response.body?.close()
|
||||
return body
|
||||
}
|
||||
|
||||
/** Get the API description request */
|
||||
@Throws(Exception::class)
|
||||
fun getApiDescription(): Response {
|
||||
return runRequest("api/describe")
|
||||
}
|
||||
|
||||
/** Run a request and get a JSON object */
|
||||
@Throws(Exception::class)
|
||||
private fun runRequest(path: String): Response {
|
||||
return OkHttpClient().newCall(buildRequest(path)).execute()
|
||||
}
|
||||
|
||||
/** Build a request */
|
||||
private fun buildRequest(path: String): Request {
|
||||
return Request.Builder()
|
||||
.url(memoriesUrl + path)
|
||||
.get()
|
||||
.header("Authorization", authHeader ?: "")
|
||||
.build()
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue