package com.chickling.models; import com.chickling.sqlite.ConnectionManager; import com.chickling.bean.job.User; import com.chickling.util.YamlLoader; import com.facebook.presto.hive.$internal.org.apache.commons.lang3.exception.ExceptionUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import java.io.UnsupportedEncodingException; import java.security.NoSuchAlgorithmException; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; /** * Created by jw6v on 2015/12/1. */ public class Auth { private final String GetgidAdminSql="Select * From User INNER JOIN User_Login on User.UID=User_Login.UID where User_Login.Token=? AND LogoutTime is null;"; private static final String CheckJob="SELECT JobOwner FROM Job WHERE JobID=?;"; private static final String CheckTable="SELECT JobOutput FROM Job_History INNER JOIN Job_Log ON Job_History.JobLog=Job_Log.JLID WHERE Job_History.JobOwner=?;"; private static final String CheckChartBuilder="SELECT ChartBuilder from User INNER JOIN User_Login on User.UID=User_Login.UID where User_Login.Token=?"; private static final String CheckSchedule="SELECT ScheduleOwner FROM Schedule WHERE ScheduleID=?;"; private static final String checkGroup="Select Gid from User_Login INNER JOIN User ON User.UID=User_Login.UID where Token= ? INTERSECT Select Gid from Job INNER JOIN USER ON Job.JobOwner=User.UID where JobID=?"; private static final String getJobIDfromJH="Select JobID from Job_History where JHID=?"; public Auth(){} /*Log4J*/ Logger log = LogManager.getLogger(Auth.class); public User verify2(String token) throws SQLException{ User user=new User(); PreparedStatement stat = null; ResultSet rs = null; stat = ConnectionManager.getInstance().getConnection().prepareStatement(GetgidAdminSql); stat.setString(1, token); rs=stat.executeQuery(); if(rs != null && rs.next()){ int permission=0; if(rs.getBoolean("Admin")) permission=2; else if(rs.getBoolean("General")) permission=0; else permission=1; user.setPermission(permission); user.setGroupID(rs.getInt("Gid")); user.setUserID(rs.getInt("UID")); user.setUserName(rs.getString("UserName")); user.setLogIn(true); } else{ user.setLogIn(false); } rs.close(); stat.close(); return user; } public ArrayList<Object> verify(String token) throws SQLException{ ArrayList<Object> rtn =new ArrayList<Object>(); PreparedStatement stat = null; ResultSet rs = null; stat = ConnectionManager.getInstance().getConnection().prepareStatement(GetgidAdminSql); stat.setString(1, token); rs=stat.executeQuery(); if(rs != null && rs.next()){ int permission=0; if(rs.getBoolean("Admin")) permission=2; else if(rs.getBoolean("General")) permission=0; else permission=1; rtn.add(0, permission); rtn.add(1, rs.getInt("Gid")); rtn.add(2, rs.getInt("UID")); rtn.add(3, rs.getString("UserName")); rtn.add(4, true);//login } else{ rtn.add(0,""); rtn.add(1,""); rtn.add(2,""); rtn.add(3,""); rtn.add(4, false); } rs.close(); stat.close(); return rtn; } public Boolean jobMatch(String token , String JobID) throws SQLException{ PreparedStatement stat = null; ResultSet rs = null; stat = ConnectionManager.getInstance().getConnection().prepareStatement(CheckJob); stat.setString(1, JobID); rs=stat.executeQuery(); ArrayList<Object> UserInfo = verify(token); int permission=(Integer)UserInfo.get(0); if(rs != null && rs.next()){ Boolean rtn=((permission==2)||(rs.getInt("JobOwner")==((Integer) UserInfo.get(2)))); stat.close(); return rtn; } else{ stat.close(); return false; } } public Boolean groupMatch(String token , int JobID) throws SQLException{ //todo int gid=0; PreparedStatement stat = null; ResultSet rs = null; stat = ConnectionManager.getInstance().getConnection().prepareStatement(checkGroup); stat.setString(1, token); stat.setInt(2, JobID); rs=stat.executeQuery(); while(rs.next()){ gid=rs.getInt("Gid"); } rs.close(); stat.close(); return !(gid==0); } public Boolean groupMatchwithJHid(String token , int JHID) throws SQLException{ PreparedStatement stat = null; ResultSet rs = null; stat = ConnectionManager.getInstance().getConnection().prepareStatement(getJobIDfromJH); stat.setInt(1, JHID); rs=stat.executeQuery(); int jobID=rs.getInt("JobID"); return groupMatch(token,jobID); } public Boolean tableMatch(String token , String TableName) throws SQLException{ PreparedStatement stat = null; ResultSet rs = null; stat = ConnectionManager.getInstance().getConnection().prepareStatement(CheckTable); stat.setString(1, TableName); rs=stat.executeQuery(); Boolean rtn=false; User UserInfo = verify2(token); int permission=UserInfo.getPermission(); if(permission==2) { return true; } else if(rs != null){ while(rs.next()) { rtn = (rtn|| (rs.getString("JobOutput").contains(TableName))); } stat.close(); return rtn; } else{ stat.close(); return false; } } public Boolean scheduleMatch(String token , String JobID) throws SQLException{ PreparedStatement stat = null; ResultSet rs = null; stat = ConnectionManager.getInstance().getConnection().prepareStatement(CheckSchedule); stat.setString(1, JobID); rs=stat.executeQuery(); ArrayList<Object> UserInfo = verify(token); int permission=(Integer)UserInfo.get(0); if(rs != null && rs.next()){ Boolean rtn=(permission==2)||(rs.getInt("ScheduleOwner")==((Integer)UserInfo.get(2))); stat.close(); return rtn; } else{ stat.close(); return false; } } public String generateDownloadToken(int jobrunid){ AccountManager am=new AccountManager(); String token=""; try { token=am.sha256(YamlLoader.instance.getDownloadToken() + String.valueOf(jobrunid)); } catch (NoSuchAlgorithmException e) { log.error(ExceptionUtils.getStackTrace(e)); } catch (UnsupportedEncodingException e) { log.error(ExceptionUtils.getStackTrace(e)); } return token; } public Boolean checkChartBuilder(String token) throws SQLException{ PreparedStatement stat = null; ResultSet rs = null; stat = ConnectionManager.getInstance().getConnection().prepareStatement(CheckChartBuilder); stat.setString(1, token); rs=stat.executeQuery(); Boolean rtn=rs.getBoolean("ChartBuilder"); return rtn; } }