Bladeren bron

ADD: update info when reset password

zhangxin 8 jaren geleden
bovenliggende
commit
c832670818

+ 142 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/util/http/HttpXmlClient.java

@@ -0,0 +1,142 @@
+package cn.iselab.mooctest.site.util.http;
+
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.util.*;
+
+import cn.iselab.mooctest.site.models.Worker;
+import org.apache.commons.io.IOUtils;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.NameValuePair;
+import org.apache.http.ParseException;
+import org.apache.http.client.ClientProtocolException;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.client.methods.HttpUriRequest;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.protocol.HTTP;
+import org.apache.http.util.EntityUtils;
+import org.json.JSONObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class HttpXmlClient {
+    private static Logger log = LoggerFactory.getLogger(HttpXmlClient.class);
+
+    public static String post(String url, Map<String, String> params) {
+        DefaultHttpClient httpclient = new DefaultHttpClient();
+        String body = null;
+
+//        log.info("create httppost:" + url);
+        HttpPost post = postForm(url, params);
+
+        body = invoke(httpclient, post);
+
+        httpclient.getConnectionManager().shutdown();
+
+        return body;
+    }
+
+    public static String get(String url) {
+        DefaultHttpClient httpclient = new DefaultHttpClient();
+        String body = null;
+
+//        log.info("create httppost:" + url);
+        HttpGet get = new HttpGet(url);
+        body = invoke(httpclient, get);
+
+        httpclient.getConnectionManager().shutdown();
+
+        return body;
+    }
+
+
+    private static String invoke(DefaultHttpClient httpclient,
+                                 HttpUriRequest httpost) {
+
+        HttpResponse response = sendRequest(httpclient, httpost);
+        String body = paseResponse(response);
+
+        return body;
+    }
+
+    private static String paseResponse(HttpResponse response) {
+//        log.info("get response from http server..");
+        HttpEntity entity = response.getEntity();
+
+//        log.info("response status: " + response.getStatusLine());
+        String charset = EntityUtils.getContentCharSet(entity);
+//        log.info(charset);
+
+        String body = null;
+        try {
+            body = IOUtils.toString(entity.getContent());
+//            log.info(body);
+        } catch (ParseException | IOException e) {
+            log.error("", e);
+        }
+
+        return body;
+    }
+
+    private static HttpResponse sendRequest(CloseableHttpClient httpclient,
+                                            HttpUriRequest httpost) {
+//        log.info("execute post...");
+        HttpResponse response = null;
+
+        try {
+            response = httpclient.execute(httpost);
+        } catch (IOException e) {
+            log.error("", e);
+        }
+        return response;
+    }
+
+    private static HttpPost postForm(String url, Map<String, String> params) {
+
+        HttpPost httpost = new HttpPost(url);
+        List<NameValuePair> nvps = new ArrayList<NameValuePair>();
+
+        Set<String> keySet = params.keySet();
+        for (String key : keySet) {
+            nvps.add(new BasicNameValuePair(key, params.get(key)));
+        }
+
+        try {
+//            log.info("set utf-8 form entity to httppost");
+            httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
+        } catch (UnsupportedEncodingException e) {
+            log.error("", e);
+        }
+
+        return httpost;
+    }
+
+    public static String getToken() {
+        String body = post("https://www.91ctf.com/getAccessToken", new HashMap<>());
+        JSONObject json = new JSONObject(body);
+        if (json.getInt("status") == 200) {
+            log.info("UpdateInfoToken: " + body);
+            return json.getJSONObject("data").getString("token");
+        } else {
+            return null;
+        }
+    }
+
+    public static void updateInfo(String token, Worker worker) {
+        Map<String, String> params = new HashMap<>();
+        params.put("atn", "oauth_updateUserInfo");
+        params.put("access_token", token);
+        params.put("open_id", String.valueOf(worker.getId()));
+        params.put("password", worker.getPassword());
+        log.info("======================= update info =======================");
+        log.info(post("https://www.91ctf.com/oapi", params));
+        log.info("===========================================================");
+    }
+
+}

+ 11 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/impl/AccountLogicImpl.java

@@ -8,6 +8,7 @@ import cn.iselab.mooctest.site.models.Manager;
 import cn.iselab.mooctest.site.models.Worker;
 import cn.iselab.mooctest.site.service.*;
 import cn.iselab.mooctest.site.util.data.EncryptionUtil;
+import cn.iselab.mooctest.site.util.http.HttpXmlClient;
 import cn.iselab.mooctest.site.util.http.RequestUtils;
 import cn.iselab.mooctest.site.util.http.ResponseUtils;
 import cn.iselab.mooctest.site.web.constants.CookieConsts;
@@ -252,8 +253,12 @@ public class AccountLogicImpl extends BaseLogic implements AccountLogic {
             if (userType.equals("worker")) {
                 Worker worker = workerService.getWorkerById(userId);
                 worker.setPassword(EncryptionUtil.encryptMD5(accountVO.getPassword()));
-                workerService.updateWorker(worker);
+                worker = workerService.updateWorker(worker);
                 accountVO.setWorker(workerVOWrapper.wrap(worker));
+
+                // TODO: delete this part after CST
+                updateCSTInfo(worker);
+
             } else if (userType.equals("manager")) {
                 Manager manager = managerService.getManagerById(userId);
                 manager.setPassword(EncryptionUtil.encryptMD5(accountVO.getPassword()));
@@ -269,6 +274,11 @@ public class AccountLogicImpl extends BaseLogic implements AccountLogic {
         return accountVO;
     }
 
+    private void updateCSTInfo(Worker worker) {
+        String token = HttpXmlClient.getToken();
+        HttpXmlClient.updateInfo(token, worker);
+    }
+
     @Override
     public AccountVO login(AccountVO accountVO, HttpServletResponse response) {