Skip to content

Commit a5c8dfb

Browse files
author
Trollhunters501PC
authored
Arreglar Error de no funcionar en Navegador por no Recibir OPTIONS
Se añadio BanIp y Filtros de Origen
1 parent 381d86d commit a5c8dfb

11 files changed

Lines changed: 137 additions & 10 deletions

File tree

.github/workflows/buildJava.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,4 @@ jobs:
2424
uses: actions/upload-artifact@v4
2525
with:
2626
name: ServerWebGamePost Java Edition
27-
path: java/target/ServerWebGamePost-1.1.1.jar
27+
path: java/target/ServerWebGamePost-1.2.0.jar

.github/workflows/nodejs-deno.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,4 @@ jobs:
3131
uses: actions/upload-artifact@v4
3232
with:
3333
name: ServerWebGamePost NodeJS Deno Edition
34-
path: nodejs/ServerWebGamePost-1.1.1.tgz
34+
path: nodejs/ServerWebGamePost-1.2.0.tgz

.github/workflows/python-package.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ jobs:
3434
- name: Packpage
3535
run: |
3636
mv "python" "ServerWebGamePost"
37-
tar czvf ServerWebGamePost-1.1.1.tar.gz ServerWebGamePost/
37+
tar czvf ServerWebGamePost-1.2.0.tar.gz ServerWebGamePost/
3838
- name: Upload Artifact
3939
uses: actions/upload-artifact@v4
4040
with:
4141
name: ServerWebGamePost Python Edition
42-
path: ServerWebGamePost-1.1.1.tar.gz
42+
path: ServerWebGamePost-1.2.0.tar.gz

java/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xs
55
<modelVersion>4.0.0</modelVersion>
66
<groupId>org.creadoresprogram</groupId>
77
<artifactId>ServerWebGamePost</artifactId>
8-
<version>1.1.1</version>
8+
<version>1.2.0</version>
99
<properties>
1010
<maven.compiler.source>1.8</maven.compiler.source>
1111
<maven.compiler.target>1.8</maven.compiler.target>

