New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More

github.com/codeskyblue/gohttpserver

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

github.com/codeskyblue/gohttpserver

v0.0.0-20250208035340-df32f57005d9
Version published
Created

gohttpserver

Docker Automated build

I've recently ported a new one using Python. Have a look at it here: https://github.com/codeskyblue/servefs

  • Goal: Make the best HTTP File Server.

  • Features: Human-friendly UI, file uploading support, direct QR-code generation for Apple & Android install package.

  • 目标: 做最好的HTTP文件服务器

  • 功能: 人性化的UI体验,文件的上传支持,安卓和苹果安装包的二维码直接生成。

Binaries can be downloaded from this repo releases

Requirements

Tested with go-1.16

Screenshots

screen

Features

  • Support QRCode code generate
  • Breadcrumb path quick change
  • All assets package to Standalone binary
  • Different file type different icon
  • Support show or hide hidden files
  • Upload support (auth by token or session)
  • README.md preview
  • HTTP Basic Auth
  • Partial reload pages when directory change
  • When only one dir under dir, path will combine two together
  • Directory zip download
  • Apple ipa auto generate .plist file, qrcode can be recognized by iphone (Require https)
  • Plist proxy
  • Download count statistics
  • CORS enabled
  • Offline download
  • Code file preview
  • Edit file support
  • Global file search
  • Hidden work download and qrcode in small screen
  • Theme select support
  • OK to working behide Nginx
  • .ghs.yml support (like .htaccess)
  • Calculate md5sum and sha
  • Folder upload
  • Support sort by size or modified time
  • Add version info into index page
  • Add api /-/info/some.(apk|ipa) to get detail info
  • Add api /-/apk/info/some.apk to get android package info
  • Auto tag version
  • Custom title support
  • Support setting from conf file
  • Quick copy download link
  • Show folder size
  • Create folder
  • Skip delete confirm when alt pressed
  • Support unzip zip file when upload(with form: unzip=true)

Installation

$ go install github.com/codeskyblue/gohttpserver@latest

Or download binaries from github releases

If you are using Mac, simply run command

$ brew install codeskyblue/tap/gohttpserver

Usage

Listen on port 8000 of all interfaces, and enable file uploading.

$ gohttpserver -r ./ --port 8000 --upload

Use command gohttpserver --help to see more usage.

Docker Usage

share current directory

$ docker run -it --rm -p 8000:8000 -v $PWD:/app/public --name gohttpserver codeskyblue/gohttpserver

Share current directory with http basic auth

$ docker run -it --rm -p 8000:8000 -v $PWD:/app/public --name gohttpserver \
  codeskyblue/gohttpserver \
  --auth-type http --auth-http username1:password1 --auth-http username2:password2

Share current directory with openid auth. (Works only in netease company.)

$ docker run -it --rm -p 8000:8000 -v $PWD:/app/public --name gohttpserver \
  codeskyblue/gohttpserver \
  --auth-type openid

To build image yourself, please change the PWD to the root of this repo.

$ cd gohttpserver/
$ docker build -t codeskyblue/gohttpserver -f docker/Dockerfile .

Authentication options

  • Enable basic http authentication

    $ gohttpserver --auth-type http --auth-http username1:password1 --auth-http username2:password2
    
  • Use openid auth

    $ gohttpserver --auth-type openid --auth-openid https://login.example-hostname.com/openid/
    
  • Use oauth2-proxy with

    $ gohttpserver --auth-type oauth2-proxy
    

    You can configure to let a http reverse proxy handling authentication. When using oauth2-proxy, the backend will use identification info from request headers X-Auth-Request-Email as userId and X-Auth-Request-Fullname as user's display name. Please config your oauth2 reverse proxy yourself. More about oauth2-proxy.

    All required headers list as following.

    headervalue
    X-Auth-Request-EmailuserId
    X-Auth-Request-Fullnameuser's display name(urlencoded)
    X-Auth-Request-Useruser's nickname (mostly email prefix)
  • Enable upload

    $ gohttpserver --upload
    
  • Enable delete and Create folder

    $ gohttpserver --delete
    

