Advertisement
Guest User

Untitled

a guest
Sep 30th, 2018
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.46 KB | None | 0 0
  1. package org.hyperion.webserv;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.BufferedWriter;
  5. import java.io.IOException;
  6. import java.io.InputStreamReader;
  7. import java.io.OutputStreamWriter;
  8. import java.net.ServerSocket;
  9. import java.net.Socket;
  10. import java.net.URLDecoder;
  11. import java.sql.ResultSet;
  12. import java.util.Date;
  13. import java.util.HashMap;
  14. import java.util.Map;
  15. import java.util.Random;
  16. import java.util.concurrent.ExecutorService;
  17. import java.util.concurrent.Executors;
  18.  
  19. import javax.net.ssl.SSLServerSocketFactory;
  20.  
  21. import org.hyperion.rs2.model.content.grandexchange.ServerDatabase;
  22.  
  23.  
  24. public class WebServ extends Thread {
  25.  
  26. public static void main(String args[]){
  27. new WebServ();
  28. }
  29.  
  30. public WebServ(){
  31. this.start();
  32. }
  33.  
  34. public void run(){
  35. try {
  36. ExecutorService threadpool = Executors.newFixedThreadPool(5);
  37.  
  38. // SSLServerSocketFactory sslserversocketfactory = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
  39. //ServerSocket s = sslserversocketfactory.createServerSocket(9999);
  40. ServerSocket s = new ServerSocket(8081);
  41. while(true){
  42. final Socket s2 = s.accept();
  43. threadpool.submit(new Runnable(){
  44. @Override
  45. public void run() {
  46. handleSocket(s2);
  47. }
  48. });
  49. }
  50. } catch (IOException e) {
  51. e.printStackTrace();
  52. }
  53. }
  54.  
  55. public void handleSocket(Socket s2){
  56. try {
  57. s2.setSoTimeout(10000);
  58. BufferedReader br = new BufferedReader(new InputStreamReader(s2.getInputStream()));
  59. String line;
  60. String request = br.readLine().replace("GET ", "");
  61. request = request.substring(0,request.indexOf("HTTP")-1);
  62. //read the request headers
  63. while((line = br.readLine()) != null){
  64. if(line.length() <= 1)
  65. break;
  66. }
  67.  
  68. BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s2.getOutputStream()));
  69. //write the responce headers
  70. for(String message : getHeaders()){
  71. bw.write(message+"\n");
  72. }
  73. //indicate the end of the headers
  74. bw.newLine();
  75. //servet he request
  76. try {
  77. serveRequest(request,bw);
  78. } catch(Exception e){
  79. e.printStackTrace();
  80. }
  81. //send the data and close the socket
  82. bw.flush();
  83. s2.close();
  84. } catch (IOException e) {
  85. e.printStackTrace();
  86. }
  87. }
  88.  
  89. public String[] getHeaders(){
  90. return new String[]{
  91. "HTTP/1.0 200 OK",
  92. "Date: "+(new Date().toString()),
  93. "Expires: -1",
  94. "Cache-Control: private, max-age=0",
  95. "Content-Type: text/html; charset=ISO-8859-1",
  96. "Server: Martin WebServ 1.0",
  97. };
  98. }
  99. private static final String prefix = "vb/?pageid=";
  100.  
  101. public void serveRequest(String file,BufferedWriter bw) throws IOException {
  102. file = URLDecoder.decode(file);
  103. System.out.println("request: "+file);
  104. /*} else if(file.equalsIgnoreCase("/pon")){
  105. bw.write(World.getWorld().getPlayers().size()+"");
  106. } else if(file.equalsIgnoreCase("/pon2")){
  107. for(Player p : World.getWorld().getPlayers()){
  108. String name = p.getName();
  109. if(p.getRights().toInteger() >= 2) name = "<font color=red>"+name+"</font>,<br>";
  110. else if(p.getRights().toInteger() >= 1) name = "<font color=0099FF>"+name+"</font>,<br>";
  111. else if(p.playerStatus >= 1) name = "<font color=DarkGreen>"+name+"</font>,<br>";
  112. else name += ",<br>";
  113. bw.write(name);
  114. }*/
  115. String username = null;
  116. String pass = null;
  117. String sessionUrl = "";
  118. long session = 0;
  119. boolean loggedIn = false;
  120. HTTPSession s = null;
  121.  
  122. if(!file.contains("?")) drawLoginbox(bw,file);
  123. else {
  124. if(file.startsWith("/login")){
  125. session = random.nextLong();
  126. username = getParameter("name",file);
  127. pass = getParameter("pass",file);
  128. try {
  129. if(username.equals("") || pass.equals("")){
  130. drawLoginbox(bw,file);
  131. } else {
  132. ResultSet r = ServerDatabase.query("SELECT * FROM hyp_member WHERE username = '"+username+"'");
  133. if(r.next()){
  134. if(pass.equals(r.getString("pass"))){
  135. //check user and pass
  136. s = new HTTPSession(username,pass);
  137. sessionMap.put(session, s);
  138. file = getParameter("page",file);
  139. loggedIn = true;
  140. sessionUrl += "&session="+session;
  141. } else {
  142. //bad login details
  143. writeErrMessage("Login Failed!",bw);
  144. drawLoginbox(bw,file);
  145. }
  146. } else {
  147. writeErrMessage("This username does not exist in our database",bw);
  148. drawLoginbox(bw,file);
  149. }
  150. }
  151. } catch(Exception e){
  152. e.printStackTrace();
  153. }
  154. } else if(!getParameter("session",file).equals("")) {
  155.  
  156. if(!loggedIn)
  157. session = Long.parseLong(getParameter("session",file));
  158. s = sessionMap.get(session);
  159. if(s == null || s.lastActive < System.currentTimeMillis() - 1800000){
  160. session = 0;
  161. drawTimeout(bw,file);
  162. } else {
  163. s.lastActive = System.currentTimeMillis();
  164. loggedIn = true;
  165. sessionUrl += "&session="+session;
  166. }
  167. }
  168. if(loggedIn)
  169. bw.write("<table><tr><td><a href=\"/profile?name="+s.username+sessionUrl+"\"><h2>Profile</h2></a></td><td><a href=\"/clan?"+sessionUrl+"\"><h2>Clan</h2></a></td><td><a href=\"/friends?"+sessionUrl+"\"><h2>Friends</h2></a></td><td><a href=\"/bank?"+sessionUrl+"\"><h2>Bank</h2></a></td><td><a href=\"/logout?"+sessionUrl+"\"><h2>Logout</h2></a></td></tr></table>");
  170. if(file.startsWith("/clanname?")){
  171. try {
  172. String name = getParameter("name",file);
  173. ResultSet r = ServerDatabase.query("SELECT * FROM hyp_member WHERE clanname = '"+name+"'");
  174. bw.write("<table width=100%><tr><td>Username</td><td>Rank</td><td>Cash</td><td>Total Level</td></tr>");
  175. while(r.next()){
  176. String rank = "Recruit";
  177. int rankId = r.getInt("clanrights");
  178. if(rankId >= 4) rank = "Leader";
  179. else if(rankId >= 3) rank = "Officer";
  180. else if(rankId >= 2) rank = "Sergeant";
  181. bw.write("<tr><td><a href=\"/profile?name="+r.getString("username")+sessionUrl+"\">"+r.getString("username")+"</a></td><td>"+rank+"</td><td>"+r.getInt("cash")+"</td><td>"+r.getInt("totalLevel")+"</td></tr>");
  182. }
  183. bw.write("</table>");
  184. } catch(Exception e){
  185. e.printStackTrace();
  186. }
  187. } else if(file.startsWith("/clan")){
  188. try {
  189. ResultSet r = ServerDatabase.query("SELECT * FROM hyp_clan");
  190. bw.write("<table width=100%><tr><td>Clan Name</td><td>Leader</td><td>Kills</td><td>Deaths</td><td>Total Level</td><td>Privacy</td></tr>");
  191. while(r.next()){
  192. bw.write("<tr><td><a href=\"/clanname?name="+r.getString("clanname")+sessionUrl+"\">"+r.getString("clanname")+"</a></td><td><a href=\"/profile?name="+r.getString("leader")+sessionUrl+"\">"+r.getString("leader")+"</a></td><td>"+r.getInt("kills")+"</td><td>"+r.getInt("deaths")+"</td><td>"+r.getInt("totalLevels")+"</td><td>"+(r.getInt("private") == 10 ? "private" : "public")+"</td></tr>");
  193. }
  194. bw.write("</table>");
  195. } catch(Exception e){
  196. e.printStackTrace();
  197. }
  198. }
  199.  
  200. else if(loggedIn && s != null) {
  201. if(file.startsWith("/logout")){
  202. sessionMap.remove(s);
  203. drawLoginbox(bw,"");
  204. }
  205. if(file.startsWith("/createclan2")){
  206. int teamcapeId = Integer.parseInt(getParameter("capeid",file));
  207. String type = getParameter("type",file);
  208. String ccname = getParameter("ccname",file);
  209. String cname = getParameter("cname",file);
  210. String private3 = getParameter("private3",file);
  211. //bw.write("cname: "+cname+" ccname: "+ccname+" type: "+type+" cape: "+teamcapeId+" private: "+private3+"<br />");
  212. file = "/createclan";
  213. try {
  214. ResultSet r = ServerDatabase.query("SELECT * FROM hyp_member WHERE username = '"+s.username+"'");
  215. if(r.next()){
  216. String tempClan = r.getString("clanname");
  217. if(!tempClan.equals("1null1")){
  218. writeErrMessage("Your already in a clan!",bw);
  219. } else if(teamcapeId > 50 || teamcapeId < 0){
  220. writeErrMessage("invalid teamcapeid",bw);
  221. } else if(ServerDatabase.query("SELECT * FROM hyp_clan WHERE clanname = '"+cname+"'").next()){
  222. writeErrMessage("This Clan Name is already in use",bw);
  223. } else if(ServerDatabase.query("SELECT * FROM hyp_clan WHERE clanchat = '"+ccname+"'").next()){
  224. writeErrMessage("This Clan Chat Name is already in use",bw);
  225. } else {
  226. ServerDatabase.query("INSERT INTO hyp_clan VALUES ('"+cname+"','"+ccname+"','"+teamcapeId+"','"+s.username+"','"+type+"',0,0,"+r.getInt("totallevel")+","+private3+"0,0,0,0,0,0,0,0,"+r.getInt("cash")+");");
  227. ServerDatabase.query("UPDATE hyp_member SET clanname = '"+cname+"', clanrights = 4 WHERE username = '"+s.username+"'");
  228. //success open clan management page
  229. file = "/clan";
  230. }
  231. } else {
  232. writeErrMessage("IMPOSSIBRUUUUUUUUUUUU!!!!!!!!",bw);
  233. }
  234. } catch(Exception e){
  235. e.printStackTrace();
  236. }
  237. }
  238. if(file.startsWith("/clanmanage")){
  239. createClanManagePage(bw,session);
  240. }
  241. if(file.startsWith("/createclan")){
  242. createClanPage(bw,session);
  243. }
  244. }
  245. }
  246. }
  247.  
  248.  
  249. private void writeErrMessage(String err,BufferedWriter bw) throws IOException{
  250. bw.write("<font color=red><h3>Error: "+err+"</h3></font><br />");
  251. }
  252.  
  253.  
  254. private void createClanManagePage(BufferedWriter bw,long session) throws IOException {
  255. bw.write("<table><tr><td></td></tr></table>");
  256.  
  257. }
  258.  
  259. private void createClanPage(BufferedWriter bw,long session) throws IOException {
  260. bw.write("<form action=\"/createclan2\" method=\"get\"><input type=\"hidden\" name=\"session\" value=\""+session+"\" /><table><tr><td>Clan Name: </td><td><input type=\"text\" name=\"cname\" /></td></tr><tr><td>Clan Chat Name: </td><td><input type=\"text\" name=\"ccname\" /></td></tr><tr><td>Team Cape ID (1-50):</td><td><input type=\"number\" name=\"capeid\" min=\"1\" max=\"50\"/></td></tr><tr><td>Clan Type:</td><td><select name=\"type\"><option value=\"1\">Player Killing</option><option value=\"2\">Skilling</option><option value=\"3\">Minigames</option><option value=\"4\">All</option></select></td></tr><tr><td>Joining Permissions:</td><td><select name=\"private3\"><option value=\"1\">Private</option><option value=\"2\">Public</option></select></td></tr><tr><td><input type=\"submit\" value=\"Submit\" /></td></tr></table></form>");
  261.  
  262. }
  263.  
  264. private void drawTimeout(BufferedWriter bw,String file) throws IOException {
  265. writeErrMessage("Your session has timed out! Please Relogin.",bw);
  266. drawLoginbox(bw,file);
  267. }
  268.  
  269. private void drawLoginbox(BufferedWriter bw,String page) throws IOException {
  270. bw.write("<form action=\"/login\" method=\"get\"><input type=hidden name=page value=\""+page+"\"><table><tr><td>Username:</td><td><input type=\"text\" name=\"username\" /></td><td>Password:</td><td><input type=\"password\" name=\"pass\" /></td><td><input type=\"submit\" value=\"Submit\" /></td></form>");
  271. }
  272.  
  273. public String getParameter(String name,String line){
  274. if(!line.contains(name)) return "";
  275. String value = line.substring(line.indexOf(name+"=")+name.length()+1);
  276. if(value.contains("&"))
  277. value = value.substring(0,value.indexOf("&"));
  278. return value;
  279. }
  280.  
  281. public Map<Long,HTTPSession> sessionMap = new HashMap<Long,HTTPSession>();
  282. public Random random = new Random();
  283.  
  284. public class HTTPSession {
  285. public String username;
  286. public String pass;
  287. public long lastActive = System.currentTimeMillis();
  288.  
  289. public HTTPSession(String username,String pass){
  290. this.username = username;
  291. this.pass = pass;
  292. }
  293. }
  294.  
  295. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement