Coder Social home page Coder Social logo

sakeunit / file-server Goto Github PK

View Code? Open in Web Editor NEW

This project forked from jveverka/file-server

0.0 0.0 0.0 183 KB

Simple file server providing REST APIs to access remote file system.

License: Apache License 2.0

Java 99.23% Shell 0.55% Dockerfile 0.22%

file-server's Introduction

License Java11 Gradle Build and Test

FileServer

This FileServer makes specified base directory accessible via REST APIs allowing you to list, download, upload, move and delete files and create empty directories. It also provides user access control and security.

architecture

Features implemented

  • Standalone java server, running on linux system.
  • Runs on the top of file system of host server.
  • Provides access via REST APIs to the file system.
  • File system operations supported
    • list / read content of the directory
    • download file, upload file
    • create empty directory
    • delete file or directory
    • move file or directory
    • get audit data for resource (file or directory) like number of downloads, uploads, ...
  • Uses Role based access control
  • Supports multi-tenancy (many users and roles)
  • Access for anonymous users (user not logged in)
  • Privileged admin role for server setup and monitoring
  • Transport protocols: http or https
  • Single jar distribution (~16MB).
  • Admin APIs for monitoring and management access and users/roles.
  • Audit APIs for admin, to check activities on server.
  • Server setup is stored in memory or on file system.

Planned features

  • web UI / web client for REST APIs
  • compressed directory download
  • compressed directory upload

Configurations

FileServer may be configured in several distinct ways. Check configurations examples chapter for more examples.

Requirements for developers

Runtime requirements

  • JDK 11 or later (JDK 8 is supported as well)
  • Requires read/write access to base directory on local file system.

Rest Endpoints

All REST endpoints use 'dynamic' path. This means that path ** is used as relative path in base directory. See also postman collection example.

Get list of files

Download file

Upload file

  • POST http://localhost:8888/services/files/upload/** - upload file, parent directory(ies) must exist before upload
    curl -F 'file=@/local/path/to/file.txt' http://localhost:8888/services/files/upload/path/to/001-data.txt -b /tmp/cookies.txt

Delete files and/or directories

Create empty directory

Move file or directory

  • POST http://localhost:8888/services/files/move/** - move file or directory. If source is file, destination must be also a file, If source is directory, destination must be directory as well. curl -X POST http://localhost:8888/services/files/move/path/to/source -b /tmp/cookies.txt -d '{ "destinationPath": "path/to/destination" }''

Get audit data

Security

In order to use file server REST endpoints above, user's http session must be authorized. Users have defined their roles and access rights to files and directories. See this example of server configuration.

login

  • POST http://localhost:8888/services/auth/login
    curl -X POST http://localhost:8888/services/auth/login -H "Content-Type: application/json" -d '{ "userName": "master", "password": "secret" }' -c /tmp/cookies.txt

logout

Admin access

Selected role fileserver.admin.role is used for admin access. Users with this role have access to special dedicated REST endpoints. See this example of server configuration. Refer to attached postman collection for all admin APIs.

Implemented admin features

  • get volume information - base directory, used and free space
  • get all open/active user sessions
  • terminate selected user's session
  • user management
    • get name of admin role
    • get name of anonymous role
    • list all users
    • create new user
    • remove user
  • file access filter management
    • list all access filters
    • create new access filter
    • remove existing access filter
  • audit data querying showing activities like:
    • login / logout events
    • file access events (download, upload, delete, ... all events are recorded)
    • user management events
    • file access filter management events

Run in Docker

  • Run with default configuration application.yml - only for demo purposes.
    docker run -d --name file-server-1.2.2 \
      --restart unless-stopped \
      -e SERVER_PORT=8888 \
      -p 8888:8888 jurajveverka/file-server:1.2.2
    
  • Run with custom configuration. Note that customized application.yml is located at ${FS_CONFIG_DIR}/application.yml and fileserver.home points to /opt/data/files
    docker run -d --name file-server-1.2.2 \
      --restart unless-stopped \
      -e SERVER_PORT=8888 \
      -e APP_CONFIG_PATH=/opt/data/config/application.yml \
      -v '${FS_CONFIG_DIR}':/opt/data/config \
      -v '${FS_FILES_DIR}':/opt/data/files \
      -p 8888:8888 jurajveverka/file-server:1.2.2
    
  • Build your own docker image for amd64 or arm64v8 platform.

Build and Run

Variable fileserver.home in application.yml file defines base directory to be exposed via REST APIs.

gradle clean build test
java -jar build/libs/file-server-1.2.2-SNAPSHOT.jar --spring.config.location=file:./src/main/resources/application.yml

file-server's People

Contributors

jveverka avatar keejef avatar

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.