diff --git a/cmd/ipfs/daemon.go b/cmd/ipfs/daemon.go index dced8f9edd2a..6869a6e5b1cc 100644 --- a/cmd/ipfs/daemon.go +++ b/cmd/ipfs/daemon.go @@ -409,9 +409,9 @@ func serveHTTPApi(req cmds.Request) (error, <-chan error) { if err != nil { return fmt.Errorf("serveHTTPApi: Option(%s) failed: %s", unrestrictedApiAccessKwd, err), nil } - gatewayOpt := corehttp.GatewayOption(corehttp.WebUIPaths...) + gatewayOpt := corehttp.GatewayOption(false, corehttp.WebUIPaths...) if unrestricted { - gatewayOpt = corehttp.GatewayOption("/ipfs", "/ipns") + gatewayOpt = corehttp.GatewayOption(true, "/ipfs", "/ipns") } var opts = []corehttp.ServeOption{ @@ -480,8 +480,8 @@ func serveHTTPGateway(req cmds.Request) (error, <-chan error) { if err != nil { return fmt.Errorf("serveHTTPGateway: req.Option(%s) failed: %s", writableKwd, err), nil } - if writableOptionFound { - cfg.Gateway.Writable = writable + if !writableOptionFound { + writable = cfg.Gateway.Writable } gwLis, err := manet.Listen(gatewayMaddr) @@ -502,7 +502,7 @@ func serveHTTPGateway(req cmds.Request) (error, <-chan error) { corehttp.CommandsROOption(*req.InvocContext()), corehttp.VersionOption(), corehttp.IPNSHostnameOption(), - corehttp.GatewayOption("/ipfs", "/ipns"), + corehttp.GatewayOption(writable, "/ipfs", "/ipns"), } if len(cfg.Gateway.RootRedirect) > 0 { diff --git a/cmd/ipfswatch/main.go b/cmd/ipfswatch/main.go index 4b50590cf5bb..a7474321cd69 100644 --- a/cmd/ipfswatch/main.go +++ b/cmd/ipfswatch/main.go @@ -85,12 +85,11 @@ func run(ipfsPath, watchPath string) error { if err != nil { return err } - cfg.Gateway.Writable = true if *http { addr := "/ip4/127.0.0.1/tcp/5001" var opts = []corehttp.ServeOption{ - corehttp.GatewayOption("/ipfs", "/ipns"), + corehttp.GatewayOption(true, "/ipfs", "/ipns"), corehttp.WebUIOption, corehttp.CommandsOption(cmdCtx(node, ipfsPath)), } diff --git a/core/corehttp/gateway.go b/core/corehttp/gateway.go index 869fbf8151da..06e073297793 100644 --- a/core/corehttp/gateway.go +++ b/core/corehttp/gateway.go @@ -16,7 +16,7 @@ type GatewayConfig struct { PathPrefixes []string } -func GatewayOption(paths ...string) ServeOption { +func GatewayOption(writable bool, paths ...string) ServeOption { return func(n *core.IpfsNode, _ net.Listener, mux *http.ServeMux) (*http.ServeMux, error) { cfg, err := n.Repo.Config() if err != nil { @@ -25,7 +25,7 @@ func GatewayOption(paths ...string) ServeOption { gateway := newGatewayHandler(n, GatewayConfig{ Headers: cfg.Gateway.HTTPHeaders, - Writable: cfg.Gateway.Writable, + Writable: writable, PathPrefixes: cfg.Gateway.PathPrefixes, }) diff --git a/test/sharness/t0111-gateway-writeable.sh b/test/sharness/t0111-gateway-writeable.sh index 7b0f83d8413f..a085dd020f50 100755 --- a/test/sharness/t0111-gateway-writeable.sh +++ b/test/sharness/t0111-gateway-writeable.sh @@ -9,6 +9,16 @@ test_description="Test HTTP Gateway (Writable)" . lib/test-lib.sh test_init_ipfs + +test_launch_ipfs_daemon --writable + +test_expect_success "ipfs daemon --writable overrides config" ' + curl -v -X POST http://$GWAY_ADDR/ipfs/ 2> outfile && + grep "HTTP/1.1 201 Created" outfile && + grep "Location: /ipfs/QmbFMke1KXqnYyBBWxB74N4c5SBnJMVAiMNRcGu6x1AwQH" outfile +' + +test_kill_ipfs_daemon test_config_ipfs_gateway_writable test_launch_ipfs_daemon