lweb/README.md

137 lines
4.8 KiB
Markdown
Raw Normal View History

2020-10-28 14:24:53 +01:00
# lweb
LiHaSo Webserver Modul
2021-04-29 10:05:04 +02:00
## Public functions:
2021-04-29 10:05:04 +02:00
### Server module configuration:
2021-04-29 10:05:04 +02:00
Parameter List:
```
2021-04-29 10:05:04 +02:00
lweb::#conf_port ;Listening Port
lweb::#conf_binding ;Interface binding e.g. only localhost with "127.0.0.1"
lweb::#conf_defaultfile ;Default file wen no file is selected(With extension!) e.g. "index.php"
lweb::#conf_basedir ;Default directory e.g. "/srv/www/htdocs/"
lweb::#conf_error400 ;TBD:error400
lweb::#conf_max_clients ;Max clients connected at the same time. (Watch memory limits!)
lweb::#conf_server_type ;Currently no function.(e.g. HTTPS, HTTP/2)
lweb::#conf_cache_enable ;It enable the cache mode (0 disabled and 1 enabled.) Currently with debugger unstable.
```
2021-04-29 10:05:04 +02:00
#### Functions
`lweb::set_config(parameter.i=#conf_defaultfile, setting.s="index.html")`
2021-04-29 10:05:04 +02:00
Setting must be a string.
2021-04-29 10:05:04 +02:00
Response is `#True` or `#False.`
`lweb::get_config(parameter.i=#conf_defaultfile)`
2021-04-29 10:05:04 +02:00
Responste is everytime a string.
2021-04-29 10:05:04 +02:00
### Server start
`lweb::start_server()`
2021-04-29 10:05:04 +02:00
Response is `#True` or `#False.`
2021-04-29 10:05:04 +02:00
### Different way to register a handler:
`lweb::register_client_handler(Route.s, Callback.i, AppPrototype.i = #handler_proto_get, RouteType.i = #handler_sub)`
2021-04-29 10:05:04 +02:00
Response is a JSONString!
2021-04-29 10:05:04 +02:00
AppPrototype parameter:
```
2021-04-29 10:05:04 +02:00
lweb::#handler_proto_universal ;Works with HTTP POST and GET requests and takes optional a string.
lweb::#handler_proto_post ;Works only with HTTP POST and needs a string.
lweb::#handler_proto_get ;Works only with HTTP GET withouth a string.
```
2021-04-29 10:05:04 +02:00
RouteType parameter:
```
2021-04-29 10:05:04 +02:00
lweb::#handler_only ;React only on a explicit Url (e.g. /rest/v1/test but not /rest/v1/test/sub)
lweb::#handler_sub ;React on a full sub url. (e.g. /rest/v1/test and also /rest/v1/test/sub)
lweb::#handler_type ;React on called file type (e.g. *.php = "php")
```
2021-04-29 10:05:04 +02:00
Response is a simple Stringmap:
`NewMap Response.s()`
2021-04-29 10:05:04 +02:00
Following values must be set in a stringmap:
* `lweb::#cha_R_ResponseType = "ResponseType"` ;Element ResponseType,Mimetype set e.g. `lweb::mimetype("html")`.
* `lweb::#cha_R_ResponseContentType = "ResponseContentType"` ;Element ResponseContentType, `lweb::#response_string` or `lweb::#response_Memory`
* `lweb::#cha_R_MemoryAdress = "MemoryAdress"` ;Element MemoryAdress, convert to string `Str(Adresse)` converted back by `Val()`. After finished the work it will be freed!
* `lweb::#cha_R_MemorySize = "MemorySize"` ;Element MemorySize, convert to string `Str(Size)` converted back by `Val()`.
* `lweb::#cha_R_StringBase64 = "StringBase64"` ;Element StringBase64, Base64 encoded string
* `lweb::#cha_R_http_head_status = "HeaderStatus"` ;`"200 OK"`, `"300 Error"`, `"500 Server Error"` etc.
2021-04-29 10:05:04 +02:00
It's only allowed to response a base64 encoded string or a memoryblock.
2021-04-29 10:05:04 +02:00
Complete example:
```
Procedure.s Sample_Header(Map Header.s())
Define *Text
2021-04-29 10:05:04 +02:00
Define.s Encoded, ToSend, TBD
NewMap Response.s()
TBD="<div><div><h1>Header</h1></div><br/>"+#CRLF$
ResetMap(Header())
While NextMapElement(Header())
TBD = TBD+"<div>"+MapKey(Header())+" : "+Header()+" </div><br/>"+#CRLF$
Wend
*Text = UTF8("<!DOCTYPE html><html><header><title>Alle Client Headers</title></header><body>"+TBD+"</body></html>")
Encoded = Base64Encoder(*Text, MemorySize(*Text))
Debug "Encoded: " + Encoded
Response(lhs_web::#cha_R_ResponseContentType) = lhs_web::#response_string
Response(lhs_web::#cha_R_StringBase64) = Encoded
Response(lhs_web::#cha_R_ResponseType) = lhs_web::mimetype("html")
Response(lhs_web::#cha_R_http_head_status) = "200 OK"
2021-04-29 10:05:04 +02:00
ToSend = lhs_web::MapToJSONString(Response())
Debug "ToSend: " + ToSend
ProcedureReturn ToSend
EndProcedure
lhs_web::register_client_handler("/server/show_client_headers", @Sample_Header(),lhs_web::#handler_proto_get, lhs_web::#handler_sub)
```
2021-04-29 10:05:04 +02:00
### HTML mimetype of a file extension:
`lweb::mimetype(file.s)`
2021-04-29 10:05:04 +02:00
Response is a string.
2021-04-29 10:05:04 +02:00
Converts e.g. `lweb::mimetype("html")` to `"text/html"`
2021-04-29 10:05:04 +02:00
### Convert a map to a JSONString. Interaction for example with a SpiderBasic app.
`lweb::MapToJSONString(Map ConvertMap.s())`
2021-04-29 10:05:04 +02:00
Response is a string.
2021-04-29 10:05:04 +02:00
Example:
```
Response(lhs_web::#cha_R_ResponseContentType) = lhs_web::#response_string
Response(lhs_web::#cha_R_StringBase64) = Encoded
Response(lhs_web::#cha_R_ResponseType) = lhs_web::mimetype("html")
Response(lhs_web::#cha_R_http_head_status) = "200 OK"
2021-04-29 10:05:04 +02:00
ToSend = lhs_web::MapToJSONString(Response())
```
2021-04-29 10:05:04 +02:00
The converted map would be possible to converted back by the main worker procedure (Client thread from lweb.pbi).
2021-04-29 10:05:04 +02:00
### Verification if it is a valid IP Address (IPv6 and IPv4)
`lweb::IsIPStringValid(Adress.s)`
2021-04-29 10:05:04 +02:00
Example:
```
setting = "192.168.256.12"
If lweb::IsIPStringValid(setting)
conf_binding = setting
Else
2021-04-29 10:05:04 +02:00
; failed
conf_binding = "127.0.0.1"
EndIf
```
2021-04-29 10:05:04 +02:00
Validation will be failed because `256` is not valid.
2021-04-29 10:05:04 +02:00
Response is `#True` or `#False.`