Code Monkey home page Code Monkey logo

mickael-kerjean / filestash Goto Github PK

View Code? Open in Web Editor NEW
9.5K 107.0 691.0 83.26 MB

🦄 A modern web client for SFTP, S3, FTP, WebDAV, Git, Minio, LDAP, CalDAV, CardDAV, Mysql, Backblaze, ...

Home Page: https://www.filestash.app/

License: GNU Affero General Public License v3.0

Shell 0.26% Makefile 0.10% SCSS 4.89% CSS 3.80% JavaScript 51.07% HTML 0.63% Emacs Lisp 3.73% Dockerfile 0.14% Go 30.76% C 2.11% RPC 2.49%
file-manager file-upload ftp-client sftp-client webdav-client webapp dropbox-client google-drive s3-client ftp

filestash's Introduction

screenshot

A Dropbox-like file manager that let you manage your data anywhere it is located:
FTP • FTPS • SFTPWebDAV • Git • S3 • NFS • Samba • Artifactory • LDAP • Mysql
Storj • CardDAV • CalDAV • Backblaze B2 • Minio
Dropbox • Google Drive

demo button

Features

  • Manage your files from a browser
  • Authentication middleware to connect to various source of user
  • Flexible Share mechanism
  • Chromecast support for images, music, and videos
  • Video player
  • Video transcoding (mov, mkv, avi, mpeg, and more)
  • Image viewer
  • Image transcoding (raw images from Nikon, Canon, and more)
  • Photo management
  • Audio player
  • Shared links are full fledge network drive
  • Office documents (docx, xlsx and more)
  • Full org mode client (documentation)
  • User friendly
  • Mobile friendly
  • Customisable
  • Plugins
  • Super fast
  • Upload files and folders
  • Download as zip
  • Multiple cloud providers and protocols, easily extensible
  • Nyan cat loader
  • Quick access: frequently access folders are pin to the homepage
  • Emacs, VIM or Sublime keybindings ;)
  • Search
  • .. and many more

Documentation

Screenshots

user experience on navigation

user experience on medias

The core idea

Filestash started as an attempt to solve the Dropbox problem by abstracting the storage aspect so you can "bring your own backend" by implementing this interface:

type IBackend interface {
	Init(params map[string]string, app *App) (IBackend, error) // constructor
	Ls(path string) ([]os.FileInfo, error)           // list files in a folder
	Cat(path string) (io.ReadCloser, error)          // download a file
	Mkdir(path string) error                         // create a folder
	Rm(path string) error                            // remove something
	Mv(from string, to string) error                 // rename something
	Save(path string, file io.Reader) error          // save a file
	Touch(path string) error                         // create a file
	LoginForm() Form                                 // dynamic form generation for the login
}

It has evolved with plugins which are the lego bricks you can assemble together to form a solution that works for you. You can bring your own identity provider, your own authorisation, your own search and more. If there's something you want, plugin will likely make it possible.

Some outside the box example of this "filesystem as a framework" ideas we've done for the sake of science:

  • mysql plugin which shows databases as folders, tables as subfolder and rows as individual files. When opening a file (= a row), the user is presented with a form that is dynamically rendered from the DB schema and can be edit and saved back to mysql by people who have no knowledge of SQL.
  • ldap backend from which you can browse through a LDAP directory and also view / edit record it contains. eg: this public ldap

Support

Credits

filestash's People

Contributors

adan89lion avatar alex-phillips avatar alexanghh avatar arubacao avatar bramas avatar brxie avatar c0xc avatar coxde avatar darkdragon-001 avatar dependabot[bot] avatar edgar-vincent avatar faangbait avatar filiphanes avatar haarolean avatar mickael-kerjean avatar microyahoo avatar nebucatnetzer avatar pieshka avatar rboeters avatar robertdawson2 avatar rodber avatar rojenzaman avatar sazarkin avatar stelam avatar subdavis avatar thielepaul avatar vigonotion avatar writingdeveloper avatar yanickxia avatar zph 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  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

filestash's Issues

Audio Player

play music with an audio widget that stuck in the interface, spotify like

emacs binding

  • Tab
  • Shift-Tab
  • Alt-Left
    • title
    • numbered list
    • item list
  • Alt-Enter
    • title
    • numbered list
    • item list
  • Alt-Right
    • title
    • numbered list
    • item list
  • Alt-Up
    • title
    • numbered list
    • item list
  • Alt-Down
    • title
    • numbered list
    • item list
  • Alt Shift Left
    • title
  • Alt Shift Right
    • title
  • Shift-Alt-Enter
    • title
    • numbered list
    • item list
  • Shift-Left
    • title
  • Shift-Right
    • title
  • C-x C-c

Video player

play movies straight from the interface:

  1. the view page is the full size video and the other page show show the video player in a smaller screen like the youtube app
  2. manage subtitles
  3. ffmpeg on a separate instance to not slow down the main app and get better control on the resources

SFTP: "Unknown path" error for any path

Hi, this seems like a great project! Could you look into an sftp issue or direct me to where should I do digging?

