diff --git a/app/src/main/java/com/gh/base/AppController.java b/app/src/main/java/com/gh/base/AppController.java index dc9ee5c015..31cecf79d1 100644 --- a/app/src/main/java/com/gh/base/AppController.java +++ b/app/src/main/java/com/gh/base/AppController.java @@ -16,7 +16,6 @@ import com.gh.common.util.DataUtils; import com.gh.common.util.StringUtils; import com.gh.common.util.TokenUtils; import com.gh.gamecenter.BuildConfig; -import com.gh.gamecenter.statistics.AppTrafficUtils; import com.leon.channel.helper.ChannelReaderUtil; import com.lightgame.config.CommonDebug; import com.lightgame.utils.Utils; @@ -216,7 +215,7 @@ public class AppController extends MultiDexApplication { // 启用EventBus3.0加速功能 EventBus.builder().addIndex(new EventBusIndex()).installDefaultEventBus(); - AppTrafficUtils.appTraffic(this); //流量统计 +// AppTrafficUtils.appTraffic(this); //流量统计 } private boolean shouldInit() { diff --git a/app/src/main/java/com/gh/common/constant/Config.java b/app/src/main/java/com/gh/common/constant/Config.java index 425a4bbb94..649381c205 100644 --- a/app/src/main/java/com/gh/common/constant/Config.java +++ b/app/src/main/java/com/gh/common/constant/Config.java @@ -35,6 +35,9 @@ public class Config { public static final String UMENG_APPKEY = BuildConfig.UMENG_APPKEY; public static final String UMENG_MESSAGE_SECRET = BuildConfig.UMENG_MESSAGE_SECRET; + public static final String APP_SECRET = "597e9c59dcd026000d782101"; // 登录验证 + public static final String APP_ID = "2201146978"; // 登录验证 + public static boolean isShow(Context context) { SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context); return sp.getBoolean("isShow", true); diff --git a/app/src/main/java/com/gh/common/util/HMACUtils.java b/app/src/main/java/com/gh/common/util/HMACUtils.java new file mode 100644 index 0000000000..4940b04bf6 --- /dev/null +++ b/app/src/main/java/com/gh/common/util/HMACUtils.java @@ -0,0 +1,36 @@ +package com.gh.common.util; + +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; + +public class HMACUtils { + + public static String encrypt(String data, String key) { + try { + SecretKeySpec signingKey = new SecretKeySpec(key.getBytes(), "HmacSHA256"); + Mac mac = Mac.getInstance("HmacSHA256"); + mac.init(signingKey); + return byte2hex(mac.doFinal(data.getBytes())); + } catch (NoSuchAlgorithmException | InvalidKeyException e) { + e.printStackTrace(); + } + return null; + } + + private static String byte2hex(byte[] ciphertext) { + StringBuilder builder = new StringBuilder(); + String stmp; + for (int i = 0; ciphertext != null && i < ciphertext.length; i++) { + stmp = Integer.toHexString(ciphertext[i] & 0XFF); + if (stmp.length() == 1) { + builder.append('0'); + } + builder.append(stmp); + } + return builder.toString().toLowerCase(); + } + +} diff --git a/app/src/main/java/com/gh/common/util/LoginUtils.java b/app/src/main/java/com/gh/common/util/LoginUtils.java index 56f7fdcdd7..6068cd6734 100644 --- a/app/src/main/java/com/gh/common/util/LoginUtils.java +++ b/app/src/main/java/com/gh/common/util/LoginUtils.java @@ -143,6 +143,7 @@ public class LoginUtils { ResponseBody responseBody = e.response().errorBody(); try { String string = responseBody.string(); + Utils.log("=======" + string); JSONObject content = new JSONObject(string); int code = content.getInt("code"); switch (code) { diff --git a/app/src/main/java/com/gh/gamecenter/retrofit/OkHttpCacheInterceptor.java b/app/src/main/java/com/gh/gamecenter/retrofit/OkHttpCacheInterceptor.java index b793a37ee5..827eef127d 100644 --- a/app/src/main/java/com/gh/gamecenter/retrofit/OkHttpCacheInterceptor.java +++ b/app/src/main/java/com/gh/gamecenter/retrofit/OkHttpCacheInterceptor.java @@ -2,18 +2,29 @@ package com.gh.gamecenter.retrofit; import android.content.Context; +import com.gh.common.constant.Config; import com.gh.common.util.GzipUtils; +import com.gh.common.util.HMACUtils; import com.gh.common.util.NetworkUtils; +import com.gh.common.util.StringUtils; import com.gh.common.util.TimestampUtils; +import com.lightgame.utils.Utils; import java.io.IOException; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Set; import okhttp3.CacheControl; +import okhttp3.HttpUrl; import okhttp3.Interceptor; import okhttp3.MediaType; import okhttp3.Request; import okhttp3.Response; import okhttp3.ResponseBody; +import okio.Buffer; /** * Created by LGT on 2016/11/8. @@ -52,19 +63,62 @@ class OkHttpCacheInterceptor implements Interceptor { // Utils.log(String.format("Interceptor Sending request %s on %s%n%s", // request.url(), chain.connection(), request.headers())); - Response response = chain.proceed(request); + Response response; + if (request.url().toString().contains(Config.USERSEA_HOST)) { - // 去除timestamp拿缓存 - url = response.request().url().toString(); - if (response.code() == 504 && url.contains("timestamp")) { - byte[] data = OkHttpCache.getCache(mContext, TimestampUtils.removeTimestamp(url)); - if (data != null) { - data = GzipUtils.decompressBytes(data); - response = response.newBuilder() - .code(200) - .message("OK") - .body(ResponseBody.create(MediaType.parse("application/json"), data)) - .build(); + if (url.contains("?")) { + url += "&app_id=" + Config.APP_ID; + } else { + url += "?app_id=" + Config.APP_ID; + } + + String body = ""; + if (request.body() != null && request.body().contentLength() > 0) { + Buffer buffer = new Buffer(); + request.body().writeTo(buffer); + body = buffer.readUtf8(); + } + + Set paramsSet = HttpUrl.parse(url).queryParameterNames(); + StringBuilder params = new StringBuilder(); + params.append("#"); + if (paramsSet.size() != 0) { + List paramsList = new ArrayList<>(); + paramsList.addAll(paramsSet); + Collections.sort(paramsList); + for (String s : paramsList) { + params.append(s); + params.append("="); + params.append(HttpUrl.parse(url).queryParameter(s)); + } + } + + String str = StringUtils.buildString(request.method(), "#", url.split("//")[1].split("\\?")[0], params.toString(), "#", body); + String encode = URLEncoder.encode(str); + String signature = HMACUtils.encrypt(encode, "&" + Config.APP_SECRET + "#"); + + request = request.newBuilder() + .addHeader("Authorization", "SIGNATURE-V2 " + signature) + .url(url) + .build(); + + response = chain.proceed(request); + Utils.log("Authorization::" + str + "\n" + url + "\n" + signature + "\n" + encode + "\n" + Config.APP_SECRET); + } else { + response = chain.proceed(request); + + // 去除timestamp拿缓存 + url = response.request().url().toString(); + if (response.code() == 504 && url.contains("timestamp")) { + byte[] data = OkHttpCache.getCache(mContext, TimestampUtils.removeTimestamp(url)); + if (data != null) { + data = GzipUtils.decompressBytes(data); + response = response.newBuilder() + .code(200) + .message("OK") + .body(ResponseBody.create(MediaType.parse("application/json"), data)) + .build(); + } } } diff --git a/gradle.properties b/gradle.properties index 80e52636a5..b87ecc4d97 100644 --- a/gradle.properties +++ b/gradle.properties @@ -46,7 +46,7 @@ DEV_LIBAO_HOST=http\://dev.libao.ghzs666.com/v1d2/ DEV_MESSAGE_HOST=http\://dev.message.ghzs666.com/v1d1/ DEV_USER_HOST=http\://dev.user.ghzs666.com/v1d2/ DEV_COMMENT_HOST=http\://dev.comment.ghzs666.com/v1d2/ -DEV_USERSEA_HOST=http\://dev.usersea.ghzs666.com/v1d0/ +DEV_USERSEA_HOST=http\://usersea.ghzs666.com/v1d0/ API_HOST=http\://api.ghzs666.com/v2d6/ DATA_HOST=http\://data.ghzs666.com/ @@ -54,4 +54,4 @@ LIBAO_HOST=http\://libao.ghzs666.com/v1d2/ MESSAGE_HOST=http\://message.ghzs666.com/v1d0/ USER_HOST=http\://user.ghzs666.com/v1d2/ COMMENT_HOST=http\://comment.ghzs666.com/v1d2/ -USERSEA_HOST=http\://usersea.ghzs666.com/ +USERSEA_HOST=http\://usersea.ghzs666.com/v1d0/