Giter Club home page Giter Club logo

youtransfer's Introduction

Looking for a new maintainer

YouTransfer is looking for contributors who are willing to update out-dated packages, merge pull requests, resolve issues and continue to improve the overal product. If you are interested, please contact me (info at youtransfer dot io).

YouTransfer

GitHub version npm version Build Status Maintainability Test Coverage Dependency Status devDependency Status License Gitter

YouTransfer is a simple but elegant self-hosted file transfer & sharing solution. It is an alternative to paid services like Dropbox and WeTransfer by offering similar features but without limitations, price plans and a lengthy privacy policy. You remain in control of your files.

Created to be installed behind the firewall on private servers, YouTransfer aims to empower organisations and individuals that wish to combine easy-to-use file transfer tooling with security and control.

You can follow the project on Twitter, or read our blog.

Demo

A live demo of YouTransfer is available on http://demo.youtransfer.io
The demo is somewhat limited so it is recommended to run it locally (see quick start section below).

Documentation

Quick Start using Docker

If you wish to install YouTransfer in your own environment without any modifications, the Docker image is the most quick and easy approach. Simply install docker and run:

docker pull remie/youtransfer:stable

You can run the application with the following command:

docker run -d \
-v [path_to_upload_folder]:/opt/youtransfer/uploads \
-v [path_to_config_folder]:/opt/youtransfer/config \
-p 80:5000 \
remie/youtransfer:stable

You can now connect to YouTransfer by browsing to http://[docker_host_ip]/
For more information on Docker deployment, please read the Docker installation instructions.

Additional documentation

You can find additional documentation (incl. installation and usage instructions) on the GitHub Wiki

Contributors

You can contribute by forking the project and sending pull requests.
If you do, please don't forget to add your name to this list!

License & other legal stuff

Licensed under the Apache License, Version 2.0 (the "License"); You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Important usage notice

The YouTransfer project relies heavily on 3rd party Open Source projects. These projects all have their own licenses. Although commercial use of the YouTransfer project is permitted under the Apache 2.0 license, this right is limited to the "original content" created as part of this project. Please make sure you check the licenses of all 3rd party components. The YouTransfer project cannot be held responsible for non-compliance with 3rd party licenses when using this application. The use of 3rd party projects is listed in the dependency section of the package.json or inline in the code (when applicable).

Founded in Holland

Made in Amsterdam with โ™ฅ

youtransfer's People

Contributors

dependabot[bot] avatar fbatiga avatar fmarts avatar gunar avatar lesterpig avatar phindmarsh avatar pquentin avatar remie avatar timotheember avatar vayan avatar wooorm avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

youtransfer's Issues

Add support for non-compatible browsers by implementing fallback mechanism

If the browser does not support Dropzone, it allows for a fallback mechanism which will display a normal file input control. This file input control needs to be styled. In addition, the server-side response needs to be able to deal with the old-fashioned file transfer by updating the UI properly.

This issue is linked to #13 and #12

Improve gulp-watch error handling

There are many occasions in which gulp-watch terminates on a fatal error. By adding proper error handling, gulp-watch should be able to inform the user of the error but continue to scan for changes.

Add UnitTests for modules

The recent refactoring proved that it is very likely that small bugs are introduced when rewriting code. These issues can be prevented with proper unit tests for node modules.

Generic refactoring

Over time there has been some code duplication and the number of lines has grown. This should be refactored into separate components. A generic cleanup and refactoring of code is long overdue.

Write UI tests for important views

The recent refactoring proved that it is very likely that small bugs are introduced when rewriting code. These issues can be prevented with proper UI tests for important views (like pages)

Add settings page

There should be a settings page which allows user to make system adjustment based on their preferences

Documentation: add example .htaccess and nginx config files

YouTransfer does not have an elaborate security scheme with authentication and stuff. To limit the users that can upload files, a reverse proxy should be installed. To help users achieve this a documented example of a .htaccess and nginx configuration file should be added.

Routing is broken due to changes in #78 and #79

The refactoring of #78 and #79 caused an issue in the routing module. The changes of #82 caused an issue in the generation of static assets. Due to their nature, both issues were not noticed by the module and component unit tests.

Add support for sending tokens by email

To enable easy file sharing, the user should be able to email the list of tokens / download links. This includes the ability to provide sender address, recipient address, subject and message.

Write unit tests for components