java/src/main/java/org/CreadoresProgram/ServerWebGamePost/server/ProcessDatapackServer.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,22 @@ public ProcessDatapackServer(){
1515

1616
@Override
1717
public Object handle(Request request, Response response) throws Exception{
18+
if(this.server.bannedIps.contains(request.ip())) return null;
19+
if(!this.getFilters().isEmpty() && !this.server.getFilters().contains(request.headers("Origin"))){
20+
response.status(403);
21+
return "Forbidden";
22+
}
1823
JSONObject datapack = JSON.parseObject(request.body());
1924
this.processDatapack(datapack);
2025
JSONObject reponDatapacks = new JSONObject();
2126
reponDatapacks.put("datapacksLot", this.server.getPlayers().get(datapack.getString("identifier")));
2227
this.server.getPlayers().get(datapack.getString("identifier")).clear();
2328
response.status(200);
2429
response.type("application/json");
30+
String allow = !this.server.getFilters().isEmpty() ? String.join(",", this.server.getFilters()) : "*";
31+
response.header("Access-Control-Allow-Origin", allow);
32+
response.header("Access-Control-Allow-Methods", "POST");
33+
response.header("Access-Control-Allow-Headers", "Content-Type");
2534
return reponDatapacks.toJSONString();
2635
}
2736
public void processDatapack(@NonNull JSONObject datapack){

java/src/main/java/org/CreadoresProgram/ServerWebGamePost/server/ServerWebGamePostServer.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import com.alibaba.fastjson2.JSONObject;
99
import com.alibaba.fastjson2.JSONArray;
1010
import java.util.HashMap;
11+
import java.util.ArrayList;
1112
import javax.annotation.Nullable;
1213
public final class ServerWebGamePostServer{
1314
@Getter
@@ -20,6 +21,11 @@ public final class ServerWebGamePostServer{
2021
@Getter
2122
private HashMap<String, JSONArray> players;
2223

24+
public ArrayList<String> bannedIps;
25+
26+
@Getter
27+
private ArrayList<String> filters;
28+
2329
public ServerWebGamePostServer(@NonNull int port){
2430
this(port, null);
2531
}
@@ -36,6 +42,7 @@ public ServerWebGamePostServer(@NonNull int port, @Nullable String imgSrc, @NonN
3642
this.sparkServer = Service.ignite();
3743
this.sparkServer.port(this.port);
3844
this.sparkServer.get("/favicon.ico", (req, res)-> {
45+
if(this.bannedIps.contains(req.ip())) return null;
3946
if(imgSrc == null){
4047
return "";
4148
}
@@ -55,6 +62,15 @@ public ServerWebGamePostServer(@NonNull int port, @Nullable String imgSrc, @NonN
5562
}
5663
});
5764
this.sparkServer.post("/ServerWebGamePost", this.processDatapacks);
65+
this.sparkServer.options("/ServerWebGamePost", (req, res)->{
66+
if(this.bannedIps.contains(req.ip())) return null;
67+
String allow = !this.getFilters().isEmpty() ? String.join(",", this.getFilters()) : "*";
68+
res.header("Access-Control-Allow-Origin", allow);
69+
res.header("Access-Control-Allow-Methods", "POST");
70+
res.header("Access-Control-Allow-Headers", "Content-Type");
71+
res.status(200);
72+
return "OK";
73+
});
5874
}
5975
public void sendDataPacket(@NonNull String identifier, @NonNull JSONObject datapack){
6076
if(!this.players.containsKey(identifier)){
@@ -68,4 +84,16 @@ public void stop(){
6884
this.sparkServer.awaitStop();
6985
}
7086
}
87+
public void banIp(@NonNull String ip){
88+
this.bannedIps.add(ip);
89+
}
90+
public void unbanIp(@NonNull String ip){
91+
this.bannedIps.remove(ip);
92+
}
93+
public void addFilterOrigin(@NonNull String origin){
94+
this.filters.add(origin);
95+
}
96+
public void removeFilterOrigin(@NonNull String origin){
97+
this.filters.remove(origin);
98+
}
7199
}

nodejs/org/CreadoresProgram/ServerWebGamePost/server/Server.js

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,37 @@ class Server {
4848
deletePlayer(identifier){
4949
delete this.players[identifier];
5050
}
51+
addFilterOrigin(filter){
52+
if(this.filters == null){
53+
this.filters = [];
54+
}
55+
this.filters[this.filters.length] = filter;
56+
}
57+
removeFilterOrigin(filter){
58+
if(this.filters != null){
59+
let index = this.filters.indexOf(filter);
60+
if(index != -1){
61+
this.filters.splice(index, 1);
62+
}
63+
}
64+
}
65+
banIp(ip){
66+
if(this.banIps == null){
67+
this.banIps = [];
68+
}
69+
this.banIps[this.banIps.length] = ip;
70+
}
71+
unbanIp(ip){
72+
if(this.banIps != null){
73+
let index = this.banIps.indexOf(ip);
74+
if(index != -1){
75+
this.banIps.splice(index, 1);
76+
}
77+
}
78+
}
5179
processSubDatapacks(request, reponse){
5280
try{
81+
if(this.banIps != null && this.banIps.includes(request.connection.remoteAddress)) return;
5382
if(request.url == "/favicon.ico"){
5483
if(request.method != "GET"){
5584
reponse.statusCode = 404;
@@ -72,7 +101,16 @@ class Server {
72101
reponse.end(logo);
73102
});
74103
}else if(request.url == "/ServerWebGamePost"){
75-
if(request.method != "POST"){
104+
if(request.method == "OPTIONS"){
105+
response.statusCode = 200;
106+
let Allow = this.filters && this.filters.length > 0 ? this.filters.join(',') : '*';
107+
reponse.setHeader("Access-Control-Allow-Origin", Allow);
108+
reponse.setHeader("Access-Control-Allow-Methods", "POST");
109+
reponse.setHeader("Access-Control-Allow-Headers", "Content-Type");
110+
reponse.end();
111+
return;
112+
}
113+
if(request.method != "POST" || (this.filters != null && this.filters.includes(request.headers["origin"]))){
76114
reponse.statusCode = 404;
77115
return;
78116
}
@@ -88,6 +126,10 @@ class Server {
88126
this.players[datapack.identifier] = [];
89127
reponse.statusCode = 200;
90128
reponse.setHeader("Content-Type", "application/json");
129+
let Allow = this.filters && this.filters.length > 0 ? this.filters.join(',') : '*';
130+
reponse.setHeader("Access-Control-Allow-Origin", Allow);
131+
reponse.setHeader("Access-Control-Allow-Methods", "POST");
132+
reponse.setHeader("Access-Control-Allow-Headers", "Content-Type");
91133
reponse.end(JSON.stringify(responDatapacks));
92134
}).bind(this));
93135
}

nodejs/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "ServerWebGamePost",
3-
"version": "1.1.1",
3+
"version": "1.2.0",
44
"description": "A multiplayer server system based on web servers with POST method",
55
"main": "index.js",
66
"repository": {

python/ServerWebGamePost/ServerM.py

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,16 +36,48 @@ def stop(self):
3636
self.httpServer.server_close()
3737

3838
def sendDataPacket(self, identifier, datapack):
39-
if self.players[identifier] is None:
39+
if identifier not in self.players:
4040
self.players[identifier] = []
4141
self.players[identifier].append(datapack)
4242

43+
def addFilterOrigin(self, origin):
44+
if self.filters is None:
45+
self.filters = []
46+
self.filters.append(origin)
47+
48+
def removeFilterOrigin(self, origin):
49+
if self.filters is None:
50+
return
51+
self.filters.remove(origin)
52+
53+
def banIp(self, ip):
54+
if self.bannedIps is None:
55+
self.bannedIps = []
56+
self.bannedIps.append(ip)
57+
58+
def unbanIp(self, ip):
59+
if self.bannedIps is None:
60+
return
61+
self.bannedIps.remove(ip)
62+
4363
class ProcessDatapackServer(BaseHTTPRequestHandler):
4464

4565
def do_POST(self):
66+
if(self.server.serverFat.bannedIps is not None and self.client_address[0] in self.server.serverFat.bannedIps):
67+
self.send_response(403)
68+
self.end_headers()
69+
return
4670
url = str(self.path)
4771
if url != "/ServerWebGamePost":
4872
return
73+
if(self.server.serverFat.filters is not None and self.headers['Origin'] not in self.server.serverFat.filters):
74+
self.send_response(403)
75+
self.end_headers()
76+
return
77+
allow = ','.join(self.filters) if self.filters and len(self.filters) > 0 else '*'
78+
self.send_header('Access-Control-Allow-Origin', allow)
79+
self.send_header('Access-Control-Allow-Methods', "POST")
80+
self.send_header('Access-Control-Allow-Headers', "Content-Type")
4981
try:
5082
datapack = json.loads(self.rfile.read(int(self.headers['Content-Length'])))
5183
self.processDatapack(datapack)
@@ -63,6 +95,10 @@ def do_POST(self):
6395
self.wfile.write(str(e).encode('utf-8'))
6496

6597
def do_GET(self):
98+
if(self.server.serverFat.bannedIps is not None and self.client_address[0] in self.server.serverFat.bannedIps):
99+
self.send_response(403)
100+
self.end_headers()
101+
return
66102
url = str(self.path)
67103
if url != "/favicon.ico":
68104
self.send_response(404)
@@ -77,5 +113,17 @@ def do_GET(self):
77113
with open(self.server.serverFat.imgSrc, "rb") as logo:
78114
self.wfile.write(logo.read())
79115

116+
def do_OPTIONS(self):
117+
if(self.server.serverFat.bannedIps is not None and self.client_address[0] in self.server.serverFat.bannedIps):
118+
self.send_response(403)
119+
self.end_headers()
120+
return
121+
self.send_response(200)
122+
allow = ','.join(self.filters) if self.filters and len(self.filters) > 0 else '*'
123+
self.send_header('Access-Control-Allow-Origin', allow)
124+
self.send_header('Access-Control-Allow-Methods', "POST")
125+
self.send_header('Access-Control-Allow-Headers', "Content-Type")
126+
self.end_headers()
127+
80128
def processDatapack(self, datapack):
81129
pass

python/ServerWebGamePost/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
__author__ = "Creadores Program"
2-
__version__ = "1.0.0"
2+
__version__ = "1.2.0"
33
__licence__ = "MIT"
44

55
from . import ServerM, ClientM

0 commit comments

Comments
 (0)