Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/evandrolg/pegasus.lua
:rocket: Pegasus.lua is an http server to work with web applications written in Lua language.
https://github.com/evandrolg/pegasus.lua
http http-server lua server
Last synced: about 4 hours ago
JSON representation
:rocket: Pegasus.lua is an http server to work with web applications written in Lua language.
- Host: GitHub
- URL: https://github.com/evandrolg/pegasus.lua
- Owner: EvandroLG
- License: mit
- Created: 2014-11-14T15:27:23.000Z (about 10 years ago)
- Default Branch: master
- Last Pushed: 2024-09-30T12:01:13.000Z (about 2 months ago)
- Last Synced: 2024-10-31T19:37:42.752Z (15 days ago)
- Topics: http, http-server, lua, server
- Language: Lua
- Homepage: http://evandrolg.github.io/pegasus.lua/
- Size: 432 KB
- Stars: 417
- Watchers: 33
- Forks: 36
- Open Issues: 14
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[![pegasus.lua](http://evandrolg.github.io/pegasus.lua/pegasus.lua.svg)](http://evandrolg.github.io/pegasus.lua)
An http server to work with web applications written in Lua language [check the site](https://evandrolg.github.io/pegasus.lua).
[![Unix build](https://img.shields.io/github/actions/workflow/status/EvandroLG/pegasus.lua/unix_build.yml?branch=master&label=Unix%20build&logo=linux)](https://github.com/EvandroLG/pegasus.lua/actions/workflows/unix_build.yml)
[![Lint](https://github.com/EvandroLG/pegasus.lua/workflows/Lint/badge.svg)](https://github.com/EvandroLG/pegasus.lua/actions/workflows/lint.yml)
[![HuBoard
badge](http://img.shields.io/badge/Hu-Board-7965cc.svg)](https://huboard.com/EvandroLG/pegasus.lua)
[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/EvandroLG/pegasus.lua?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)## Installation
To install Pegasus.lua, run:
```sh
$ luarocks install pegasus
```## How does it work?
Follow an example:
```lua
local pegasus = require 'pegasus'local server = pegasus:new({
port='9090',
location='example/root'
})server:start(function (request, response)
print "It's running..."
end)
```Or try the [included examples](example/README.md).
## Features
- Compatible with Linux, Mac and Windows systems
- Easy API
- Support Lua >= 5.1
- Native support for HTTP Streaming, aka chunked responses. [Check how it works](https://github.com/EvandroLG/pegasus.lua/blob/master/example/app_stream.lua).
- Native plugin to compress responses using the "gzip" method## API
### Parameters
* `host:string` Host address where the application will run. By default it uses `localhost`
* `port:string` The port where the application will run. By default it's `9090`
* `location:string` Path used by Pegasus to search for the files. By default it's the root
* `plugins:table` List with plugins
* `timeout:number` It's a timeout for estabilishing a connection with the server### Request
#### Properties
* `path:string` A string with the request path
* `headers:table` A table with all the headers data
* `method:function` The output is the request method as a string ('GET', 'POST', etc)
* `querystring:string` It returns a dictionary with all the GET parameters
* `ip:string` It returns the client's ip
* `port:number` It returns the port where Pegasus is running### Response
#### Methods
* `addHeader(string:key, string:value)` Adds a new header
* `addHeaders(table:headers)` It adds news headers
* `statusCode(number:statusCode, string:statusMessage)` It adds a Status Code
* `contentType(string:value)` Adds a value to Content-Type field
* `write(string:body)` It creates the body with the value passed as
parameter
* `writeDefaultErrorMessage(statusCode: string, message:body)` It sets an HTTP status code and writes an error message to the response
* `writeFile(string:file)` It creates the body with the content of the
file passed as parameter
* `post():table` It returns a dictionary with all the POST parameters
* `redirect(location:string, temporary:boolean):` Makes an HTTP redirect to a new location. The status code is set to 302 if temporary is true and false otherwise.```lua
local pegasus = require 'pegasus'local server = pegasus:new({ port='9090' })
server:start(function (req, rep)
rep:addHeader('Date', 'Mon, 15 Jun 2015 14:24:53 GMT'):write('hello pegasus world!')
return rep:close()
end)
```## Native Plugin
* pegasus.plugins.compress
```lua
local Pegasus = require 'pegasus'
local Compress = require 'pegasus.plugins.compress'local server = Pegasus:new({
plugins = { Compress:new() }
})server:start()
```* pegasus.plugins.downloads
```lua
local Pegasus = require 'pegasus'
local Downloads = require 'pegasus.plugins.downloads'local server = Pegasus:new({
plugins = {
Downloads:new {
prefix = "downloads",
stripPrefix = true,
},
}
})server:start()
```* pegasus.plugins.files
```lua
local Pegasus = require 'pegasus'
local Files = require 'pegasus.plugins.files'local server = Pegasus:new({
plugins = {
Files:new {
location = "./",
default = "index.html",
},
}
})server:start()
```* pegasus.plugins.tls
```lua
local Pegasus = require 'pegasus'
local Tls = require 'pegasus.plugins.tls'local server = Pegasus:new({
plugins = {
TLS:new {
wrap = {
mode = "server",
protocol = "any",
key = "./serverAkey.pem",
certificate = "./serverA.pem",
cafile = "./rootA.pem",
verify = {"none"},
options = {"all", "no_sslv2", "no_sslv3", "no_tlsv1"},
},
sni = nil,
},,
}
})server:start()
```## Contributing
### Install Dependencies
```sh
$ make install_dependencies
```### Running tests
```sh
$ make unit_test
```