
Security News
High Salaries No Longer Enough to Attract Top Cybersecurity Talent
A survey of 500 cybersecurity pros reveals high pay isn't enough—lack of growth and flexibility is driving attrition and risking organizational security.
github.com/codeskyblue/gohttpserver
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
Tested with go-1.16
download
and qrcode
in small screen/-/info/some.(apk|ipa)
to get detail info/-/apk/info/some.apk
to get android package info$ 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
Listen on port 8000 of all interfaces, and enable file uploading.
$ gohttpserver -r ./ --port 8000 --upload
Use command gohttpserver --help
to see more 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 .
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.
header | value |
---|---|
X-Auth-Request-Email | userId |
X-Auth-Request-Fullname | user's display name(urlencoded) |
X-Auth-Request-User | user's nickname (mostly email prefix) |
Enable upload
$ gohttpserver --upload
Enable delete and Create folder
$ gohttpserver --delete
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
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.
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.
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
}
}
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
Depdencies are managed by govendor
$ go build
$ ./gohttpserver
$ go build
Theme are defined in assets/themes directory. Now only two themes are available, "black" and "green".
Go Libraries
The old version is hosted at https://github.com/codeskyblue/gohttp
This project is licensed under MIT.
FAQs
Unknown package
Did you know?
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.
Security News
A survey of 500 cybersecurity pros reveals high pay isn't enough—lack of growth and flexibility is driving attrition and risking organizational security.
Product
Socket, the leader in open source security, is now available on Google Cloud Marketplace for simplified procurement and enhanced protection against supply chain attacks.
Security News
Corepack will be phased out from future Node.js releases following a TSC vote.