youtransfer / youtransfer Goto Github PK
View Code? Open in Web Editor NEWThe simple but elegant self-hosted file transfer & sharing solution
Home Page: http://www.youtransfer.io
License: Apache License 2.0
The simple but elegant self-hosted file transfer & sharing solution
Home Page: http://www.youtransfer.io
License: Apache License 2.0
It should be possible to send an email (as implemented by #41) using SMTP
Due to changes in the select-section component for the email tab (#44), the storage select-section implementation is no longer valid and the select is broken.
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.
The Code Climate analysis of the repository revealed some styling & code duplication issues (https://codeclimate.com/github/remie/YouTransfer). This should be fixed.
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)
Stuff can go wrong. Deal with it.
The server should return a 404 if the resource is not found
It should be possible to download files by using a unique identifier.
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.
It should be possible to send an email (as implemented by #41) using Amazon SES
There are some small coding issues that need to be fixed.
Issue #61 will remove uploads automatically. The interval should be configurable on the General settings tab.
The readme file should include more information than the project tagline
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.
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();
}
}
To improve the file uploading experience YouTransfer should use Dropzone.js. This issue will address the initial vanilla implementation of Dropzone.
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.
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)
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.
Before starting to work on the overal styling and user experience, there is a need for a good template engine which is available on both server and client. Mozilla's Nunjucks seems to do the trick.
The project needs a website. Should be obvious.
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:
The email template should be adjustable from the settings page
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.
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.
There should be a settings page which allows user to make system adjustment based on their preferences
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.
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.
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.
It should be possible to send an email (as implemented by #41) using sendmail
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.
There are a lot of configurable settings for DropzoneJS (http://www.dropzonejs.com/#configuration). It would be awesome if those can be tweaked from the Settings page.
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.
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.
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)
There are some gaps in the documentation and it should be updated to reflect the current state of the project
The title and subtitle should be editable through the settings page.
This issue depends on #15
Upload retention should be limited. A scheduled task should periodically remove the uploads from disk.
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.
There is a nice demo on how to use the preview template: http://www.dropzonejs.com/bootstrap.html
This can be used to improve the uploading experience
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.
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.
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.
There is no reason to use readFileSync(), this can be adjusted to adhere to the default control flow
Currently, the progressive enhanced version offers more functionality. This should be fixed. The same functionality should be available for noscript users.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.