The recent refactoring proved that it is very likely that small bugs are introduced when rewriting code. These issues can be prevented with proper unit tests for browser components (progressive enhancement)

Wrong implementation of commander.js in youtransfer binary

It should be something like this:

#!/usr/bin/env node

var path = require("path");
var fs = require("fs-extra");
var program = require('commander');

program.version('0.0.5')
       .arguments('<init>', 'Initialise a YouTransfer project')
       .action(run)
       .parse(process.argv);

function run(cmd) {
if(cmd == "init") {
        fs.copy(path.join(__dirname,"../"), process.cwd(), function(err) {
                console.log('YouTransfer project initialised succesfully!');
                console.log('Make sure to run "npm init" and "npm install" to setup your project.');
                console.log('Afterwards, you can start the project by running "npm start"');
        });
} else {
        program.help();
}
}

Add support for bundles

When uploading multiple files, it would be easier to be able to download them as a single ZIP file. A bundle is a meta-descriptor containing a link to all actual files. Upon first download, the ZIP file is generated and stored for sub sequential use.

Check for accept-encoding: gzip in browser request

Currently files are stored gzipped in S3 storage factory. When downloading the files they are streamed while still compressed. This will work in modern browsers as they all have gzip support. However, there are also browsers which do not support gzip. It is recommended to check for accept-encoding.

In addition, locally stored files are currently not compressed when streamed to the browser for downloading. If gzip is supported by the browser, it is also recommended to support compressed file transfer.

Settings: add local storage path field

The local storage path is set hard-coded to './uploads'. This should be configurable from the settings screen, both in terms of absolute path as well as relative path.

Refactor: change settings tab anchors from hash to regular link

The settings page tabs are using #[name] as the href attribute value. This works great for progressively enhanced pages, but it doesn't work for users who have javascript disabled. The settings tabs should be accessible through regular links as well. If progressively enhanced, the settings page tabs should be partially updated using XHR.

Allow lockdown of settings

The settings page is very useful for configuring the application, but not very secure. It should be possible for users to disable access to the settings page once the initial configuration is completed. Alterations to the system settings will have to be done on the file system once the settings page has been disabled. The users should receive a clear warning on the consequences of locking down the settings.

UI improvements

The user interface can be improved by adding XHR form submit, dynamic alerts and sub navigation in the settings page (based on select input field)

Do not use readFileSync()

There is no reason to use readFileSync(), this can be adjusted to adhere to the default control flow

Settings: add 'baseUrl' field

The token link is generated using the 'baseUrl' setting. This defaults to Restify .url property, which in most cases is not correct (specifically, Docker images). A manual override of the baseUrl setting is required to ensure the links are working.

Add /download landing page

For security reasons, it might be a good idea to limit access to the YouTransfer application using a reverse proxy with advanced security features. This should not block access to downloading of files. The easiest way to achieve that is by granting access to the "/download" url pattern. However, this currently does not have a landing page that enables users to download files using the received token.

Add support for Amazon S3 file upload

For those who do not want to rely on local storage, it could be useful if YouTransfer allows file upload to an S3 bucket. To support this, there is a need for:

Minimal implementation

  • a settings page section that allows configuration of AWS access keys
  • documentation on how to create the S3 bucket and configure access control
  • implementation of AWS SDK to support server-side upload

Progressive enhancement

  • Signing of a AWS token to support client-side upload to bucket
  • Implementation of client-side AWS upload in dropzone

Create NPM package

Users should be enabled to create their own project based on YouTransfer. An NPM package should be created which allows users to initialise a new project with YouTransfer template.

Partials are accessible by name

Resolving #19 resulted in the accessibility of with partials and other nunjuck templates as if they are regular pages. For instance, the download.html partial is now accessible through /download. This is not intended behaviour. Only pages should be served by Restify.

Update documentation

There are some gaps in the documentation and it should be updated to reflect the current state of the project

Display file token after successful upload

In order to be able to download a file, a file token needs to be provided. This needs to be provided by the server in the post response (JSON) and dealt with by the client. In addition, the server-side templates should also provide this information in order to support non-compatible browsers.

This issue is linked to #12 which will provide the correct layout and client-side API to deal with the response.

Settings: add upload retention

The cleanup schedule (#61) will remove files based on their retention settings. The default is 1 week, but that should be configurable in the Storage settings tab.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.