AmpFire/app/src/main/java/lol/frijole/ampfire/subsonic/SubsonicAuth.kt

32 lines
990 B
Kotlin

package lol.frijole.ampfire.subsonic
import java.math.BigInteger
import java.security.MessageDigest
import java.security.SecureRandom
class SubsonicAuth private constructor(
private val username: String,
private val token: String,
private val salt: String,
) {
fun params(): Map<String, String> = mapOf(
"u" to username,
"t" to token,
"s" to salt,
"v" to "1.16.1",
"c" to "AmpFire",
"f" to "json",
)
fun queryString(): String = params().map { (k, v) -> "$k=${java.net.URLEncoder.encode(v, "UTF-8")}" }.joinToString("&")
companion object {
fun forPassword(username: String, password: String): SubsonicAuth {
val salt = BigInteger(64, SecureRandom()).toString(16)
val digest = MessageDigest.getInstance("MD5").digest((password + salt).toByteArray())
.joinToString("") { "%02x".format(it) }
return SubsonicAuth(username, digest, salt)
}
}
}