KUMOS/Server/Includes/General.pbi
2026-05-02 15:49:06 +02:00

68 lines
1.9 KiB
Plaintext

Module General
EnableExplicit
Procedure RespondJSON(*Request, JSON.s, Status.s = "200 OK")
FastCGI::WriteResponseHeader(*Request, "Status", Status)
FastCGI::WriteResponseHeader(*Request, "Content-Type", "application/json; charset=utf-8")
FastCGI::WriteResponseHeader(*Request, "Cache-Control", "no-cache, no-store, must-revalidate")
FastCGI::WriteResponseString(*Request, JSON)
FastCGI::FinishResponse(*Request)
EndProcedure
Procedure.s GetPostField(*Request, Field.s)
Protected PostData.s = FastCGI::GetPostData(*Request)
Protected Count.i = CountString(PostData, "&") + 1
Protected i.i, Pair.s, Key.s
For i = 1 To Count
Pair = StringField(PostData, i, "&")
Key = StringField(Pair, 1, "=")
If Key = Field
ProcedureReturn URLDecoder(StringField(Pair, 2, "="))
EndIf
Next
ProcedureReturn ""
EndProcedure
Procedure.s GetQueryField(*Request, Field.s)
Protected QS.s = FastCGI::GetParameter(*Request, "QUERY_STRING")
Protected Count.i = CountString(QS, "&") + 1
Protected i.i, Pair.s, Key.s
For i = 1 To Count
Pair = StringField(QS, i, "&")
Key = StringField(Pair, 1, "=")
If Key = Field
ProcedureReturn URLDecoder(StringField(Pair, 2, "="))
EndIf
Next
ProcedureReturn ""
EndProcedure
Procedure ServeStatic(*Request, URI.s)
Protected File.s
If FindString(URI, "..") Or FindString(URI, "//")
RespondJSON(*Request, ~"{\"error\":\"Forbidden\"}", "403 Forbidden")
ProcedureReturn
EndIf
If URI = "/" Or URI = ""
File = "www/index.html"
Else
File = "www" + URI
EndIf
If FileSize(File) >= 0
If Not FastCGI::RespondFile(*Request, File)
RespondJSON(*Request, ~"{\"error\":\"Read error\"}", "500 Internal Server Error")
EndIf
Else
RespondJSON(*Request, ~"{\"error\":\"Not found\"}", "404 Not Found")
EndIf
EndProcedure
EndModule
; IDE Options = PureBasic 6.30 (Windows - x64)
; CursorPosition = 24
; Folding = h
; EnableXP
; DPIAware