From b10c848efe6aab35dd63b6ec20027f96d8e87f46 Mon Sep 17 00:00:00 2001 From: Max Lv Date: Sat, 2 Nov 2013 14:24:47 +0800 Subject: [PATCH] trim strings --- .../github/shadowsocks/ShadowVpnService.scala | 2 +- .../shadowsocks/ShadowsocksService.scala | 2 +- .../scala/com/github/shadowsocks/Utils.scala | 29 ++++++++++++++----- 3 files changed, 24 insertions(+), 9 deletions(-) diff --git a/src/main/scala/com/github/shadowsocks/ShadowVpnService.scala b/src/main/scala/com/github/shadowsocks/ShadowVpnService.scala index 053a38d7..f1b84ac6 100644 --- a/src/main/scala/com/github/shadowsocks/ShadowVpnService.scala +++ b/src/main/scala/com/github/shadowsocks/ShadowVpnService.scala @@ -192,7 +192,7 @@ class ShadowVpnService extends VpnService { if (config.proxy == "198.199.101.152") { val container = getApplication.asInstanceOf[ShadowsocksApplication].tagContainer try { - config = Config.getPublicConfig(container, config) + config = Config.getPublicConfig(getBaseContext, container, config) } catch { case ex: Exception => { notifyAlert(getString(R.string.forward_fail), getString(R.string.service_failed)) diff --git a/src/main/scala/com/github/shadowsocks/ShadowsocksService.scala b/src/main/scala/com/github/shadowsocks/ShadowsocksService.scala index 0f3235e2..580d368b 100644 --- a/src/main/scala/com/github/shadowsocks/ShadowsocksService.scala +++ b/src/main/scala/com/github/shadowsocks/ShadowsocksService.scala @@ -228,7 +228,7 @@ class ShadowsocksService extends Service { if (config.proxy == "198.199.101.152") { val container = getApplication.asInstanceOf[ShadowsocksApplication].tagContainer try { - config = Config.getPublicConfig(container, config) + config = Config.getPublicConfig(getBaseContext, container, config) } catch { case ex: Exception => { notifyAlert(getString(R.string.forward_fail), getString(R.string.service_failed)) diff --git a/src/main/scala/com/github/shadowsocks/Utils.scala b/src/main/scala/com/github/shadowsocks/Utils.scala index 3a959406..4a47d08b 100644 --- a/src/main/scala/com/github/shadowsocks/Utils.scala +++ b/src/main/scala/com/github/shadowsocks/Utils.scala @@ -42,7 +42,7 @@ import android.content.{Intent, SharedPreferences, Context} import android.content.pm.ApplicationInfo import android.content.pm.PackageManager import android.graphics.drawable.{BitmapDrawable, Drawable} -import android.util.Log +import android.util.{Base64, Log} import java.io._ import java.net.{UnknownHostException, InetAddress, NetworkInterface} import org.apache.http.conn.util.InetAddressUtils @@ -55,6 +55,7 @@ import android.provider.Settings import scala.Some import scalaj.http.{Http, HttpOptions} import com.google.tagmanager.Container +import java.security.MessageDigest object Config { val SHADOWSOCKS = "{\"server\": [%s], \"server_port\": %d, \"local_port\": %d, \"password\": %s, \"timeout\": %d}" @@ -117,16 +118,21 @@ object Config { if (container != null) container.refresh() } - def getPublicConfig(container: Container, config: Config): Config = { + def getPublicConfig(context: Context, container: Container, config: Config): Config = { val url = container.getString("proxy_url") - val list = Http(url).option(HttpOptions.connTimeout(1000)).option(HttpOptions.readTimeout(5000)).asString + val sig = Utils.getSignature(context) + val list = Http(url) + .params("sig" -> sig) + .option(HttpOptions.connTimeout(1000)) + .option(HttpOptions.readTimeout(5000)) + .asString val proxies = util.Random.shuffle(list.split('|').toSeq).toSeq val proxy = proxies(0).split(':') - val host = proxy(0) - val port = proxy(1).toInt - val password = proxy(2) - val method = proxy(3) + val host = proxy(0).trim + val port = proxy(1).trim.toInt + val password = proxy(2).trim + val method = proxy(3).trim new Config(config.isGlobalProxy, config.isGFWList, config.isBypassApps, config.isTrafficStat, config.profileName, host, password, method, port, config.localPort, config.proxiedAppString) @@ -287,6 +293,15 @@ object Utils { var data_path: String = null var rootTries = 0 + def getSignature(context: Context): String = { + val info = context + .getPackageManager + .getPackageInfo(context.getPackageName, PackageManager.GET_SIGNATURES) + val mdg = MessageDigest.getInstance("SHA-1") + mdg.update(info.signatures(0).toByteArray) + new String(Base64.encode(mdg.digest, 0)) + } + /* * round or floor depending on whether you are using offsets(floor) or * widths(round)