詹子聪 5 лет назад
Родитель
Сommit
8a48d051e9

+ 22 - 0
app/src/main/java/com/miekir/eden/base/CommonApi.java

@@ -0,0 +1,22 @@
+package com.miekir.eden.base;
+
+
+import com.miekir.eden.bean.IPInfoBean;
+
+import io.reactivex.Observable;
+import retrofit2.http.GET;
+
+/**
+ * Copyright (C), 2019-2020, Miekir
+ *
+ * @author Miekir
+ * @date 2020/9/22 16:10
+ * Description:
+ */
+public interface CommonApi {
+    /**
+     * 提交考试
+     */
+    @GET("https://iplist.cc/api")
+    Observable<IPInfoBean> getIPInfo();
+}

+ 140 - 0
app/src/main/java/com/miekir/eden/bean/IPInfoBean.java

@@ -0,0 +1,140 @@
+package com.miekir.eden.bean;
+
+/**
+ * Copyright (C), 2019-2020, Miekir
+ *
+ * @author Miekir
+ * @date 2020/9/22 16:14
+ * Description:
+ */
+public class IPInfoBean {
+    private String ip;
+    private String registry;
+    private String countrycode;
+    private String countryname;
+    private AsnBean asn;
+    private String detail;
+    private boolean spam;
+    private boolean tor;
+
+    public String getIp() {
+        return ip;
+    }
+
+    public void setIp(String ip) {
+        this.ip = ip;
+    }
+
+    public String getRegistry() {
+        return registry;
+    }
+
+    public void setRegistry(String registry) {
+        this.registry = registry;
+    }
+
+    public String getCountrycode() {
+        return countrycode;
+    }
+
+    public void setCountrycode(String countrycode) {
+        this.countrycode = countrycode;
+    }
+
+    public String getCountryname() {
+        return countryname;
+    }
+
+    public void setCountryname(String countryname) {
+        this.countryname = countryname;
+    }
+
+    public AsnBean getAsn() {
+        return asn;
+    }
+
+    public void setAsn(AsnBean asn) {
+        this.asn = asn;
+    }
+
+    public String getDetail() {
+        return detail;
+    }
+
+    public void setDetail(String detail) {
+        this.detail = detail;
+    }
+
+    public boolean isSpam() {
+        return spam;
+    }
+
+    public void setSpam(boolean spam) {
+        this.spam = spam;
+    }
+
+    public boolean isTor() {
+        return tor;
+    }
+
+    public void setTor(boolean tor) {
+        this.tor = tor;
+    }
+
+    public static class AsnBean {
+        private String code;
+        private String name;
+        private String route;
+        private String start;
+        private String end;
+        private String count;
+
+        public String getCode() {
+            return code;
+        }
+
+        public void setCode(String code) {
+            this.code = code;
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public String getRoute() {
+            return route;
+        }
+
+        public void setRoute(String route) {
+            this.route = route;
+        }
+
+        public String getStart() {
+            return start;
+        }
+
+        public void setStart(String start) {
+            this.start = start;
+        }
+
+        public String getEnd() {
+            return end;
+        }
+
+        public void setEnd(String end) {
+            this.end = end;
+        }
+
+        public String getCount() {
+            return count;
+        }
+
+        public void setCount(String count) {
+            this.count = count;
+        }
+    }
+}

+ 15 - 0
app/src/main/java/com/miekir/eden/constant/EdenError.java

@@ -1,5 +1,7 @@
 package com.miekir.eden.constant;
 
+import android.text.TextUtils;
+
 import com.miekir.eden.R;
 import com.miekir.eden.tool.StringTool;
 import com.miekir.network.constant.Code;
@@ -25,6 +27,7 @@ public class EdenError extends Code {
     public static final int FAILED_USER_NOT_EXIST = -3;
     public static final int REST_TIME = -4;
     public static final int PERMISSION_DENIED = -5;
+    public static final int REGION_INVALID = -6;
 
     public static final int FAILED_NEED_RE_LOGIN = -99;
     private EdenError() {}
@@ -36,8 +39,20 @@ public class EdenError extends Code {
                 return StringTool.getString(R.string.response_permission_denied);
             case REST_TIME:
                 return StringTool.getString(R.string.err_rest_time);
+
+            case REGION_INVALID:
+                return StringTool.getString(R.string.login_area_not_support);
             default:
                 return "";
         }
     }
+
+    public static String getString(int code, String defaultString) {
+        String explicitMessage = getString(code);
+        if (!TextUtils.isEmpty(explicitMessage)) {
+            return explicitMessage;
+        }
+
+        return defaultString;
+    }
 }

+ 27 - 0
app/src/main/java/com/miekir/eden/exception/BeiException.java

