Go to file
2017-03-25 08:22:28 -07:00
backends use abstracted storage for flexibility 2016-06-08 20:18:31 -07:00
linx-genkey Remove artifact 2015-10-11 21:42:00 -04:00
static Use value instead of selectedOptions. 2016-10-23 21:07:47 +02:00
templates Add option for maximum expiration time (fixes #99) 2016-09-18 22:05:26 -07:00
.gitignore Add preliminary metadata support 2015-09-27 22:43:41 -04:00
.travis.yml Add ability to short urls for uploaded content (#85) 2016-06-15 08:42:57 -07:00
auth_test.go Rename auth header to Linx-Api-Key and remove 2015-10-14 16:18:29 -04:00
auth.go Rename auth header to Linx-Api-Key and remove 2015-10-14 16:18:29 -04:00
build.sh Update build.sh to build linx-genkey 2015-10-14 16:31:52 -04:00
csp_test.go Adjust the csp_test to use the new mux 2015-10-10 11:17:38 -04:00
csp.go Cleanup vim artifacts 2015-10-04 18:24:13 -04:00
csrf.go Cleanup 2015-10-14 22:47:36 -04:00
delete.go use abstracted storage for flexibility 2016-06-08 20:18:31 -07:00
display.go remove unnecessary file processing in display.go 2016-07-07 19:34:53 -07:00
Dockerfile Add Dockerfile 2016-09-17 19:27:39 -07:00
expiry.go Add option for maximum expiration time (fixes #99) 2016-09-18 22:05:26 -07:00
fileserve.go use abstracted storage for flexibility 2016-06-08 20:18:31 -07:00
headers.go Infer site URL from host and headers 2016-06-04 18:34:22 -07:00
LICENSE.txt Updated README and license 2015-09-28 23:46:50 -04:00
linx-server.service Add Install-section to systemd-service 2016-10-09 14:59:54 +02:00
meta.go Switch to https://github.com/h2non/filetype 2017-03-25 01:08:56 -07:00
pages.go Add option for maximum expiration time (fixes #99) 2016-09-18 22:05:26 -07:00
README.md Fix typo 2016-09-18 22:13:52 -07:00
server_test.go Fix max expiry when provided expiry is 0 2016-11-02 19:31:32 -07:00
server.go Add option for maximum expiration time (fixes #99) 2016-09-18 22:05:26 -07:00
shorturl.go Add ability to short urls for uploaded content (#85) 2016-06-15 08:42:57 -07:00
templates.go Fix that custom sitename gets ignored 2016-06-15 14:33:51 +02:00
torrent_test.go use abstracted storage for flexibility 2016-06-08 20:18:31 -07:00
torrent.go use abstracted storage for flexibility 2016-06-08 20:18:31 -07:00
upload.go Switch to https://github.com/h2non/filetype 2017-03-25 01:08:56 -07:00
util.go Remove spaces in mime mapping and ensure no spaces in filenames 2016-07-22 18:08:59 -07:00

linx-server

Build Status

Self-hosted file/media sharing website.

Features

  • Display common filetypes (image, video, audio, markdown, pdf)
  • Display syntax-highlighted code with in-place editing
  • Documented API with keys if need to restrict uploads (can use linx-client for uploading through command-line)
  • Torrent download of files using web seeding
  • File expiry, deletion key, and random filename options

Screenshots


Get release and run

  1. Grab the latest binary from the releases
  2. Run ./linx-server

Usage

Configuration

All configuration options are accepted either as arguments or can be placed in an ini-style file as such:

maxsize = 4294967296
allowhotlink = true
# etc

...and then invoke linx-server -config path/to/config.ini

Options

  • -bind 127.0.0.1:8080 -- what to bind to (default is 127.0.0.1:8080)
  • -sitename myLinx -- the site name displayed on top (default is inferred from Host header)
  • -siteurl "http://mylinx.example.org/" -- the site url (default is inferred from execution context)
  • -filespath files/ -- Path to store uploads (default is files/)
  • -metapath meta/ -- Path to store information about uploads (default is meta/)
  • -maxsize 4294967296 -- maximum upload file size in bytes (default 4GB)
  • -maxexpiry 86400 -- maximum expiration time in seconds (default is 0, which is no expiry)
  • -allowhotlink -- Allow file hotlinking
  • -contentsecuritypolicy "..." -- Content-Security-Policy header for pages (default is "default-src 'self'; img-src 'self' data:; style-src 'self' 'unsafe-inline'; frame-ancestors 'self'; referrer origin;")
  • -filecontentsecuritypolicy "..." -- Content-Security-Policy header for files (default is "default-src 'none'; img-src 'self'; object-src 'self'; media-src 'self'; style-src 'self' 'unsafe-inline'; frame-ancestors 'self'; referrer origin;")
  • -xframeoptions "..." -- X-Frame-Options header (default is "SAMEORIGIN")
  • -remoteuploads -- (optionally) enable remote uploads (/upload?url=https://...)
  • -nologs -- (optionally) disable request logs in stdout
  • -googleapikey -- (optionally) API Key for Google's URL Shortener. (How to create one)

SSL with built-in server

  • -certfile path/to/your.crt -- Path to the ssl certificate (required if you want to use the https server)
  • -keyfile path/to/your.key -- Path to the ssl key (required if you want to use the https server)

Use with http proxy

  • -realip -- let linx-server know you (nginx, etc) are providing the X-Real-IP and/or X-Forwarded-For headers.

Use with fastcgi

  • -fastcgi -- serve through fastcgi

Require API Keys for uploads

  • -authfile path/to/authfile -- (optionally) require authorization for upload/delete by providing a newline-separated file of scrypted auth keys
  • -remoteauthfile path/to/remoteauthfile -- (optionally) require authorization for remote uploads by providing a newline-separated file of scrypted auth keys

A helper utility linx-genkey is provided which hashes keys to the format required in the auth files.

Deployment

Linx-server supports being deployed in a subdirectory (ie. example.com/mylinx/) as well as on its own (example.com/).

1. Using fastcgi

A suggested deployment is running nginx in front of linx-server serving through fastcgi. This allows you to have nginx handle the TLS termination for example.
An example configuration:

server {
    ...
    server_name yourlinx.example.org;
    ...
    
    client_max_body_size 4096M;
    location / {
        fastcgi_pass 127.0.0.1:8080;
        include fastcgi_params;
    }
}

And run linx-server with the -fastcgi option.

2. Using the built-in https server

Run linx-server with the -certfile path/to/cert.file and -keyfile path/to/key.file options.

3. Using the built-in http server

Run linx-server normally.

4. Using Docker with the built-in http server

First, build the image: docker build -t linx-server .

You'll need some directories for the persistent storage. For the purposes of this example, we will use /media/meta and /media/files.

Then, run it: docker run -p 8080:8080 -v /media/meta:/data/meta -v /media/files:/data/files linx-server

Development

Any help is welcome, PRs will be reviewed and merged accordingly.
The official IRC channel is #linx on irc.oftc.net

  1. go get -u github.com/andreimarcu/linx-server
  2. cd $GOPATH/src/github.com/andreimarcu/linx-server
  3. go build && ./linx-server

License

Copyright (C) 2015 Andrei Marcu

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

Author

Andrei Marcu, http://andreim.net/