Advanced usage

Add access rule by creating a .ghs.yml file under a sub-directory. An example:

---
upload: false
delete: false
users:
- email: "codeskyblue@codeskyblue.com"
  delete: true
  upload: true
  token: 4567gf8asydhf293r23r

In this case, if openid auth is enabled and user "codeskyblue@codeskyblue.com" has logged in, he/she can delete/upload files under the directory where the .ghs.yml file exits.

token is used for upload. see upload with curl

For example, in the following directory hierarchy, users can delete/uploade files in directory foo, but he/she cannot do this in directory bar.

root -
  |-- foo
  |    |-- .ghs.yml
  |    `-- world.txt 
  `-- bar
       `-- hello.txt

User can specify config file name with --conf, see example config.yml.

To specify which files is hidden and which file is visible, add the following lines to .ghs.yml

accessTables:
- regex: block.file
  allow: false
- regex: visual.file
  allow: true

ipa plist proxy

This is used for server on which https is enabled. default use https://plistproxy.herokuapp.com/plist

$ gohttpserver --plistproxy=https://someproxyhost.com/

Test if proxy works:

$ http POST https://someproxyhost.com/plist < app.plist
{
	"key": "18f99211"
}
$ http GET https://someproxyhost.com/plist/18f99211
# show the app.plist content

If your ghs running behide nginx server and have https configed. plistproxy will be disabled automaticly.

Upload with CURL

For example, upload a file named foo.txt to directory somedir

$ curl -F file=@foo.txt localhost:8000/somedir
{"destination":"somedir/foo.txt","success":true}
# upload with token
$ curl -F file=@foo.txt -F token=12312jlkjafs localhost:8000/somedir
{"destination":"somedir/foo.txt","success":true}

# upload and change filename
$ curl -F file=@foo.txt -F filename=hi.txt localhost:8000/somedir
{"destination":"somedir/hi.txt","success":true}

Upload zip file and unzip it (zip file will be delete when finished unzip)

$ curl -F file=@pkg.zip -F unzip=true localhost:8000/somedir
{"success": true}

Note: \/:*<>| are not allowed in filenames.

Deploy with nginx

Recommended configuration, assume your gohttpserver listening on 127.0.0.1:8200

server {
  listen 80;
  server_name your-domain-name.com;

  location / {
    proxy_pass http://127.0.0.1:8200; # here need to change
    proxy_redirect off;
    proxy_set_header  Host    $host;
    proxy_set_header  X-Real-IP $remote_addr;
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header  X-Forwarded-Proto $scheme;

    client_max_body_size 0; # disable upload limit
  }
}

gohttpserver should started with --xheaders argument when behide nginx.

Refs: http://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size

gohttpserver also support --prefix flag which will help to when meet / is occupied by other service. relative issue https://github.com/codeskyblue/gohttpserver/issues/105

Usage example:

# for gohttpserver
$ gohttpserver --prefix /foo --addr :8200 --xheaders

Nginx settigns

server {
  listen 80;
  server_name your-domain-name.com;

  location /foo {
    proxy_pass http://127.0.0.1:8200; # here need to change
    proxy_redirect off;
    proxy_set_header  Host    $host;
    proxy_set_header  X-Real-IP $remote_addr;
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header  X-Forwarded-Proto $scheme;

    client_max_body_size 0; # disable upload limit
  }
}

FAQ

How the query is formated

The search query follows common format rules just like Google. Keywords are seperated with space(s), keywords with prefix - will be excluded in search results.

  • hello world means must contains hello and world
  • hello -world means must contains hello but not contains world

Developer Guide

Depdencies are managed by govendor

  • Build develop version. assets directory must exists
$ go build
$ ./gohttpserver
  • Build single binary release
$ go build

Theme are defined in assets/themes directory. Now only two themes are available, "black" and "green".

Reference Web sites

Go Libraries

History

The old version is hosted at https://github.com/codeskyblue/gohttp

LICENSE

This project is licensed under MIT.

FAQs

Package last updated on 08 Feb 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts