All Projects → mjpclab → go-http-file-server

mjpclab / go-http-file-server

Licence: MIT License
Simple command line based HTTP file server to share local file system

Programming Languages

go
31211 projects - #10 most used programming language
javascript
184084 projects - #8 most used programming language
shell
77523 projects
CSS
56736 projects
HTML
75241 projects

Projects that are alternatives of or similar to go-http-file-server

smbaudit
Perform various SMB-related attacks, particularly useful for testing large Active Directory environments.
Stars: ✭ 31 (-65.56%)
Mutual labels:  share
linkcast
Share links, images, blogs and everything on the web with your friends in one click using this chrome extension Linkcast
Stars: ✭ 13 (-85.56%)
Mutual labels:  share
ttdl
TTDL - Terminal Todo List Manager
Stars: ✭ 91 (+1.11%)
Mutual labels:  cmdline
browndust-share
This website is for browndust formation sharing
Stars: ✭ 18 (-80%)
Mutual labels:  share
GoRAT
GoRAT (Go Remote Access Tool) is an extremely powerful reverse shell, file server, and control plane using HTTPS reverse tunnels as a transport mechanism.
Stars: ✭ 34 (-62.22%)
Mutual labels:  file-server
Pix
🎨 Pix is an online pixel art community where everyone can unleash their creativity on a 16x16 canvas, built with React-Native for iOS devices. 🚀
Stars: ✭ 86 (-4.44%)
Mutual labels:  share
pimba
Pimba is a minimalist command-line tool written in Go to publish and serve static files.
Stars: ✭ 12 (-86.67%)
Mutual labels:  static-server
sharethis-reactjs
Official ShareThis Social Media Sharing Buttons For React.js
Stars: ✭ 32 (-64.44%)
Mutual labels:  share
react-custom-share
Social media share buttons for ReactJS. Use one of the built-in button themes or create a custom one from scratch.
Stars: ✭ 47 (-47.78%)
Mutual labels:  share
OneClip
Share your clipboard with people nearby. No Setup, No Signup.
Stars: ✭ 45 (-50%)
Mutual labels:  share
zhamao-framework
协程、高性能、灵活的聊天机器人 & Web 开发框架(炸毛框架)
Stars: ✭ 99 (+10%)
Mutual labels:  cmdline
goup
MIRROR
Stars: ✭ 16 (-82.22%)
Mutual labels:  file-server
godot-custom-mobile-template
Godot Game Engine Custom Mobile Template
Stars: ✭ 70 (-22.22%)
Mutual labels:  share
jQuery-Awesome-Sosmed-Share-Button
Awesome Social Media Share Button With Share Count
Stars: ✭ 58 (-35.56%)
Mutual labels:  share
cockpit-samba-manager
A Cockpit plugin to manage Samba shares and users.
Stars: ✭ 28 (-68.89%)
Mutual labels:  share
DarkHider
Hide your important notes , text messages , phone numbers and more in pictures and protect your privacy.
Stars: ✭ 25 (-72.22%)
Mutual labels:  share
kap-streamable
Kap plugin - Share on Streamable
Stars: ✭ 27 (-70%)
Mutual labels:  share
iOS interviews
iOS Interviews - 史上最贴心 iOS 面试知识点分享!不只是 iOS !只为技术的执拗 !👍 全网火速更新中 🔥 期待你的讨论,期待你的 issue ! 🌟
Stars: ✭ 25 (-72.22%)
Mutual labels:  share
Godot-Share
Simple share text and/or image module for Godot Engine (Android & iOS)
Stars: ✭ 58 (-35.56%)
Mutual labels:  share
netflix-list-exporter
💫‎‎‎‏‏‎ An Extension to export your lists from Netflix to Clipboard area and share it with your friends.
Stars: ✭ 60 (-33.33%)
Mutual labels:  share

Go HTTP File Server

Simple command line based HTTP file server to share local file system.

Go HTTP File Server pages

Features

  • More friendly UI than Apache/Nginx directory index page
  • Adapt for mobile display
  • Single executable file
  • Can download the whole contents of current directory as archive file if enabled
  • Can upload files to current directory if enabled
  • Can specify a custom theme for page rendering
  • Support location alias(mount another directory to url location)

Compile

Minimal required Go version is 1.16.

GO111MODULE=auto go build src/main.go

Will generate executable file "main" in current directory.

Examples

Start server on port 8080, root directory is current working directory:

ghfs -l 8080

Start server on port 8080, root directory is /usr/share/doc:

ghfs -l 8080 -r /usr/share/doc

Start server on default port, root directory is /tmp, and allow upload files to file system directory /tmp/data:

ghfs -r /tmp -u /data

Share files from /etc, but also mount /usr/share/doc to url path /doc

ghfs -r /etc -a :/doc:/usr/share/doc

Start server on port 8080, serve for HTTPS protocol

ghfs -k /path/to/certificate/key -c /path/to/certificate/file -l 8080

Do not show hidden unix directories and files that starts with .. Tips: wrap wildcard by quotes to prevent expanding by shell.

ghfs -H '.*'

Show access log on console:

ghfs -L -

Http Basic Auth:

  • requires authentication for url /files
  • username: user1, password: pass1
  • username: user2, password: pass2
ghfs --auth /files --user user1:pass1 --user-sha1 user2:8be52126a6fde450a7162a3651d589bb51e9579d

Start 2 virtual hosts:

  • server 1
    • listen on port 80 for http
    • listen on port 443 for https
      • cert file: /cert/server1.pem
      • key file: /cert/server1.key
    • hostname: server1.example.com
    • root directory: /var/www/server1
  • server 2
    • listen on port 80 for http
    • listen on port 443 for https
      • cert file: /cert/server2.pem
      • key file: /cert/server2.key
    • hostname: server2.example.com
    • root directory: /var/www/server2
ghfs --listen-plain 80 --listen-tls 443 -c /cert/server1.pem -k /cert/server1.key --hostname server1.example.com -r /var/www/server1 ,, --listen-plain 80 --listen-tls 443 -c /cert/server2.pem -k /cert/server2.key --hostname server2.example.com -r /var/www/server2

Usage

ghfs [options]

-l|--listen <ip|port|:port|ip:port|socket> ...
    IP and port the server listens on, e.g. ":80" or "127.0.0.1:80".
    If --cert and --key are specified, port listens for TLS connection.
    If port is not specified, use "80" for pure HTTP mode, or "443" for TLS mode.
    If value contains "/" then treat it as a unix socket file.
    Flag "-l" or "--listen" can be ommitted.
--listen-plain <ip|port|:port|ip:port|socket> ...
    Similar to --listen, but force to use non-TLS mode
--listen-tls <ip|port|:port|ip:port|socket> ...
    Similar to --listen, but force to use TLS mode, will failed if cert or key is not specified.

--hostname <hostname> ...
    Specify hostname associated with current virtual host.
    If value starts with ".", treat it as a suffix, to match all levels of sub domains. e.g. ".example.com"
    If value ends with ".", treat it as a prefix, to match all levels of suffix domains.

-r|--root <directory>
    Root directory of the server.
    Defaults to current working directory.

-R|--empty-root
    Use virtual empty directory as root directory.
    Useful to share alias directories only.

--default-sort <sortBy>
    Default sort rule for files and directories.
    Available sort key:
    - `n` sort by name ascending
    - `N` sort by name descending
    - `e` sort by type(suffix) ascending
    - `E` sort by type(suffix) descending
    - `s` sort by size ascending
    - `S` sort by size descending
    - `t` sort by modify time ascending
    - `T` sort by modify time descending
    - `_` no sort
    Directory sort:
    - `/<key>` directories before files
    - `<key>/` directories after files
    - `<key>` directories mixed with files

-I|--dir-index <file> ...
    Specify default index file for directory.

-a|--alias <separator><url-path><separator><fs-path> ...
    Set path alias.
    Mount a file system path to URL path.
    e.g. ":/doc:/usr/share/doc"
-b|--bind <separator><url-path><separator><fs-path> ...
    Similar to --alias, but the url path is case-insensitive.

--header <name>:<value> ...
    Set custom HTTP response header.

-U|--global-upload
    Allow upload files for all url paths.
    Use it with care.
-u|--upload <url-path> ...
    Set url paths(and sub paths) that allows to upload files.
    Use it with care.
--upload-dir <fs-path> ...
    Similar to --upload, but use file system path instead of url path.
    Use it with care.

    Notes for upload options:
        If filename exists and is a regular file,
        will try to remove it first if deleting is enabled(e.g. by --delete),
        otherwise will try to add or increase numeric suffix.
        For directory upload mode, sub directories will be uploaded only if mkdir is enabled.

--global-mkdir
    Allow create sub directory under all url paths.
--mkdir <url-path> ...
    Allow create sub directory under specific url paths(and sub paths).
--mkdir-dir <fs-path> ...
    Similar to --mkdir, but use file system path instead of url path.

    Notes for mkdir options:
        To avoid ambiguity, names shadowed by aliased items cannot be created.

--global-delete
    Allow delete items under all url paths.