Environment: Windows 7 x64
Node.js v8.6.0
Nuage: git cloned on 2018-05-08
Remote server: Ubuntu 14.04.3 in LAN (192.168.0.102)

After successfully connecting to server via sftp the error is shown:

Oops!
It seems this directory doesn't exist
{"message":"Unknown Path"}

 info: GET /api/files/ls?path=%2F 404 2ms res=undefined, req=undefined, responseTime=2, host=127.0.0.1, protocol=http, method=GET, pathname=/api/files/ls?path=%2F, ip=::ffff:127.0.0.1, referrer=http://127.0.0.1:8334/files/, status=404

This happens even if path is set to user's home directory in advanced settings upon login.
I tried to debug it a bit and it seems that path always falls back to "\" for some reason.

search

Search bar could be incorporate in the page with all the files as a menubar. Searching will:

  1. get result in current folder
  2. do a global search using current data from cache (lunr on a service worker?) with filters for type of content: text, video, audio, image

bug: oauth

Dropbox and google drive login seems broken

bug: file element

  • user shouldn't be able to perform an action if a task on the same element is already running
  • sometimes (not all the time), if something goes wrong while mv,rm or touch something, the item is shown with a loading indicator

Create a mailing list to communicate new release and security updates

It seems quite a bit of people and even companies are already using nuage. I guess I'll have to create a page to register those and provide communication.

Need: form with different plan:
0$: just get the new release info and security update
5$ and more: SLA on support + get security update before everyone else so it can be fix before official communication

Irritating bug

SYMPTOM: Sometimes (not always), some assets don't load correctly. When it occurs, the app shows a with a white screen and god knows why those assets don't load correctly in the first place

Reproduction:

0. with clean state (incognito mode), throttle the network bandwith to "slow 3G"
1. go to: https://nuage.kerjean.me/files/Org/
2. automatic redirection to logout
3. page blocked with a message in the console: GET https://nuage.kerjean.me/js/app.js net::ERR_FAILED 

emacs org mode

add a few buttons on org mode for mobile:

  • fold toggle button
  • agenda view
  • list todo entries

feature: form viewer

The idea is to have a framework for building extensible form that can be use by a connector to send formatted data. Example of connector where this can be usefull:

  • LDAP
  • SQL DB
  • CMS stuff

default path

default path should change what a user see as the root folder

https://nuage.kerjean.me leads to a redirect loop

Steps to reproduce:

  1. Open a new browser window/tab on any webpage
  2. Navigate to https://nuage.kerjean.me/
  3. (Automatically be redirected to https://nuage.kerjean.me/login)
  4. Press back button

Expected result:

  • Browser can navigate back to original webpage

Actual result:

I haven't tried it, but I'm guessing this does not happen when the browser has a valid nuage session active.

Seen on Firefox 59.0.2 and Chrome 66.0.3359.139

Feature - login deep link

Reason: Would be quite convenient to login straight without having to fill the login form buton only by using 1 link

UI SPEC:

- the link can be setup in the login page
- in the advanced checkbox, create a `deep link` button 
- clicking on the button show a popup  to setup the link, asking for optional end date, and password to generate the link

TECH SPEC:

- client side: use a seed in config file to encrypt end_date with actual data
- server side: update session endpoint for user authentication

Editor - improvements

  1. While code highlight is loading, there is no spinner
  2. if loading a chunk failed, we should fallback to the default mode

heroku

How to run this repo on heroku. Please make this heroku comaptible.

Login page: autofill and blocking prompt

Remove default behavior from browsers trying to automatically fill the username and password as it's not very likely to be correct considering our use case ....

From a user standpoint, in its current state, it feels buggy and anarchic

The same applies to the remember me button using a blocking prompt. The prompt trades convenience over smoothness from the user standpoint, we need to get rid of it

bug: editor mode

the editor should correctly open with the correct mode. As for now it seems the editor get stuck in some weird state that sometimes (not all the times ....) makes it keep the previous mode

bug - setState error in console

Repro: N/A need to find one but as it happens rarely, it's rather tricky.

React would yell if attempting a setState on a component that is not mounted. I can see 2 origins (dead or not already created):

  • we need to cancel an ajax call before the component is unmounted. Current one is promise based, that would require a rewrite. Using observables would make things much more solid but unfortunatly, it hasn't been standardized yet and require some libraries :( which goes against my approach of minimum libraries even if this project already use quite a lot
  • some Ajax isn't initiated in the componentDidMount

Need to investigate this as we can identify a way to reproduce it

build other connector

Would be great to extend the tool to give a file kind of interface of all the popular CMS.

The difficulty is to find the proper abstraction for those CMS as their database is just a giant piece of crap that never bother with database normalisation ...

bug: upload a file gives an error in console

filespage.js:168 Uncaught (in promise) TypeError: Cannot read property 'then' of undefined
    at job (filespage.js:168)
    at filespage.js:179
    at Array.map (<anonymous>)
    at process (filespage.js:178)
    at filespage.js:186
    at <anonymous>

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.