Coder Social home page Coder Social logo

filen-s3's Introduction


Filen S3

A package to start a S3 server for a Filen account.

Contributors Forks Stargazers Issues License

Installation

  1. Install using NPM
npm install @filen/s3@latest
  1. Initialize the server and query it using aws-sdk
import FilenSDK from "@filen/sdk"
import path from "path"
import os from "os"
import S3Server from "@filen/s3"
import { S3 } from "aws-sdk"

// Initialize a SDK instance (optional)
const filen = new FilenSDK({
	metadataCache: true,
	connectToSocket: true,
	tmpPath: path.join(os.tmpdir(), "filen-sdk")
})

await filen.login({
	email: "[email protected]",
	password: "supersecret123",
	twoFactorCode: "123456"
})

const hostname = "127.0.0.1"
const port = 1700
const https = false
const endpoint = `${https ? "https" : "http"}://${hostname === "127.0.0.1" ? "local.s3.filen.io" : hostname}:${port}`

const server = new S3Server({
	hostname,
	port,
	https,
	user: {
		accessKeyId: "admin",
		secretKeyId: "admin",
		sdk: filen
	}
})

const s3 = new S3({
	accessKeyId: "admin",
	secretAccessKey: "admin",
	endpoint,
	s3ForcePathStyle: true, // Needed
	region: "filen" // Needed
})

// Start the server
await server.start()

console.log(`S3 server started on ${endpoint}`)

// List objects
await s3
	.listObjectsV2({
		Bucket: "filen",
		Prefix: ""
	})
	.promise()
  1. Initialize the server in cluster mode
import FilenSDK from "@filen/sdk"
import path from "path"
import os from "os"
import { S3ServerCluster } from "@filen/s3"
import { S3 } from "aws-sdk"

// Initialize a SDK instance (optional)
const filen = new FilenSDK({
	metadataCache: true,
	connectToSocket: true,
	tmpPath: path.join(os.tmpdir(), "filen-sdk")
})

await filen.login({
	email: "[email protected]",
	password: "supersecret123",
	twoFactorCode: "123456"
})

const hostname = "127.0.0.1"
const port = 1700
const https = false
const endpoint = `${https ? "https" : "http"}://${hostname === "127.0.0.1" ? "local.s3.filen.io" : hostname}:${port}`

const server = new S3ServerCluster({
	hostname,
	port,
	https,
	user: {
		accessKeyId: "admin",
		secretKeyId: "admin",
		sdk: filen
	},
	threads: 16 // Number of threads to spawn. Defaults to CPU core count if omitted.
})

// Start the cluster
await server.start()

console.log(`S3 server cluster started on ${endpoint}`)

S3 Compatibility

Only methods listed here are currently implemented. Due to the underlying storage most methods are impossible to implement, though we try to implement all "fundamental" needed methods.

Method 100% Compatible Info
ListObjects ๐ŸŸฅ
  • Only supports Prefix parameter.
  • Delimeter is always set to "/".
  • Depth is always 0.
  • EncodingType is always URL.
  • There are no Markers. The server always responds with all keys matching the Prefix.
  • *
ListObjectsV2 ๐ŸŸฅ
  • Only supports Prefix parameter.
  • Delimeter is always set to "/".
  • Depth is always 0.
  • EncodingType is always URL.
  • There are no ContinuationTokens. The server always responds with all keys matching the Prefix.
  • *
ListBuckets โœ… ย 
HeadBucket ๐ŸŸฅ
  • Only returns "x-amz-bucket-region" header.
HeadObject โœ… *
GetObject โœ… *
DeleteObject โœ…
  • Also supports deleting directories.
DeleteObjects โœ…
  • Also supports deleting directories.
PutObject ๐ŸŸฅ
  • Only returns ETag header. *
CopyObject ๐ŸŸฅ
  • Only returns ETag and LastModified as the CopyObjectResult. *

* An objects ETag is always its UUID. Since Filen is fully end-to-end encrypted there is no way to know the real MD5 file hash.

License

Distributed under the AGPL-3.0 License. See LICENSE for more information.

filen-s3's People

Contributors

dwynr avatar dependabot[bot] avatar

Stargazers

JupiterPi avatar  avatar  avatar  avatar Martin Simon avatar Ashutosh Saboo avatar Roy Takanen 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.