ci: fix vweb failures (restore the ability to *force* vweb to listen to *only* local interfaces)

pull/13508/head
Delyan Angelov 2022-02-18 10:18:04 +02:00
parent 3d46005195
commit ef5ea0ef21
No known key found for this signature in database
GPG Key ID: 66886C0F12D595ED
2 changed files with 16 additions and 7 deletions

View File

@ -44,7 +44,7 @@ fn main() {
global_config: config global_config: config
} }
eprintln('>> webserver: started on http://localhost:$app.port/ , with maximum runtime of $app.timeout milliseconds.') eprintln('>> webserver: started on http://localhost:$app.port/ , with maximum runtime of $app.timeout milliseconds.')
vweb.run_at(app, 'localhost', http_port) vweb.run_at(app, host: 'localhost', port: http_port, family: .ip) ?
} }
// pub fn (mut app App) init_server() { // pub fn (mut app App) init_server() {

View File

@ -378,21 +378,29 @@ interface DbInterface {
// run - start a new VWeb server, listening to all available addresses, at the specified `port` // run - start a new VWeb server, listening to all available addresses, at the specified `port`
pub fn run<T>(global_app &T, port int) { pub fn run<T>(global_app &T, port int) {
run_at<T>(global_app, '', port) run_at<T>(global_app, host: '', port: port, family: .ip6) or { panic(err.msg()) }
}
[params]
pub struct RunParams {
host string
port int = 8080
family net.AddrFamily = .ip6 // use `family: .ip, host: 'localhost'` when you want it to bind only to 127.0.0.1
} }
// run_at - start a new VWeb server, listening only on a specific address `host`, at the specified `port` // run_at - start a new VWeb server, listening only on a specific address `host`, at the specified `port`
// Example: `vweb.run_at(app, 'localhost', 8099)` // Example: `vweb.run_at(app, 'localhost', 8099)`
[manualfree] [manualfree]
pub fn run_at<T>(global_app &T, host string, port int) { pub fn run_at<T>(global_app &T, params RunParams) ? {
mut l := net.listen_tcp(.ip6, '$host:$port') or { panic('failed to listen $err.code $err') } mut l := net.listen_tcp(params.family, '$params.host:$params.port') or {
return error('failed to listen $err.code $err')
}
// Parsing methods attributes // Parsing methods attributes
mut routes := map[string]Route{} mut routes := map[string]Route{}
$for method in T.methods { $for method in T.methods {
http_methods, route_path := parse_attrs(method.name, method.attrs) or { http_methods, route_path := parse_attrs(method.name, method.attrs) or {
eprintln('error parsing method attributes: $err') return error('error parsing method attributes: $err')
return
} }
routes[method.name] = Route{ routes[method.name] = Route{
@ -400,7 +408,8 @@ pub fn run_at<T>(global_app &T, host string, port int) {
path: route_path path: route_path
} }
} }
println('[Vweb] Running app on http://localhost:$port') host := if params.host == '' { 'localhost' } else { params.host }
println('[Vweb] Running app on http://$host:$params.port/')
for { for {
// Create a new app object for each connection, copy global data like db connections // Create a new app object for each connection, copy global data like db connections
mut request_app := &T{} mut request_app := &T{}