32 lines
990 B
Kotlin
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)
|
|
}
|
|
}
|
|
}
|