Skip to content

Commit

Permalink
change server bind address (rojo-rbx#403)
Browse files Browse the repository at this point in the history
* web/mod.rs - change server bind address

127.0.0.1 is a loopback interface, and only works on the same host
0.0.0.0 will allow connections from other hosts

ideally, this should be a console arg - but it's a quick fix

* implement --address option, revert default bind address to 127.0.0.1

* revert silly autoformatting

* ok, actually using rustfmt now

* More precise --address flag description

* Use SocketAddr where available, take advantage of const-ness

* Display 'localhost' if address is loopback

* Update Changelog

Co-authored-by: Lucien Greathouse <me@lpghatguy.com>
  • Loading branch information
4xMSAA and LPGhatguy authored Mar 19, 2021
1 parent 523d4c7 commit 725e5f8
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 9 deletions.
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
# Rojo Changelog

## Unreleased Changes
* Added `--address` flag to `rojo serve` to allow for external connections. ([#403][pr-403])

[pr-403]: https://github.com/rojo-rbx/rojo/pull/403

## [7.0.0-alpha.2][7.0.0-alpha.2] (February 19, 2021)
* Fixed incorrect protocol version between the client and server.
Expand Down
7 changes: 6 additions & 1 deletion src/cli/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ use std::{
env,
error::Error,
fmt,
net::IpAddr,
path::{Path, PathBuf},
str::FromStr,
};
Expand Down Expand Up @@ -186,7 +187,11 @@ pub struct ServeCommand {
#[structopt(default_value = "")]
pub project: PathBuf,

/// The port to listen on. Defaults to the project's preference, or 34872 if
/// The IP address to listen on. Defaults to `127.0.0.1`.
#[structopt(long)]
pub address: Option<IpAddr>,

/// The port to listen on. Defaults to the project's preference, or `34872` if
/// it has none.
#[structopt(long)]
pub port: Option<u16>,
Expand Down
18 changes: 14 additions & 4 deletions src/cli/serve.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
use std::{
io::{self, Write},
net::IpAddr,
net::Ipv4Addr,
sync::Arc,
};

Expand All @@ -13,35 +15,43 @@ use crate::{
web::LiveServer,
};

const DEFAULT_BIND_ADDRESS: Ipv4Addr = Ipv4Addr::new(127, 0, 0, 1);
const DEFAULT_PORT: u16 = 34872;

pub fn serve(global: GlobalOptions, options: ServeCommand) -> Result<()> {
let vfs = Vfs::new_default();

let session = Arc::new(ServeSession::new(vfs, &options.absolute_project())?);

let ip = options.address.unwrap_or(DEFAULT_BIND_ADDRESS.into());

let port = options
.port
.or_else(|| session.project_port())
.unwrap_or(DEFAULT_PORT);

let server = LiveServer::new(session);

let _ = show_start_message(port, global.color.into());
server.start(port);
let _ = show_start_message(ip, port, global.color.into());
server.start((ip, port).into());

Ok(())
}

fn show_start_message(port: u16, color: ColorChoice) -> io::Result<()> {
fn show_start_message(bind_address: IpAddr, port: u16, color: ColorChoice) -> io::Result<()> {
let writer = BufferWriter::stdout(color);
let mut buffer = writer.buffer();

writeln!(&mut buffer, "Rojo server listening:")?;

write!(&mut buffer, " Address: ")?;
buffer.set_color(ColorSpec::new().set_fg(Some(Color::Green)).set_bold(true))?;
writeln!(&mut buffer, "localhost")?;

if bind_address.is_loopback() {
writeln!(&mut buffer, "localhost")?;
} else {
writeln!(&mut buffer, "{}", bind_address)?;
}

buffer.set_color(&ColorSpec::new())?;
write!(&mut buffer, " Port: ")?;
Expand Down
6 changes: 2 additions & 4 deletions src/web/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ pub mod interface;
mod ui;
mod util;

use std::sync::Arc;
use std::{net::SocketAddr, sync::Arc};

use futures::{
future::{self, FutureResult},
Expand Down Expand Up @@ -57,9 +57,7 @@ impl LiveServer {
LiveServer { serve_session }
}

pub fn start(self, port: u16) {
let address = ([127, 0, 0, 1], port).into();

pub fn start(self, address: SocketAddr) {
let server = Server::bind(&address)
.serve(move || {
let service: FutureResult<_, hyper::Error> =
Expand Down

0 comments on commit 725e5f8

Please sign in to comment.