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.

161 lines
6.3 KiB

package org.wntr.mdeditor
import android.net.Uri
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import android.util.Log
import android.view.View
import android.widget.Toast
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.wntr.mdeditor.MainActivity.Companion.ghostConnection
import org.wntr.mdeditor.databinding.ActivityLoginBinding
import org.wntr.mdeditor.R
class LoginActivity : AppCompatActivity() {
private lateinit var binding: ActivityLoginBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val creds = MainActivity.credManager.loadCredentialsFromSharedPrefs()
binding = ActivityLoginBinding.inflate(layoutInflater)
setContentView(binding.root)
if (creds.instance != "nowhere") binding.instance.setText(creds.instance)
if (creds.username != "nobody") binding.username.setText(creds.username)
}
fun onButtonLoginClick(view: View) {
Log.d(javaClass.simpleName,"entered: instance: ${binding.instance.text} username:${binding.username.text}")
val creds= Credentials(binding.instance.text.toString(), binding.username.text.toString(), binding.password.text.toString())
registerGhost(creds)
}
fun registerGhost(credentials: Credentials){
if (Uri.parse(credentials.instance).scheme == null) {
Toast.makeText(
this@LoginActivity,
"Scheme wrong. Add https://",
Toast.LENGTH_SHORT
).show()
MainActivity.credManager.saveCredentialsToSharedPrefs(
Credentials(
"nowhere",
credentials.username
)
)
return
}
MainActivity.api = ghostAPI(applicationContext, credentials.instance)
CoroutineScope(Dispatchers.Main).launch {
withContext(Dispatchers.IO) {
var result =""
try {
result = MainActivity.api.register(credentials)
} catch (e: ExceptionInInitializerError) {
this@LoginActivity.runOnUiThread(Runnable() {
Toast.makeText(
this@LoginActivity,
"Probably host name wrong",
Toast.LENGTH_SHORT
).show()
})
Log.i(javaClass.simpleName, "Probably host name wrong")
MainActivity.credManager.saveCredentialsToSharedPrefs(
Credentials(
"nowhere",
credentials.username,
"nothing"
)
)
finishAffinity()
} catch (e: NoClassDefFoundError) {
this@LoginActivity.runOnUiThread(Runnable() {
Toast.makeText(
this@LoginActivity,
"API client needs restart for setting hostname",
Toast.LENGTH_SHORT
).show()
})
Log.i(javaClass.simpleName, "API client needs restart for setting hostname")
finishAffinity()
}
when (result) {
"PASSWORD_INCORRECT" -> {
this@LoginActivity.runOnUiThread(Runnable() {
Toast.makeText(
this@LoginActivity,
"Password Incorrect",
Toast.LENGTH_SHORT
).show()
})
Log.i(javaClass.simpleName, "Password Incorrect")
MainActivity.credManager.saveCredentialsToSharedPrefs(
Credentials(
credentials.instance,
credentials.username,
"nothing"
)
)
}
"404" -> {
this@LoginActivity.runOnUiThread(Runnable() {
Toast.makeText(
this@LoginActivity,
"Username nonexistant",
Toast.LENGTH_SHORT
).show()
})
Log.i(javaClass.simpleName,"Username nonexistant")
MainActivity.credManager.saveCredentialsToSharedPrefs(
Credentials(
credentials.instance,
"nobody",
"nothing"
)
)
}
"SUCCESS" -> {
MainActivity.credManager.saveCredentialsToSharedPrefs(credentials)
ghostConnection = true
this@LoginActivity.runOnUiThread(Runnable() {
Toast.makeText(
this@LoginActivity,
"Successfully logged in!",
Toast.LENGTH_SHORT
).show()
})
finish()
}
else -> {
this@LoginActivity.runOnUiThread(Runnable() {
Toast.makeText(
this@LoginActivity,
"Credentials wrong",
Toast.LENGTH_SHORT
).show()
})
Log.i(javaClass.simpleName, "Credentials wrong")
MainActivity.credManager.saveCredentialsToSharedPrefs(
Credentials(
"nowhere",
"nobody",
"nothing"
)
)
}
}
}
}
}
}