--delete <url-path> ...
    Allow delete items under specific url paths(and sub paths).
--delete-dir <fs-path> ...
    Similar to --delete, but use file system path instead of url path.

    Notes for delete options:
        To avoid ambiguity, aliased items under a path cannot be deleted.
        Non-aliased files/directories inside aliased items still can be deleted.
        To avoid ambiguity, files/directories shadowed by aliased items cannot be deleted.

-A|--global-archive
    Allow user to download the whole contents of current directory for all url paths.
    A download link will appear on top part of the page.
    Make sure there is no circular symbol links.
--archive <url-path> ...
    Allow user to download the whole contents of current directory for specific url paths(and sub paths).
--archive-dir <fs-path> ...
    Similar to --archive, but use file system path instead of url path.

--global-cors
    Allow CORS requests for all url path.
--cors <url-path> ...
    Allow CORS requests for specific url paths(and sub paths).
--cors-dir <fs-path> ...
    Allow CORS requests for specific file system paths(and sub paths).

--global-auth
    Use Basic Auth for all url path.
--auth <url-path> ...
    Use Basic Auth for specific url paths(and sub paths).
--auth-dir <fs-path> ...
    Use Basic Auth for specific file system paths(and sub paths).
--user [<username>]:[<password>] ...
    Specify users for current virtual host for Basic Auth, empty username and/or password is allowed.
--user-base64 [<username>]:[<base64-password>] ...
--user-md5 [<username>]:<md5-password> ...
--user-sha1 [<username>]:<sha1-password> ...
--user-sha256 [<username>]:<sha256-password> ...
--user-sha512 [<username>]:<sha512-password> ...
    Specify users for Basic Auth, with encoded password.
--user-match-case
    Username is case sensitive.

-c|--cert <file>
    Specify TLS certificate file.

-k|--key <file>
    Specify key file of TLS certificate.

--theme <file>
    Specify a zip archive file as custom theme for rendering page and assets, instead of builtin ones.
    Theme contents are cached in memory at runtime.
--theme-dir <directory>
    Specify a directory which contains theme files.
    Theme contents will be evaluated for each request.
    It is convenient for developing themes.

    Notes for theme options:
        --theme and --theme-dir are mutually exclusive.
        --theme-dir is prior.
        Page template filename is always "index.html".
        Use "?asset=<asset-path>" to reference an asset in theme.

--hsts
    Enable HSTS(HTTP Strict Transport Security).
    Only available if current virtual host listens both plain HTTP and TLS on standard ports.
--to-https [<target-port>]
    Redirect plain HTTP request to HTTPS TLS port.
    Target port must be exists in --listen-tls of current virtual host.
    If target port is omitted, the first item from --listen-tls will be used.

-S|--show <wildcard> ...
-SD|--show-dir <wildcard> ...
-SF|--show-file <wildcard> ...
    If specified, files or directories match wildcards(except hidden by hide option) will be shown. 

-H|--hide <wildcard> ...
-HD|--hide-dir <wildcard> ...
-HF|--hide-file <wildcard> ...
    If specified, files or directories match wildcards will not be shown.

-L|--access-log <file>
    Access log file.
    Set "-" to use stdout.
    Set to empty to disable access log.

-E|--error-log <file>
    Error log file.
    Set "-" to use stderr.
    Set to empty to disable error log.
    Defaults to "-".

--config <file>
    External config file to load for current virtual host.

    Its content is option list of any other options,
    same as the form specified on command line,
    separated by whitespace characters.

    The external config's priority is lower than arguments specified on command line.
    If one option is specified on command line, then external config of that option is ignored.

,,
    To specify multiple virtual hosts with options, split these hosts' options by this sign.
    Options above can be specified for each virtual host.

    If multiple virtual hosts share same IP and ports,
    use --hostname to identify them according to the request.
    If request host name does not match any virtual host,
    server will try to use first virtual host that has no hostname,
    otherwise use the first virtual host.

Environment variables

GHFS_QUIET

To prevent outputting additional information on console, like accessible URLs, etc, set value to "1".

Shortcut key for default theme

  • , : move focus between path items
  • Ctrl/Opt + : move focus to first path item
  • Ctrl/Opt + : move focus to last path item
  • , : move focus between file items
  • Ctrl/Opt + : move focus to first file item
  • Ctrl/Opt + : move focus to last file item
  • Repeat inputting same character will look for next file that prefixes with it.
  • Non-repeat inputs will be remembered as a string in short time to look for next file prefix match.
  • When upload is enabled, pasting(Ctrl/Cmd + v) image or text content will upload that content as a file.
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].