Merge pull request #1 from the5gi/master
Added HTML Page Support with .html and .htm
This commit is contained in:
commit
e880d09256
@ -10,7 +10,8 @@ import tech.nevets.lunarbot.commands.games.PingCmd;
|
|||||||
import tech.nevets.lunarbot.config.Config;
|
import tech.nevets.lunarbot.config.Config;
|
||||||
import tech.nevets.lunarbot.config.ConfigHandler;
|
import tech.nevets.lunarbot.config.ConfigHandler;
|
||||||
import tech.nevets.lunarbot.config.ConfigUtils;
|
import tech.nevets.lunarbot.config.ConfigUtils;
|
||||||
import tech.nevets.lunarbot.webserver.WebServer;
|
import tech.nevets.lunarbot.webserver.WebAPI;
|
||||||
|
import tech.nevets.lunarbot.webserver.WebGenerator;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|
||||||
@ -39,8 +40,8 @@ public class Bot {
|
|||||||
jda.awaitReady();
|
jda.awaitReady();
|
||||||
System.out.println("Finished Building Bot!");
|
System.out.println("Finished Building Bot!");
|
||||||
|
|
||||||
WebServer.main(null);
|
WebAPI.main(null);
|
||||||
System.out.println("WebServer successfully loaded in main class!");
|
WebGenerator.main(null);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,11 +1,212 @@
|
|||||||
package tech.nevets.lunarbot.webserver;
|
package tech.nevets.lunarbot.webserver;
|
||||||
|
|
||||||
//TODO Make up the last 3 hours of my life - Alec
|
import java.io.BufferedOutputStream;
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.io.PrintWriter;
|
||||||
|
import java.net.ServerSocket;
|
||||||
|
import java.net.Socket;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.StringTokenizer;
|
||||||
|
|
||||||
|
public class WebAPI implements Runnable{
|
||||||
|
|
||||||
|
static final File WEB_ROOT = new File("WebAPI");
|
||||||
|
static final String DEFAULT_FILE = "index.html";
|
||||||
|
static final String FILE_NOT_FOUND = "404.html";
|
||||||
|
static final String METHOD_NOT_SUPPORTED = "no.html";
|
||||||
|
// port to listen connection
|
||||||
|
static final int PORT = 80;
|
||||||
|
|
||||||
|
// verbose mode
|
||||||
|
static final boolean verbose = true;
|
||||||
|
|
||||||
|
// Client Connection via Socket Class
|
||||||
|
private Socket connect;
|
||||||
|
|
||||||
|
public WebAPI(Socket c) {
|
||||||
|
connect = c;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
try {
|
||||||
|
ServerSocket serverConnect = new ServerSocket(PORT);
|
||||||
|
System.out.println("Server started.\nListening for connections on port : " + PORT + " ...\n");
|
||||||
|
|
||||||
|
// we listen until user halts server execution
|
||||||
|
while (true) {
|
||||||
|
WebAPI myServer = new WebAPI(serverConnect.accept());
|
||||||
|
|
||||||
|
if (verbose) {
|
||||||
|
System.out.println("Connecton opened. (" + new Date() + ")");
|
||||||
|
}
|
||||||
|
|
||||||
|
// create dedicated thread to manage the client connection
|
||||||
|
Thread thread = new Thread(myServer);
|
||||||
|
thread.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (IOException e) {
|
||||||
|
System.err.println("Server Connection error : " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
// we manage our particular client connection
|
||||||
|
BufferedReader in = null; PrintWriter out = null; BufferedOutputStream dataOut = null;
|
||||||
|
String fileRequested = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
// we read characters from the client via input stream on the socket
|
||||||
|
in = new BufferedReader(new InputStreamReader(connect.getInputStream()));
|
||||||
|
// we get character output stream to client (for headers)
|
||||||
|
out = new PrintWriter(connect.getOutputStream());
|
||||||
|
// get binary output stream to client (for requested data)
|
||||||
|
dataOut = new BufferedOutputStream(connect.getOutputStream());
|
||||||
|
|
||||||
|
// get first line of the request from the client
|
||||||
|
String input = in.readLine();
|
||||||
|
// we parse the request with a string tokenizer
|
||||||
|
StringTokenizer parse = new StringTokenizer(input);
|
||||||
|
String method = parse.nextToken().toUpperCase(); // we get the HTTP method of the client
|
||||||
|
// we get file requested
|
||||||
|
fileRequested = parse.nextToken().toLowerCase();
|
||||||
|
|
||||||
|
// we support only GET and HEAD methods, we check
|
||||||
|
if (!method.equals("GET") && !method.equals("HEAD")) {
|
||||||
|
if (verbose) {
|
||||||
|
System.out.println("501 Not Implemented : " + method + " method.");
|
||||||
|
}
|
||||||
|
|
||||||
|
// we return the not supported file to the client
|
||||||
|
File file = new File(WEB_ROOT, METHOD_NOT_SUPPORTED);
|
||||||
|
int fileLength = (int) file.length();
|
||||||
|
String contentMimeType = "text/html";
|
||||||
|
//read content to return to client
|
||||||
|
byte[] fileData = readFileData(file, fileLength);
|
||||||
|
|
||||||
|
// we send HTTP Headers with data to client
|
||||||
|
out.println("HTTP/1.1 501 Not Implemented");
|
||||||
|
out.println("Server: Java HTTP Server from SSaurel : 1.0");
|
||||||
|
out.println("Date: " + new Date());
|
||||||
|
out.println("Content-type: " + contentMimeType);
|
||||||
|
out.println("Content-length: " + fileLength);
|
||||||
|
out.println(); // blank line between headers and content, very important !
|
||||||
|
out.flush(); // flush character output stream buffer
|
||||||
|
// file
|
||||||
|
dataOut.write(fileData, 0, fileLength);
|
||||||
|
dataOut.flush();
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// GET or HEAD method
|
||||||
|
if (fileRequested.endsWith("/")) {
|
||||||
|
fileRequested += DEFAULT_FILE;
|
||||||
|
}
|
||||||
|
|
||||||
|
File file = new File(WEB_ROOT, fileRequested);
|
||||||
|
int fileLength = (int) file.length();
|
||||||
|
String content = getContentType(fileRequested);
|
||||||
|
|
||||||
|
if (method.equals("GET")) { // GET method so we return content
|
||||||
|
byte[] fileData = readFileData(file, fileLength);
|
||||||
|
|
||||||
|
// send HTTP Headers
|
||||||
|
out.println("HTTP/1.1 200 OK");
|
||||||
|
out.println("Server: Java HTTP Server from SSaurel : 1.0");
|
||||||
|
out.println("Date: " + new Date());
|
||||||
|
out.println("Content-type: " + content);
|
||||||
|
out.println("Content-length: " + fileLength);
|
||||||
|
out.println(); // blank line between headers and content, very important !
|
||||||
|
out.flush(); // flush character output stream buffer
|
||||||
|
|
||||||
|
dataOut.write(fileData, 0, fileLength);
|
||||||
|
dataOut.flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (verbose) {
|
||||||
|
System.out.println("File " + fileRequested + " of type " + content + " returned");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (FileNotFoundException fnfe) {
|
||||||
|
try {
|
||||||
|
fileNotFound(out, dataOut, fileRequested);
|
||||||
|
} catch (IOException ioe) {
|
||||||
|
System.err.println("Error with file not found exception : " + ioe.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (IOException ioe) {
|
||||||
|
System.err.println("Server error : " + ioe);
|
||||||
|
} finally {
|
||||||
|
try {
|
||||||
|
in.close();
|
||||||
|
out.close();
|
||||||
|
dataOut.close();
|
||||||
|
connect.close(); // we close socket connection
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.err.println("Error closing stream : " + e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (verbose) {
|
||||||
|
System.out.println("Connection closed.\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public class WebAPI {
|
|
||||||
public static void webAPI() {
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private byte[] readFileData(File file, int fileLength) throws IOException {
|
||||||
|
FileInputStream fileIn = null;
|
||||||
|
byte[] fileData = new byte[fileLength];
|
||||||
|
|
||||||
|
try {
|
||||||
|
fileIn = new FileInputStream(file);
|
||||||
|
fileIn.read(fileData);
|
||||||
|
} finally {
|
||||||
|
if (fileIn != null)
|
||||||
|
fileIn.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
return fileData;
|
||||||
|
}
|
||||||
|
|
||||||
|
// return supported MIME Types
|
||||||
|
private String getContentType(String fileRequested) {
|
||||||
|
if (fileRequested.endsWith(".htm") || fileRequested.endsWith(".html"))
|
||||||
|
return "text/html";
|
||||||
|
else
|
||||||
|
return "text/plain";
|
||||||
|
}
|
||||||
|
|
||||||
|
private void fileNotFound(PrintWriter out, OutputStream dataOut, String fileRequested) throws IOException {
|
||||||
|
File file = new File(WEB_ROOT, FILE_NOT_FOUND);
|
||||||
|
int fileLength = (int) file.length();
|
||||||
|
String content = "text/html";
|
||||||
|
byte[] fileData = readFileData(file, fileLength);
|
||||||
|
|
||||||
|
out.println("HTTP/1.1 404 File Not Found");
|
||||||
|
out.println("Server: Java HTTP Server : 1.0");
|
||||||
|
out.println("Date: " + new Date());
|
||||||
|
out.println("Content-type: " + content);
|
||||||
|
out.println("Content-length: " + fileLength);
|
||||||
|
out.println(); // blank line between headers and content, very important !
|
||||||
|
out.flush(); // flush character output stream buffer
|
||||||
|
|
||||||
|
dataOut.write(fileData, 0, fileLength);
|
||||||
|
dataOut.flush();
|
||||||
|
|
||||||
|
if (verbose) {
|
||||||
|
System.out.println("File " + fileRequested + " not found");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -29,9 +230,6 @@ public class WebAPI {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -0,0 +1,28 @@
|
|||||||
|
package tech.nevets.lunarbot.webserver;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.Scanner;
|
||||||
|
|
||||||
|
public class WebGenerator {
|
||||||
|
|
||||||
|
public static void main(String args[]) {
|
||||||
|
|
||||||
|
System.out.println("");
|
||||||
|
Scanner sc = new Scanner(System.in);
|
||||||
|
String path = sc.next();
|
||||||
|
//Using Scanner class to get the folder name from the user
|
||||||
|
System.out.println("WebAPI");
|
||||||
|
path = path+sc.next();
|
||||||
|
//Instantiate the File class
|
||||||
|
File f1 = new File(path);
|
||||||
|
//Creating a folder using mkdir() method
|
||||||
|
boolean bool = f1.mkdir();
|
||||||
|
if(bool){
|
||||||
|
System.out.println("Folder is created successfully");
|
||||||
|
}else{
|
||||||
|
System.out.println("Error Found!");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user