@@ -0,0 +1,27 @@
+package com.miekir.eden.exception;
+
+/**
+ * Copyright (C), 2019-2020, Miekir
+ *
+ * @author Miekir
+ * @date 2020/9/22 16:34
+ * Description: 异常处理类
+ */
+public class BeiException extends Exception {
+
+    private int code;
+
+
+    public BeiException(int code, String message) {
+        super(message);
+        this.code = code;
+    }
+
+    public int getCode() {
+        return code;
+    }
+
+    public void setCode(int code) {
+        this.code = code;
+    }
+}

+ 3 - 1
app/src/main/java/com/miekir/eden/ui/mine/login/LoginActivity.java

@@ -14,6 +14,7 @@ import com.miekir.eden.base.BaseBeiActivity;
 import com.miekir.eden.bean.BeiUser;
 import com.miekir.eden.bean.SystemBean;
 import com.miekir.eden.constant.ConstantString;
+import com.miekir.eden.constant.EdenError;
 import com.miekir.eden.manager.EdenManager;
 import com.miekir.eden.tool.StringTool;
 import com.miekir.eden.ui.TabActivity;
@@ -136,7 +137,8 @@ public class LoginActivity extends BaseBeiActivity implements View.OnClickListen
             systemPresenter.getSystemConfig();
         } else {
             dismissLoading();
-            ToastTool.showShort(StringTool.getString(R.string.login_fail));
+            String loginError = EdenError.getString(code, StringTool.getString(R.string.login_fail));
+            ToastTool.showShort(loginError);
         }
     }
 

+ 27 - 3
app/src/main/java/com/miekir/eden/ui/mine/login/LoginPresenter.java

@@ -1,12 +1,20 @@
 package com.miekir.eden.ui.mine.login;
 
+import android.text.TextUtils;
+
+import com.miekir.eden.R;
 import com.miekir.eden.base.ApiService;
+import com.miekir.eden.base.CommonApi;
 import com.miekir.eden.bean.BeiUser;
+import com.miekir.eden.constant.ConstantString;
 import com.miekir.eden.constant.EdenError;
+import com.miekir.eden.exception.BeiException;
 import com.miekir.eden.net.RetrofitHelper;
+import com.miekir.eden.tool.StringTool;
 import com.miekir.mvp.presenter.BasePresenter;
 import com.miekir.network.core.base.BaseObserver;
 
+import io.reactivex.Observable;
 import io.reactivex.android.schedulers.AndroidSchedulers;
 import io.reactivex.schedulers.Schedulers;
 
@@ -19,8 +27,20 @@ public class LoginPresenter extends BasePresenter<ILoginView> {
 
     public void submitLogin(String email, String password) {
         RetrofitHelper.getInstance()
-                .getRequestApi(ApiService.class)
-                .loginOrRegister(email, password)
+                .getRequestApi(CommonApi.class)
+                .getIPInfo()
+                .flatMap(ipInfo -> {
+                    // 暂不支持中国地区
+                    if (!TextUtils.equals(email, ConstantString.NAME_ADMIN)) {
+                        if ((ipInfo == null || TextUtils.equals("CN", ipInfo.getCountrycode()))) {
+                            return Observable.error(new BeiException(EdenError.REGION_INVALID, StringTool.getString(R.string.login_area_not_support)));
+                        }
+                    }
+
+                    return RetrofitHelper.getInstance()
+                        .getRequestApi(ApiService.class)
+                        .loginOrRegister(email, password);
+                    })
                 .subscribeOn(Schedulers.io())
                 .observeOn(AndroidSchedulers.mainThread())
                 .subscribe(new BaseObserver<BeiUser>() {
@@ -34,7 +54,11 @@ public class LoginPresenter extends BasePresenter<ILoginView> {
                     @Override
                     public void onFailure(int code, Throwable e, String errMsg) {
                         if (getView() != null) {
-                            getView().onLoginResult(null, EdenError.COMMON);
+                            if (e instanceof BeiException) {
+                                getView().onLoginResult(null, ((BeiException) e).getCode());
+                            } else {
+                                getView().onLoginResult(null, EdenError.COMMON);
+                            }
                         }
                     }
                 });

+ 1 - 0
app/src/main/res/values-zh-rCN/strings.xml

@@ -107,4 +107,5 @@
     <string name="resource_copied">已拷贝链接</string>
     <string name="text_loading">加载中...</string>
     <string name="login_attention">注意:本应用仅对非中国地区开放</string>
+    <string name="login_area_not_support">暂不支持当前区域</string>
 </resources>

+ 1 - 0
app/src/main/res/values/strings.xml

@@ -107,4 +107,5 @@
     <string name="resource_copied">Resource url copied</string>
     <string name="text_loading">Loading...</string>
     <string name="login_attention">Only open to non-Chinese regions</string>
+    <string name="login_area_not_support">Current region is not supported</string>
 </resources>