Skip to content
Snippets Groups Projects
Commit c2c41c40 authored by Jawnnypoo's avatar Jawnnypoo
Browse files

Fix md5 hash for Gravatar URLs

parent 28397783
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -2,33 +2,12 @@ package com.commit451.gitlab.util
 
import android.net.Uri
 
import com.commit451.gitlab.ssl.X509Util
import java.io.UnsupportedEncodingException
import java.net.URLEncoder
import java.nio.charset.Charset
import java.security.MessageDigest
import java.security.NoSuchAlgorithmException
object Gravatar {
 
@JvmOverloads
fun init(email: String? = null): Builder {
return Builder(email)
}
 
private fun md5(raw: String): String {
try {
val digest = MessageDigest.getInstance("MD5")
digest.update(raw.toByteArray(Charset.forName("UTF-8")))
return X509Util.hexify(digest.digest())
} catch (e: NoSuchAlgorithmException) {
throw IllegalStateException(e)
}
}
class Builder constructor(private val mEmail: String?) {
 
private var mSSL = false
Loading
Loading
@@ -79,7 +58,7 @@ object Gravatar {
uriBuilder.append("http://www.gravatar.com/avatar/")
}
if (mEmail != null) {
uriBuilder.append(md5(mEmail))
uriBuilder.append(Hash.md5(mEmail))
} else {
uriBuilder.append("00000000000000000000000000000000")
}
Loading
Loading
@@ -101,7 +80,7 @@ object Gravatar {
queryBuilder.append("&r=").append(mRating)
}
val query = queryBuilder.toString()
if (query.length > 0) {
if (query.isNotEmpty()) {
uriBuilder.append("?").append(query.substring(1))
}
 
Loading
Loading
@@ -109,10 +88,6 @@ object Gravatar {
}
}
 
enum class Rating {
G, PG, R, X
}
enum class DefaultImage {
_404, MYSTERY_MAN, IDENTICON, MONSTERID, WAVATAR, RETRO, BLANK
}
Loading
Loading
package com.commit451.gitlab.util
import java.io.UnsupportedEncodingException
import java.security.MessageDigest
import java.security.NoSuchAlgorithmException
/**
* Modified from https://github.com/mcxiaoke/kotlin-koi
*/
object Hash {
private val MD5 = "MD5"
private val SHA_1 = "SHA-1"
private val SHA_256 = "SHA-256"
private val DIGITS_LOWER = charArrayOf('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f')
private val DIGITS_UPPER = charArrayOf('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F')
fun md5(data: ByteArray): String {
return String(encodeHex(md5Bytes(data)))
}
fun md5(text: String): String {
return String(encodeHex(md5Bytes(getRawBytes(text))))
}
fun md5Bytes(data: ByteArray): ByteArray {
return getDigest(MD5).digest(data)
}
fun sha1(data: ByteArray): String {
return String(encodeHex(sha1Bytes(data)))
}
fun sha1(text: String): String {
return String(encodeHex(sha1Bytes(getRawBytes(text))))
}
fun sha1Bytes(data: ByteArray): ByteArray {
return getDigest(SHA_1).digest(data)
}
fun sha256(data: ByteArray): String {
return String(encodeHex(sha256Bytes(data)))
}
fun sha256(text: String): String {
return String(encodeHex(sha256Bytes(getRawBytes(text))))
}
fun sha256Bytes(data: ByteArray): ByteArray {
return getDigest(SHA_256).digest(data)
}
fun getDigest(algorithm: String): MessageDigest {
try {
return MessageDigest.getInstance(algorithm)
} catch (e: NoSuchAlgorithmException) {
throw IllegalArgumentException(e)
}
}
fun encodeHex(data: ByteArray, toLowerCase: Boolean = true): CharArray {
return encodeHex(data, if (toLowerCase) DIGITS_LOWER else DIGITS_UPPER)
}
fun encodeHex(data: ByteArray, toDigits: CharArray): CharArray {
val l = data.size
val out = CharArray(l shl 1)
var i = 0
var j = 0
while (i < l) {
out[j++] = toDigits[(240 and data[i].toInt()).ushr(4)]
out[j++] = toDigits[15 and data[i].toInt()]
i++
}
return out
}
fun getRawBytes(text: String): ByteArray {
try {
return text.toByteArray(Charsets.UTF_8)
} catch (e: UnsupportedEncodingException) {
return text.toByteArray()
}
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment