Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package org.hyperion.webserv;
- import java.io.BufferedReader;
- import java.io.BufferedWriter;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.io.OutputStreamWriter;
- import java.net.ServerSocket;
- import java.net.Socket;
- import java.net.URLDecoder;
- import java.sql.ResultSet;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.Map;
- import java.util.Random;
- import java.util.concurrent.ExecutorService;
- import java.util.concurrent.Executors;
- import javax.net.ssl.SSLServerSocketFactory;
- import org.hyperion.rs2.model.content.grandexchange.ServerDatabase;
- public class WebServ extends Thread {
- public static void main(String args[]){
- new WebServ();
- }
- public WebServ(){
- this.start();
- }
- public void run(){
- try {
- ExecutorService threadpool = Executors.newFixedThreadPool(5);
- // SSLServerSocketFactory sslserversocketfactory = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
- //ServerSocket s = sslserversocketfactory.createServerSocket(9999);
- ServerSocket s = new ServerSocket(8081);
- while(true){
- final Socket s2 = s.accept();
- threadpool.submit(new Runnable(){
- @Override
- public void run() {
- handleSocket(s2);
- }
- });
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- public void handleSocket(Socket s2){
- try {
- s2.setSoTimeout(10000);
- BufferedReader br = new BufferedReader(new InputStreamReader(s2.getInputStream()));
- String line;
- String request = br.readLine().replace("GET ", "");
- request = request.substring(0,request.indexOf("HTTP")-1);
- //read the request headers
- while((line = br.readLine()) != null){
- if(line.length() <= 1)
- break;
- }
- BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s2.getOutputStream()));
- //write the responce headers
- for(String message : getHeaders()){
- bw.write(message+"\n");
- }
- //indicate the end of the headers
- bw.newLine();
- //servet he request
- try {
- serveRequest(request,bw);
- } catch(Exception e){
- e.printStackTrace();
- }
- //send the data and close the socket
- bw.flush();
- s2.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- public String[] getHeaders(){
- return new String[]{
- "HTTP/1.0 200 OK",
- "Date: "+(new Date().toString()),
- "Expires: -1",
- "Cache-Control: private, max-age=0",
- "Content-Type: text/html; charset=ISO-8859-1",
- "Server: Martin WebServ 1.0",
- };
- }
- private static final String prefix = "vb/?pageid=";
- public void serveRequest(String file,BufferedWriter bw) throws IOException {
- file = URLDecoder.decode(file);
- System.out.println("request: "+file);
- /*} else if(file.equalsIgnoreCase("/pon")){
- bw.write(World.getWorld().getPlayers().size()+"");
- } else if(file.equalsIgnoreCase("/pon2")){
- for(Player p : World.getWorld().getPlayers()){
- String name = p.getName();
- if(p.getRights().toInteger() >= 2) name = "<font color=red>"+name+"</font>,<br>";
- else if(p.getRights().toInteger() >= 1) name = "<font color=0099FF>"+name+"</font>,<br>";
- else if(p.playerStatus >= 1) name = "<font color=DarkGreen>"+name+"</font>,<br>";
- else name += ",<br>";
- bw.write(name);
- }*/
- String username = null;
- String pass = null;
- String sessionUrl = "";
- long session = 0;
- boolean loggedIn = false;
- HTTPSession s = null;
- if(!file.contains("?")) drawLoginbox(bw,file);
- else {
- if(file.startsWith("/login")){
- session = random.nextLong();
- username = getParameter("name",file);
- pass = getParameter("pass",file);
- try {
- if(username.equals("") || pass.equals("")){
- drawLoginbox(bw,file);
- } else {
- ResultSet r = ServerDatabase.query("SELECT * FROM hyp_member WHERE username = '"+username+"'");
- if(r.next()){
- if(pass.equals(r.getString("pass"))){
- //check user and pass
- s = new HTTPSession(username,pass);
- sessionMap.put(session, s);
- file = getParameter("page",file);
- loggedIn = true;
- sessionUrl += "&session="+session;
- } else {
- //bad login details
- writeErrMessage("Login Failed!",bw);
- drawLoginbox(bw,file);
- }
- } else {
- writeErrMessage("This username does not exist in our database",bw);
- drawLoginbox(bw,file);
- }
- }
- } catch(Exception e){
- e.printStackTrace();
- }
- } else if(!getParameter("session",file).equals("")) {
- if(!loggedIn)
- session = Long.parseLong(getParameter("session",file));
- s = sessionMap.get(session);
- if(s == null || s.lastActive < System.currentTimeMillis() - 1800000){
- session = 0;
- drawTimeout(bw,file);
- } else {
- s.lastActive = System.currentTimeMillis();
- loggedIn = true;
- sessionUrl += "&session="+session;
- }
- }
- if(loggedIn)
- 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>");
- if(file.startsWith("/clanname?")){
- try {
- String name = getParameter("name",file);
- ResultSet r = ServerDatabase.query("SELECT * FROM hyp_member WHERE clanname = '"+name+"'");
- bw.write("<table width=100%><tr><td>Username</td><td>Rank</td><td>Cash</td><td>Total Level</td></tr>");
- while(r.next()){
- String rank = "Recruit";
- int rankId = r.getInt("clanrights");
- if(rankId >= 4) rank = "Leader";
- else if(rankId >= 3) rank = "Officer";
- else if(rankId >= 2) rank = "Sergeant";
- 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>");
- }
- bw.write("</table>");
- } catch(Exception e){
- e.printStackTrace();
- }
- } else if(file.startsWith("/clan")){
- try {
- ResultSet r = ServerDatabase.query("SELECT * FROM hyp_clan");
- 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>");
- while(r.next()){
- 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>");
- }
- bw.write("</table>");
- } catch(Exception e){
- e.printStackTrace();
- }
- }
- else if(loggedIn && s != null) {
- if(file.startsWith("/logout")){
- sessionMap.remove(s);
- drawLoginbox(bw,"");
- }
- if(file.startsWith("/createclan2")){
- int teamcapeId = Integer.parseInt(getParameter("capeid",file));
- String type = getParameter("type",file);
- String ccname = getParameter("ccname",file);
- String cname = getParameter("cname",file);
- String private3 = getParameter("private3",file);
- //bw.write("cname: "+cname+" ccname: "+ccname+" type: "+type+" cape: "+teamcapeId+" private: "+private3+"<br />");
- file = "/createclan";
- try {
- ResultSet r = ServerDatabase.query("SELECT * FROM hyp_member WHERE username = '"+s.username+"'");
- if(r.next()){
- String tempClan = r.getString("clanname");
- if(!tempClan.equals("1null1")){
- writeErrMessage("Your already in a clan!",bw);
- } else if(teamcapeId > 50 || teamcapeId < 0){
- writeErrMessage("invalid teamcapeid",bw);
- } else if(ServerDatabase.query("SELECT * FROM hyp_clan WHERE clanname = '"+cname+"'").next()){
- writeErrMessage("This Clan Name is already in use",bw);
- } else if(ServerDatabase.query("SELECT * FROM hyp_clan WHERE clanchat = '"+ccname+"'").next()){
- writeErrMessage("This Clan Chat Name is already in use",bw);
- } else {
- 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")+");");
- ServerDatabase.query("UPDATE hyp_member SET clanname = '"+cname+"', clanrights = 4 WHERE username = '"+s.username+"'");
- //success open clan management page
- file = "/clan";
- }
- } else {
- writeErrMessage("IMPOSSIBRUUUUUUUUUUUU!!!!!!!!",bw);
- }
- } catch(Exception e){
- e.printStackTrace();
- }
- }
- if(file.startsWith("/clanmanage")){
- createClanManagePage(bw,session);
- }
- if(file.startsWith("/createclan")){
- createClanPage(bw,session);
- }
- }
- }
- }
- private void writeErrMessage(String err,BufferedWriter bw) throws IOException{
- bw.write("<font color=red><h3>Error: "+err+"</h3></font><br />");
- }
- private void createClanManagePage(BufferedWriter bw,long session) throws IOException {
- bw.write("<table><tr><td></td></tr></table>");
- }
- private void createClanPage(BufferedWriter bw,long session) throws IOException {
- 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>");
- }
- private void drawTimeout(BufferedWriter bw,String file) throws IOException {
- writeErrMessage("Your session has timed out! Please Relogin.",bw);
- drawLoginbox(bw,file);
- }
- private void drawLoginbox(BufferedWriter bw,String page) throws IOException {
- 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>");
- }
- public String getParameter(String name,String line){
- if(!line.contains(name)) return "";
- String value = line.substring(line.indexOf(name+"=")+name.length()+1);
- if(value.contains("&"))
- value = value.substring(0,value.indexOf("&"));
- return value;
- }
- public Map<Long,HTTPSession> sessionMap = new HashMap<Long,HTTPSession>();
- public Random random = new Random();
- public class HTTPSession {
- public String username;
- public String pass;
- public long lastActive = System.currentTimeMillis();
- public HTTPSession(String username,String pass){
- this.username = username;
- this.pass = pass;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement