package com.huahuan.weibo;
import com.huahuan.servletutil.ServletUtil;
import com.huahuan.table.Yhb;
import com.huahuan.tools.MD5;
import com.huahuan.tools.UserUtil;
import java.io.IOException;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.jplus.hyb.database.Hyberbin;
import weibo4j.Account;
import weibo4j.Oauth;
import weibo4j.Users;
import weibo4j.http.AccessToken;
import weibo4j.model.User;
import weibo4j.org.json.JSONObject;
/**
*
* @author Hyberbin
*/
@WebServlet(name = "SinaLogin", urlPatterns = {"/SinaLogin.jsp", "/SinaLoginHSOJ/*"})
public class SinaLogin extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
execute(ServletUtil.setModel(request.getParameter("mode"), this), request, response);
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Handles the HTTP
* <code>POST</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Returns a short description of the servlet.
*
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
public String login(HttpServletRequest request, HttpServletResponse response) {
String url = "https://api.weibo.com/oauth2/authorize?client_id=4192697754&response_type=code&redirect_uri=http://opdps.hbnu.edu.cn/SinaLogin.jsp";
String user = hsojLogin(request, request.getSession());
if (user != null) {
url = url.replace("SinaLogin.jsp", "/SinaLoginHSOJ/" + user);
}
try {
response.sendRedirect(url);
} catch (Exception e) {
}
return "redirect:/index.jsp";
}
public String sina(HttpServletRequest request, HttpServletResponse response) {
String code = request.getParameter("code");
String notice = null;
String redirect = "/index.jsp";
if (code != null && !code.trim().equals("")) {
Oauth oauth = new Oauth();
try {
AccessToken accessTokenByCode = oauth.getAccessTokenByCode(code);
Users um = new Users();
um.client.setToken(accessTokenByCode.getAccessToken());
Account am = new Account();
am.client.setToken(accessTokenByCode.getAccessToken());
JSONObject uid = am.getUid();
User user = um.showUserById(uid.get("uid").toString());
Yhb sinaYh = UserUtil.getSinaYh(user.getId());
if (sinaYh.getId() == null) {
boolean registerBySina = UserUtil.registerBySina(user);
if (registerBySina) {
notice = "已经用您的新浪账号在HSOJ上注册账号,您以后可以使用新浪微博登录HSOJ!您还可以在个人信息里面与原来的HSOJ账号绑定!";
login(request, request.getSession(), UserUtil.getSinaYh(user.getId()));
// HsojLogger.log(request, "用微博账号注册并登录");
redirect = "/user/bangding.jsp";
} else {
notice = "用您的新浪账号在HSOJ上注册账号注册失败!";
// HsojLogger.log(request, "用微博账号注册失败");
}
} else {
login(request, request.getSession(), sinaYh);
}
} catch (Exception e) {
notice = "没有登录新浪微博!";
// LoggerManage.logger.getLogger(request, "用微博账号登录失败", e);
}
} else {
notice = "没有登录新浪微博!";
// HsojLogger.log(request, "用微博账号登录失败");
}
// setNotice(request, notice);
return "redirect:" + redirect;
}
public void execute(int event, HttpServletRequest request, HttpServletResponse response) {
}
//以下方法为第三方登录通用的方法
public void login(HttpServletRequest request, HttpSession session, Yhb yhb) {
session.setAttribute("yhb", yhb);
Hyberbin hyberbin = new Hyberbin(yhb);
//修改最后登录时间
SimpleDateFormat ss = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String composetime = ss.format(new java.util.Date());
Timestamp sj = Timestamp.valueOf(composetime);
yhb.setZhdlsj(sj);
hyberbin.updateByKey("id");
//关于权限的部分
// if (PowerManager.getPower(request, PowerManager.HTGL)) {
// session.setAttribute("power", PowerManager.HTGL);
// }
// if (PowerManager.getPower(request, PowerManager.CKDM)) {
// session.setAttribute("ckdm", PowerManager.CKDM);
// }
session.setAttribute("weibo", yhb);
// String notice = null;
/**
* *******绑定功能暂时取消**********
*/
// Yhb logined = isHsojLogin(request);
// if (logined != null) {
//微博(QQ或者新浪)绑定
// boolean qqToYhb = UserUtil.weiboToyhb(logined, yhb);
// notice = "登录并绑定" + (qqToYhb ? "成功!" : "失败!");
// HsojLogger.log(request, "登录并绑定微博");
// } else {
// HsojLogger.log(request, "用微博账号登录");
// }
/**
* *******跳转取消*******
*/
// try {
// setNotice(request, notice);
// response.sendRedirect(request.getContextPath() + "/tz.jsp");
// } catch (IOException ex) {
// Logger.getLogger(QqLogin.class.getName()).log(Level.SEVERE, null, ex);
// }
}
public String hsojLogin(HttpServletRequest request, HttpSession session) {
//if (GetAdm.getCode(request, "code")) {
Yhb test = (Yhb) session.getAttribute("yhb");
if (test == null || test.getId() == null) {
return null;
} else {
Yhb yhb = new Yhb();
String yhm = request.getParameter("username");
String pass = request.getParameter("password");
Hyberbin hyberbin = new Hyberbin(yhb);
pass = MD5.md5(pass);//这里pass是null
hyberbin.addParmeter(yhm).addParmeter(yhm).addParmeter(yhm).addParmeter(pass);
hyberbin.showOne("select * from yhb where (yhm=? or yx=? ) and mm=?");
if (yhb.getId() != null) {
return yhb.getId() + "_" + yhb.getMm();
}
}
return null;
}
private Yhb isHsojLogin(HttpServletRequest request) {
String l = null, p = null;
String url = request.getRequestURL().toString();
if (url != null && url.contains("huahuan/")) {
url = url.substring(url.lastIndexOf("huahuan/") + "huahuan/".length());
String[] split = url.split("_");
l = split[0];
p = split[1];
}
if (l != null && p != null) {
Yhb yhb = new Yhb();
String yhid_str = l;
Integer yhid_int = 0;
try {
yhid_int = Integer.parseInt(yhid_str);
} catch (NumberFormatException numberFormatException) {
}
String pass = p;
if (yhid_int == null || yhid_int == 0 || pass == null || pass.trim().equals("")) {
return null;
} else {
yhb.setId(yhid_int);
Hyberbin hyberbin = new Hyberbin(yhb);
hyberbin.addParmeter(yhid_int).addParmeter(pass);
hyberbin.showOne("select * from yhb where id=? and mm=?");
if (yhb.getYhm() != null) {
return yhb;
}
}
}
return null;
}
}