2024-10-20 13:37:03 +11:00
package xyz.maxwellj.chookpen.client
import fuel.Fuel
import fuel.get
import java.io.File
import kotlin.system.exitProcess
import java.math.BigInteger
import java.security.MessageDigest
fun md5 ( input : String ) : String {
val md = MessageDigest . getInstance ( " MD5 " )
return BigInteger ( 1 , md . digest ( input . toByteArray ( ) ) ) . toString ( 16 ) . padStart ( 32 , '0' )
}
suspend fun main ( args : Array < String > ) {
// Variables
var name = " "
var server = " "
var port = " "
var hasHTTPS = " "
var password = " "
2024-10-23 14:40:31 +11:00
var configFile = File ( " ${System.getProperty("user.home")} /chookpen.profile " )
2024-10-20 13:37:03 +11:00
if ( ! configFile . exists ( ) ) {
println ( " You don't have a Chookpen profile set up yet. If you've got a Chookpen profile, type 'l' to login and press enter. Otherwise, just press enter. " )
val userInput = readln ( )
if ( userInput == " l " ) {
println ( " Username: " )
name = readln ( )
println ( " Password: " )
password = readln ( )
2024-10-23 14:40:31 +11:00
val request = Fuel . get ( " http://localhost:7070/api/logintest/username:{ $name }token:{ ${md5(password)} } " ) . body . string ( )
if ( request == " Invalid token " ) {
println ( " Invalid password. Please rerun the program and put in the right password " )
2024-10-20 13:37:03 +11:00
exitProcess ( 1 )
} else {
configFile . createNewFile ( )
2024-10-23 14:40:31 +11:00
configFile . writeText ( " $name : $password :localhost:7070:0 " )
2024-10-20 13:37:03 +11:00
println ( " Logged in! Run the command again to start talking! " )
exitProcess ( 0 )
}
} else {
println ( " Choose a username: " )
val newName = readln ( )
if ( newName == " " ) {
println ( " Please choose a username! Rerun the program and try again " )
exitProcess ( 1 )
println ( " Choose a password: " )
val newPassword = readln ( )
if ( newPassword == " " ) {
println ( " Please choose a password! Rerun the program and try again " )
exitProcess ( 1 )
}
2024-10-23 14:40:31 +11:00
val request = Fuel . get ( " http://localhost:7070/api/createAccount/username:{ $newName }token:{ ${md5(newPassword)} } " ) . body . string ( )
2024-10-20 13:37:03 +11:00
if ( request == " That username already exists on the server! Please choose a different username " ) {
println ( " That username already exists on the server! Rerun the program and choose a different username " )
exitProcess ( 1 )
} else {
configFile . createNewFile ( )
2024-10-23 14:40:31 +11:00
configFile . writeText ( " $newName : $newPassword :localhost:7070:0 " )
2024-10-20 13:37:03 +11:00
println ( " Account created! " )
exitProcess ( 0 )
}
}
}
}
var configStage = 0
for ( char in configFile . readText ( ) ) {
if ( char == ':' ) { configStage ++ }
if ( configStage == 0 ) {
name += char
} else if ( configStage == 1 ) {
password += char
} else if ( configStage == 2 ) {
server += char
} else if ( configStage == 3 ) {
port += char
} else if ( configStage == 4 ) {
hasHTTPS += char
}
}
server = server . replace ( " : " , " " )
port = port . replace ( " : " , " " )
hasHTTPS = hasHTTPS . replace ( " : " , " " )
password = password . replace ( " : " , " " )
// Actual code
println ( " Chookpen Client initialised! " )
println ( " Hello $name @ $server " )
val protocol = " http "
if ( hasHTTPS == " 1 " ) {
val protocol = " https "
}
if ( args . count ( ) == 0 ) {
2024-10-23 14:40:31 +11:00
println ( Fuel . get ( " $protocol :// $server : $port /api/syncmessages/username:{ $name }token:{ ${md5(password)} } " ) . body . string ( ) )
2024-10-20 13:37:03 +11:00
} else {
val message = args [ 0 ]
2024-10-23 14:40:31 +11:00
val isSuccessful = Fuel . get ( " $protocol :// $server : $port /api/send/username:{ $name }token:{ ${md5(password)} }message:{ $message } " ) . body . string ( )
if ( isSuccessful != " Success " ) {
println ( isSuccessful )
}
println ( Fuel . get ( " $protocol :// $server : $port /api/syncmessages/username:{ $name }token:{ ${md5(password)} } " ) . body . string ( ) )
2024-10-20 13:37:03 +11:00
}
exitProcess ( 0 )
}