Giter Site home page Giter Site logo

openseedbox / openseedbox Goto Github PK

View Code? Open in Web Editor NEW
116.0 18.0 31.0 6.13 MB

OpenSeedbox - Open Source Multi-User Bittorrent Web UI

Home Page: http://www.openseedbox.com

License: GNU General Public License v3.0

Java 68.41% HTML 29.87% CSS 0.38% Dockerfile 1.33%
frontend torrents postgresql mysql

openseedbox's Introduction

OpenSeedbox - Open Source Seedbox UI - http://www.openseedbox.com

Comprised of the following projects:

Overview

OpenSeedbox is a web-based UI for bittorrent. It is designed to be multi-user and make use of existing bittorrent clients to do the actual downloading. Currently only transmission-daemon is supported as a backend but more can be implemented via the ITorrentBackend interface.

OpenSeedbox is still very experimental and really only intended for developers at the moment!

Features

OpenSeedbox supports to varying degrees:

  • Multiple users in a single unified environment
  • The concept of "Plans" which limit what a user can do (how much space they can use, how many torrents they can have active)
  • The concept of "Nodes" which when registered, get torrent add/remove/status requests farmed out to them
  • An JSON-based API for making third-party clients (eg mobile apps)
  • The ability to give users a dedicated node (recommended at the moment since the node choosing algorithm has not been implemented yet)
  • The ability to group torrents in the UI
  • The ability to download torrents as a zip on-the-fly with resume support (if NGINX is compiled with the mod_zip extension)

Dependencies

OpenSeedbox only runs in a Linux environment at this time due to linux-specific commands being executed within it

  • openjdk 1.6 (1.7 causes issues and 1.5 is too old)
  • playframework 1.3.4
  • transmission-daemon 2.51 or greater (backend only)
  • nginx compiled with mod_zip and headers_more module (if you want zip support), otherwise Apache will work too (youll need X-Sendfile support if you use Apache)

Architecture

OpenSeedbox is comprised of two parts - the Frontend and the Backend. The Frontend stores its data in a MySQL database and maintains the system state. The Backend has no database and is only concerned with doing what the Frontend tells it. It is possible to run the frontend and the backend on the same server but I dont recommend it.

The Frontend

This is a Play! framework application (and thus is written in Java). It is designed to be proxied to via a proper webserver (such as Apache or NGINX). The Frontend is what the user interacts with and is what allows users to log in and download torrents. It also allows an Admin to check the status of the nodes, set up plans, put users on plans and check that the background jobs are running properly.

The Backend

This is also a Play! framework application and is responsible for delegating requests to a torrent client running on the same host (at the moment this is transmission-daemon) and also reporting the system status of the host. It is designed to be "dumb", ie no state is stored on the backend, which torrents belong to which users is handled by the frontend. The Backend is run on as many nodes as you want the system to have.

Installation

Installation consists of:

  1. Obtaining a Google ClientID so you can use google logins (the only type of login)
  2. Setting up the frontend
  3. Setting up 1 or more backends
  4. Telling the frontend about the backends
  5. Configuring some plans and users

It is recommended to mount an encrypted volume to /media/openseedbox on each backend node to stop server providers scanning the hard drive and finding files that they can use as an excuse to terminate your server. However it is not required in order for Openseedbox to function.

Setting up an application in the Google Developers Console

Openseedbox uses google logins. In order for this to work, you need to create a project in the Google Developers Console and add the URL to your app as an allowed origin.

  1. Go to the Google Developers Console and create a new project for your Openseedbox instance. Go to the project.
  2. Go to "Dashboard" => "Enable and manage APIs", and enter "Google+" in the search field. Click the "Google+ API" result and click the "Enable API" button.
  3. On the left, click "Credentials" => "New credentials" => "OAuth Client ID". Choose "Web Application" and in "Authorized Javascript Origins" add the domain for your install of Openseedbox (eg, "https://localhost/" or "https://my.public.openseedbox.domain/")
  4. Click "Create" and make a note of the "Client ID" value for later use.

Docker

The only supported installation method of Openseedbox is to use the Docker images. This guide assumes you have a working Docker daemon. If you do not, please see here in order to get it installed.

Note: Docker does not work on OpenVZ VPS's, so if you have a VPS on which you want to run Openseedbox, you need a KVM VPS.

Database

  1. OpenSeedbox needs a database server available. MySQL and PostgreSQL are supported. If you have one running somewhere then you can set the OPENSEEDBOX_JDBC_URL, OPENSEEDBOX_JDBC_DRIVER, OPENSEEDBOX_JDBC_USER and OPENSEEDBOX_JDBC_PASS environment variables to tell Openseedbox how to connect to it.

  2. If you dont have one running somewhere, then you can easily start one:

    PostgreSQL:

    docker run --name openseedbox-postgres -e POSTGRES_USER=openseedbox -e POSTGRES_PASSWORD=openseedbox -e POSTGRES_DB=openseedbox -d postgres

    MySQL:

    docker run --name openseedbox-mysql -e MYSQL_ROOT_PASSWORD=password -e MYSQL_USER=openseedbox -e MYSQL_PASSWORD=openseedbox -e MYSQL_DATABASE=openseedbox -d mysql

    Note the container names: openseedbox-postgres, openseedbox-mysql.

Installing the Frontend

  1. The following command will start an openseedbox container, link to the freshly created openseedbox-postgres database server container and map it to port 443 on your host:

    docker run --name openseedbox --link openseedbox-postgres:openseedboxdb -p 443:443 -e GOOGLE_CLIENTID=<the google clientid you got above> -d openseedbox/client

    Same with openseedbox-mysql:

    docker run --name openseedbox --link openseedbox-mysql:openseedboxdb -p 443:443 -e OPENSEEDBOX_JDBC_URL=jdbc:mysql://openseedboxdb/openseedbox -e OPENSEEDBOX_JDBC_DRIVER=com.mysql.jdbc.Driver -e GOOGLE_CLIENTID=<the google clientid you got above> -d openseedbox/client

    If you arent using the 'quick n dirty' PostgreSQL/MySQL server above, then you'll need to run something like:

    docker run --name openseedbox -p 443:443 -e OPENSEEDBOX_JDBC_URL=<database jdbc url> -e OPENSEEDBOX_JDBC_DRIVER=<database jdbc driver> -e OPENSEEDBOX_JDBC_USER=<database username> -e OPENSEEDBOX_JDBC_PASS=<database password> -e GOOGLE_CLIENTID=<the google clientid you got above> -d openseedbox/client

The OPENSEEDBOX_JDBC_DRIVER will be either com.mysql.jdbc.Driver or org.postgresql.Driver, depends on how the JDBC URL starts: jdbc:mysql://.... or jdbc:postgresql://.....

You should now be able to browse to Openseedbox via https://hostname-or-ip-of-docker-host

Installing the Backend

Note: this can be on the same or a different server than the frontend. If its on the same server, you need to map it to a different port.

  1. Create a folder on your host to store the openseedbox data, eg:

    mkdir /home/user/openseedbox-data

    I would recommend this to be in an encrypted location, however this is not required.

    Note If you have multiple backeds running on the same host, do not point them to the same data directory. They will clobber each other.

  2. The following command will start an openseedbox-server container and map it to port 444 on your host. It will also mount the openseedbox-data folder you just created into the container. This is so that your data will persist between container restarts. Take note of OPENSEEDBOX_API_KEY as you'll need this value when adding the node to the frontend:

    docker run -v /home/user/openseedbox-data:/media/openseedbox --name openseedbox-node1 -p 444:443 -e OPENSEEDBOX_API_KEY=node1 -d openseedbox/server

OpenSeedbox on ARM

OpenSeedbox Docker repositories (openseedbox/client, openseedbox/server) has armv7hf and aarch64 tags, so you could run the full OpenSeedbox stack e.g. on a Rasperry Pi 3.

For the PostgreSQL backend you could use aarch64/postgres and armhf/postgres repositories!

Telling the frontend about the backend

  1. Browse to the frontend and login. The first user will be automatically created as an admin user.
  2. Click "Admin" up the top and then go to the Nodes tab.
  3. Click "Create new Node"
  4. Fill out the form.
    • Name - Whatever you want, its just used in the UI
    • Scheme - Set to "https" since thats what the docker container uses
    • Host / IP Address For Communication - Use the hostname / ip address of the backend Docker container. Must be accessible from the frontend. You also need to include the port. eg localhost:9001 if the backend runs on port 9001 on the same server where the frontend.
    • Host / IP Address For Downloads - Use the publically accessible hostname / ip address of the Docker host running the backend container. You also need to include the port. eg 192.168.1.50:444 if 192.168.1.50 is the IP address of the machine running the backend container and its exposed on port 444. Its important to use the public IP address so that your browser can access the node in order to download the files.
    • Webservice API Key: The value of OPENSEEDBOX_API_KEY you started the backend container with above
    • Active: Tick this box
  5. Click "Create new Node". You should see the uptime, available space etc. Click "Restart Backend" in order to start transmission-daemon.

Docker cheatseet for the ip address:

$ docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' openseedbox-node1
172.17.0.3

Docker cheatseet for the exposed ports:

docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' openseedbox-node1
443/tcp -> 444 

Note: The exposed source port is 443 in the above example, so the scheme should be https!

Setting up Plans and Users

There are two ways to do this. The first is to set up some plans and let the users choose them when they first log in. The second is to set up a "dummy" plan and add users to it manually via the web interface. I'll detail the second option here.

  1. Go to "Admin" => "Plans". Click "Create new Plan"
  2. Fill out the form to set the plan limits. Note that "Monthly Cost" doesnt do anything as the whole Invoicing thing has not been implemented and should probably be removed.
    • Plan Name - What to call your plan, eg "Plan 1"
    • Max. Diskspace (GB) - How much diskspace users on this plan can consume, eg "100"
    • Max. Active Torrents - How many active torrents users on this plan can have running at once, eg "5", or "-1" for unlimited
    • Monthly Cost - just put 0 in this field
    • Total Slots Available - How many users can assign themselves to this plan. eg if you had 500GB of diskspace and you set the Max. Diskspace on the plan to 100GB, then you could support 5 users. Set this to "10" for example
    • Visible to Customers - Whether or not users will see this plan in the list of plans after they log in.
  3. Click "Create new Plan"
  4. Get your users to log in in order for their accounts to be created in the system.
  5. Browse to "Admin" => "Users".
  6. Click the "Edit" button next to each user and do the following:
    • Assign them to the plan you just created
    • Set a "Dedicated" node if desired. Using a dedicated node means that every torrent they start will go to the same node, instead of the next node available with enough free space.

These users should now be able to start torrents via the Web UI if they log out / log back in again.

Using your own SSL certs

You'll quickly discover that the provided SSL certs are self-signed and will show as invalid in every browser. If you want to use your own certs, run the openseedbox and openseedbox-server containers with the following options:

-v /path/to/your/host.key:/src/openseedbox/conf/host.key -v /path/to/your/host.cert:/src/openseedbox/conf/host.cert

Configuration Reference

Frontend

Configuration is in openseedbox/conf/application.conf

  • google.clientid - The ClientID of your app in the Google Developer Console. Used to enable logins.
  • openseedbox.node.access - 'http' or 'https'. If you're using SSL on your backend nodes, use https, otherwise use http.
  • openseedbox.errors.mailto - an email address. Errors will get sent here.
  • openseedbox.errors.mailfrom - the From address in the error emails
  • openseedbox.zip - 'true' or 'false'. If 'false', no zip options are shown in the UI
  • openseedbox.zip.path - the internal NGINX path for multi-torrent zips. Is '/rdr' in the default nginx config.
  • openseedbox.zip.manifestonly - 'true' or 'false'. Only set to 'true' for debugging multi-torrent zips.
  • openseedbox.context.path - The context root where the application run. Default empty, but configurable with OPENSEEDBOX_CONTEXT_PATH environment variable in the Docker image.
  • openseedbox.assets.prefix - Used as the prefix to all asset URLs. This is so you can upload all the assets (the /public directory) to something like Amazon S3 and have them served from there.

Backend

Configuration is in openseedbox-server/conf/application.conf

  • backend.base.api_key - The API key used by the Frontend to communicate with the backend. Whatever you put here, you will need to enter when setting up the node in the Frontend.
  • backend.base.path - Essentially, the torrent download location. I tend to use '/media/openseedbox` since I have an encrypted partition mounted there
  • backend.base.path.encrypted - 'true' or 'false'. Set to 'true' if your backend.base.path is an encrypted location. If its 'true', the backend will throw errors if the encrypted partition is not mounted to prevent unencrypted data being written.
  • backend.base.device - The device that shows up in 'df -h' that your torrents are being downloaded to. This is used to determine free/used space on the node in the frontend Admin interface
  • backend.class - Should be 'com.openseedbox.backend.transmission.TransmissionBackend' unless you have implemented your own backend.
  • backend.download.scheme - 'http' or 'https'. If you're using SSL, set to 'https', otherwise 'http'.
  • backend.download.xsendfile - 'true' or 'false'. Only turn it off if you want Play! to serve files directly, which is a Bad Idea.
  • backend.download.xsendfile.path - The internal path that files that are being X-Sendfile'd are located at
  • backend.download.xsendfile.header - 'X-Accel-Redirect' or 'X-Sendfile' if you're using NGINX or Apache as your webservers respectively.
  • backend.download.ngxzip - 'true' or 'false'. Only works if NGINX is your webserver, enables/disables zip downloading
  • backend.download.ngxzip.path - The internal path to files, used in the ZIP manifest (tyically the same as backend.download.xsendfile.path)
  • backend.download.ngxzip.manifestonly - 'true' or 'false', only set to true for debugging purposes
  • backend.blocklist.url - Set to the URL of an IP blocklist for bad peers, eg 'http://list.iblocklist.com/?list=bt_level1&fileformat=p2p&archiveformat=gz'. This URL is loaded into the torrent backend if blocklists are supported.
  • openseedbox.assets.prefix - Same as in the Frontend config

openseedbox's People

Contributors

erindru avatar gregorkistler avatar hilobok avatar rehrumesh avatar smira2000 avatar stickz avatar xabolcs 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

openseedbox's Issues

CleanupJobs not cleaning

Hey even though i removed a file after downloading it doesn't delete that file from the source path . (gone from the panel but still available in the directory ) and in admin panel clean up directory it shows as Cleanup Job 0 s 0 false ,
How to fix this?
Tried to run clean up job manually by clicking run but same results

clean

ZIP doesn´t work

Hi,

In the current version of the Docker images it looks like there is an issue with the ZIP functionality. A few seconds after I´ve clicked the ZIP link/button I end in a browser tab saying:

Not found
download.<ID> action not found

Happens with three different hosts with Centos, Ubuntu and Photon OS and also with different browsers and client operating systems so it must be an issue with the Docker container itself.

The container were created like described in your project.

User logoff after successful file download

Aside of #41 there is also an annoying bug which I came across.

As soon as you´ve downloaded one file using the web GUI the user session seems to get terminated and you have to log in again.
Attached you will find two screenshots. First one is the file I want to download. After I did it and click on the download link again the login button shows up at the very end.
If you don´t click the download button but let´s say another category after you´ve downloaded a file you simply get redirected directly to the login page.

screen shot 2016-10-03 at 11 41 41
screen shot 2016-10-03 at 11 42 27

I´ve tried different users, Google client IDs, container hosts and so on. It´s always the same behaviour.

Would be nice to get this fixed.

Docker container images are broken - missing Siena modules

Since the last update of the Docker images mentioned in the readme 10 days ago they can´t be used anymore.
Both container images openseedbox/client as well as openseedbox/server will start but the Nginx in each case only delivers a 502 bad gateway message.

Reason: missing Siena modules

As you can see in the build details of the client and server:

WARNING:
These dependencies are missing, your application may not work properly (use --verbose for details),
~
~ play->siena 2.0.7

as well as the Docker logs:

09:40:35,929 INFO ~ Precompiling ...
09:40:37,766 ERROR ~
@73okj3kaa
Cannot start in PROD mode with errors
Compilation error (In /app/com/openseedbox/models/ModelBase.java around line 14)
The file /app/com/openseedbox/models/ModelBase.java could not be compiled. Error raised is : EnhancedModel cannot be resolved to a type
play.exceptions.CompilationException: EnhancedModel cannot be resolved to a type
at play.classloading.ApplicationCompiler$2.acceptResult(ApplicationCompiler.java:246)
at org.eclipse.jdt.internal.compiler.Compiler.handleInternalException(Compiler.java:676)
at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:520)
at play.classloading.ApplicationCompiler.compile(ApplicationCompiler.java:282)
at play.classloading.ApplicationClassloader.getAllClasses(ApplicationClassloader.java:426)
at play.Play.preCompile(Play.java:603)
at play.Play.init(Play.java:307)
at play.server.Server.main(Server.java:162)

Older Play! Framework binaries can´t retrieve modules from the playContributedModules repository because the URL changed some time ago from http://www.playframework.org/modules to https://www.playframework.com/modules
Even if you correct the URL it still won´t work - also described here.

To work around the issue the Siena module needs to be downloaded and unzipped into the Play! Framework module directory.
As soon as it´s in place, dependencies will be resolved successfully again without any further changes.

Second bug in one of the container images (client to be more specific) is the one fixed with 02a23b9.

@xabolcs is it something only @erindru can fix or do you also have permission to push to the Docker Hub repo?

geeting error on console

Error: Backend base path '/media/openseedbox' isnt writable!

where this folder will be created iam not able to understsand plz help me to solve this issue

Lowercase hash return "No such file or directory" error

For some torrents, using lowercase hash does not work.

Example:

http://node2.example.com/download/95292748a6ed6621a0f572d186c1c793db27af8d?name=xxxxxx%5Bxxxxx%5D%2Fxxxxx.nfo

but using uppercase hash is working

http://node2.example.com/download/95292748A6ED6621A0F572D186C1C793DB27AF8D?name=xxxxxx%5Bxxxxx%5D%2Fxxxxx.nfo

in nginx error.log

Is the any way so I can turn all hash into uppercase?

Error: Backend base path '/media/openseedbox' isnt writable!

I think I am near to success installing openseedbox.
I got the error stated in the title above even I have set the backend base path to another path.

#Application
application.name=openseedbox-server
application.mode=dev
%prod.application.mode=prod
application.secret=olHnjc5fXP8EIUAiEdi5EyrnjFbf9mZxxKBqnNdcpJhfGFHP514T4P44gYrBgwGV
date.format=yyyy-MM-dd

#Http settings
http.port=9001
jpda.port=8001
# application.session.cookie=PLAY
# application.session.maxAge=1h
# application.session.secure=false


#Openseedbox Backend Settings
backend.base.api_key=vm1
backend.base.path=/root/openseedbox
backend.base.device=/dev/mapper/openseedbox
backend.base.path.encrypted=true
backend.class=com.openseedbox.backend.transmission.TransmissionBackend
backend.download.scheme=http
backend.download.xsendfile=true
backend.download.xsendfile.path=/protected
backend.download.xsendfile.header=X-Accel-Redirect
backend.download.ngxzip=true
backend.download.ngxzip.path=/protected
backend.download.ngxzip.manifestonly=true
backend.blocklist.url=http://list.iblocklist.com/?list=bt_level1&fileformat=p2p&archiveformat=gz
openseedbox.assets.prefix=https://s3.amazonaws.com/cdn.openseedbox.com

#Transmission backend settings
backend.transmission.port=1234

# Test settings
%test.application.mode=dev
%test.db.url=jdbc:h2:mem:play;MODE=MYSQL;LOCK_MODE=0
%test.jpa.ddl=create
%test.mail.smtp=mock

db=mem

Newly introduced node properties don´t work as expected

Today I´ve pulled the changes made a couple of days ago. I like the idea of having an internal communication between the UI and backend nodes and a public one only for user interaction like download.

After I´ve edited the settings of an existing node and left the value of the field Host / IP Address : Port For Downloads empty I couldn´t download anything anymore because my browser pointed to a file location like

http://download/821735ee68379684c0aad5c1e30c07677429b928?name=debian-8.7.1-arm64-netinst.iso

The field description seems not quite correct at the moment:

optional, leave empty if it's the same

Currently it doesn´t really matter if it´s the same or not. In any case it will lead to an empty value regarding the ip address/hostname/FQDN which of course ends in a download URL which doesn´t exist.

Nginx config for dedicated proxy container

Within the last days I split up the involved services and only run one per container. Meanwhile I have one for MySQL, one for the frontend, one for the backend, one Nginx (serves both - frontend and backend) and one for gathering logs.
So far everythings works, except one thing: I can´t download completed files using the web GUI.
The Nginx config of course still points to a local folder which doesn´t exist in my new Nginx container.

What needs to be done in order to achieve my goal? Working with proxy_pass I guess but had no luck yet.

Quick´n´dirty solution would be to simply RO mount the complete folder locally in the Nginx container but would be nice to get it done the right way.

Any suggestions are much appreciated.

stats.html shows no space and node.status db column is NULL

Hi,

I´m running a setup since you´ve provided a solution to use Google´s OAuth without any issues so far since March or April this year.
Today I made a dist upgrade from my Ubuntu 15.04 installation to 15.10 and noticed afterwards that all of a sudden the 'Free Space' and 'Used Space' counter was telling me values like -9 and 0 at the nodes.html and somehow also the status column in the MySQL DB wasn´t updated anymore. The latter I think already a longer time, since it should contain the output of 'uptime' and the mentioned time there was not really near to when I did the upgrade.
After I´ve removed the only node I use so far and added it again the status column says only NULL now.
Anyway I figured out that the LVM device mapper showed up a with a different name after the upgrade. Fixed it in the application.conf from the backend and that issue was solved.
But still no change regarding the table column and the stats.html details which express how much space is used and available throughout all (active) nodes.

I simply set up another default installation (no firewall, no reverse proxy, all version requirements were met) with a brand new Ubuntu 16.04. instance and also a 14.04.3 instance and the result was always the same.
Everything works and shows proper information, only the stats.html says still 0 bytes for both 'Total space available across all nodes' and 'Total space used across all nodes' and also the MySQL DB still shows NULL at the node.status column.

Do you have any clue what could be the reason?

Thanks and keep up the good work.

Backend up "no"

backend its working, but when i try create a node I get the message backend up "NO" can you help-me?
sem titulo

Cut down README.md

It is TL;DR

Move and slice up the content into /documentation/wiki directory and the Wiki.

  • slicing stuff should be easy
  • push to Wiki should be also easy, with GitHub actions

How adding torrent to multi-backend working?

I have 2 backend curerntly. I see that openseedbox filling my 1st backend and not touching 2nd backend. Is this how it is working? Or it should add the torrent randomly to both backend?

Domain got indexed

Im trying to stop bot from crawling my domain. Now, googlebot found my seedbox domain and appear on search engine.
I made robots.txt on /src/openseedbox/app/views/ but when I access domain.com/robots.txt it cannot be found

Status?

Hi erindru,
just curious to know if you are still working on this and if you've been using it on production environments?

disclaimer: I haven't tried it yet...

Thank you!

Doesn't appear to be transferring

The torrent doesn't seem to transfer. If I look at the backend server the file is in the transmission download directory though.

image

I'm not sure where to look. Any ideas?

Hide Port

is there any way to hide the port and use it as domainname.com/auth ?

Group related glitch in the UI while using Memcached

Memcached usually isn´t enabled by default. If you enable it you will notice, that in case you add OR remove a group it will have an effect only after you´ve logged out and logged in again.
Otherwise the new group won´t show up or the other why around it will still show up even if it was already removed.

Doesn´t happen while Memcached is disabled.

openseedbox.assets.prefix

default value is openseedbox.assets.prefix=https://s3.amazonaws.com/cdn.openseedbox.com
Can I know what it does actually?

Empty Downloads

Got everything working but download files are empty configured reverse proxy in nginx still the same any help will be appreciated?

settings.json got reset to default

transmission config file on one of my node, got reset to default. I noticed my torrents got seeded over hundreds of GB and when I checked, the config files restored to default.
Is there any permanent way to change the config? rather than edit settings.json ?

General SSLEngine problem while communicating with backend over https

Current implementation of https backend communication is not fully Java7 compatible.

The resolution is easy as Using a custom truststore in java as well as the default one.

One would need a good HostnameVerifier too!

Thankfully it's reproducible with Play! 1.4.4 only, it doesn't affect version 1.3.4!

Caused by: java.security.cert.CertificateException: No subject alternative names present
~        _            _ 
~  _ __ | | __ _ _  _| |
~ | '_ \| |/ _' | || |_|
~ |  __/|_|\____|\__ (_)
~ |_|            |__/   
~
~ play! 1.4.4, https://www.playframework.com
~
~ Ctrl+C to stop
~ 
~ using java version "1.7.0_71"
$ $JAVA_HOME/bin/java -version
java version "1.7.0_71"
Java(TM) SE Runtime Environment (build 1.7.0_71-b14)
Java HotSpot(TM) 64-Bit Server VM (build 24.71-b01, mixed mode)

E. g.

11:17:37,705 ERROR ~ Error executing job
java.lang.RuntimeException: java.util.concurrent.ExecutionException: java.net.ConnectException: General SSLEngine problem
	at play.libs.ws.WSAsync$WSAsyncRequest.get(WSAsync.java:252)
	at com.openseedbox.backend.node.NodeBackend.list(NodeBackend.java:242)
	at com.openseedbox.backend.node.NodeBackend.listTorrents(NodeBackend.java:226)
	at com.openseedbox.jobs.NodePollerJob$NodePollerWorker.doGenericJob(NodePollerJob.java:33)
	at com.openseedbox.jobs.GenericJob.runJob(GenericJob.java:21)
	at com.openseedbox.jobs.LoggedJob.runJob(LoggedJob.java:18)
	at com.openseedbox.jobs.GenericJob.doJobWithResult(GenericJob.java:15)
	at play.jobs.Job.call(Job.java:214)
	at play.jobs.Job$1.call(Job.java:119)
	at java.util.concurrent.FutureTask.run(FutureTask.java:262)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:178)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:292)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at java.lang.Thread.run(Thread.java:745)
Caused by: java.util.concurrent.ExecutionException: java.net.ConnectException: General SSLEngine problem
	at com.ning.http.client.providers.netty.future.NettyResponseFuture.abort(NettyResponseFuture.java:231)
	at com.ning.http.client.providers.netty.request.NettyConnectListener.onFutureFailure(NettyConnectListener.java:137)
	at com.ning.http.client.providers.netty.request.NettyConnectListener.access$200(NettyConnectListener.java:37)
	at com.ning.http.client.providers.netty.request.NettyConnectListener$1.operationComplete(NettyConnectListener.java:104)
	at org.jboss.netty.channel.DefaultChannelFuture.notifyListener(DefaultChannelFuture.java:409)
	at org.jboss.netty.channel.DefaultChannelFuture.notifyListeners(DefaultChannelFuture.java:395)
	at org.jboss.netty.channel.DefaultChannelFuture.setFailure(DefaultChannelFuture.java:362)
	at org.jboss.netty.handler.ssl.SslHandler.setHandshakeFailure(SslHandler.java:1461)
	at org.jboss.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1315)
	at org.jboss.netty.handler.ssl.SslHandler.decode(SslHandler.java:852)
	at org.jboss.netty.handler.codec.frame.FrameDecoder.callDecode(FrameDecoder.java:425)
	at org.jboss.netty.handler.codec.frame.FrameDecoder.messageReceived(FrameDecoder.java:310)
	at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70)
	at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
	at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559)
	at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:268)
	at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:255)
	at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:88)
	at org.jboss.netty.channel.socket.nio.AbstractNioWorker.process(AbstractNioWorker.java:108)
	at org.jboss.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:337)
	at org.jboss.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:89)
	at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178)
	at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)
	at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42)
	... 3 more
Caused by: java.net.ConnectException: General SSLEngine problem
	at com.ning.http.client.providers.netty.request.NettyConnectListener.onFutureFailure(NettyConnectListener.java:133)
	... 25 more
Caused by: javax.net.ssl.SSLHandshakeException: General SSLEngine problem
	at sun.security.ssl.Handshaker.checkThrown(Handshaker.java:1300)
	at sun.security.ssl.SSLEngineImpl.checkTaskThrown(SSLEngineImpl.java:513)
	at sun.security.ssl.SSLEngineImpl.readNetRecord(SSLEngineImpl.java:790)
	at sun.security.ssl.SSLEngineImpl.unwrap(SSLEngineImpl.java:758)
	at javax.net.ssl.SSLEngine.unwrap(SSLEngine.java:624)
	at org.jboss.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1219)
	... 18 more
Caused by: javax.net.ssl.SSLHandshakeException: General SSLEngine problem
	at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
	at sun.security.ssl.SSLEngineImpl.fatal(SSLEngineImpl.java:1683)
	at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:278)
	at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:270)
	at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1439)
	at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:209)
	at sun.security.ssl.Handshaker.processLoop(Handshaker.java:878)
	at sun.security.ssl.Handshaker$1.run(Handshaker.java:818)
	at sun.security.ssl.Handshaker$1.run(Handshaker.java:816)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.security.ssl.Handshaker$DelegatedTask.run(Handshaker.java:1237)
	at org.jboss.netty.handler.ssl.SslHandler.runDelegatedTasks(SslHandler.java:1393)
	at org.jboss.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1256)
	... 18 more
Caused by: java.security.cert.CertificateException: No subject alternative names present
	at sun.security.util.HostnameChecker.matchIP(HostnameChecker.java:142)
	at sun.security.util.HostnameChecker.match(HostnameChecker.java:91)
	at sun.security.ssl.X509TrustManagerImpl.checkIdentity(X509TrustManagerImpl.java:347)
	at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:255)
	at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:138)
	at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1426)
	... 26 more

NodePollerJob fails if NodeHealthCheckJob doesnt do its job properly

If NodeHealthCheckJob marks a node as down, but fails to mark it as up again when it comes back up, the NodePollerJob will skip polling the node forever and no progress will be updated for any of the torrents running on the node.

Suggested fix: Make NodePollerJob make batch asynchronous requests to avoid blocking all the nodes if one is down, thereby allowing the check for n.isReachable() to be removed.

Very hard to install

Your project is perfect. But I am trying to install it and I get this error:
Execution exception
NullPointerException occured : null
In /app/controllers/Client.java (around line 42)
38: @before(unless={"newUser"})
39: public static void checkPlan() {
40: User u = getCurrentUser();
41: //check that a plan has been purchased
42: if (u.getPlan() == null) {
43: newUser();
44: }
45: }
46:
47: @before(unless={"login","auth"})
48: public static void before() {

and the server not working.
I will happy if you help me out of there. Please make a video or something like that to help everyone install your application.
Big thanks.

Compile Binaries for ARM

I would like to run OpenseedBox on my Raspberry Pi 3, as I'm sure many others will too; however the binaries do not run on ARM chips. If possible, can the binaries be compiled for ARM so that it can be run on devices such as the Raspberry Pi?

Disable Google Analytics in app/views/main.html

Ideally we should comment out lines 70 to 80 in the app/views/main.html file:

<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-32647401-2']);
_gaq.push(['_trackPageview']);
(function() {
	var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
	ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
	var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>

unless someone really wants to use it.
Or at least substitute the GA account of Erin :)

502 Bad Gateway

I am using nginx config provided by you. But cant make it work.
I tried to googled and modified the config but at the end, it lead me to another problems and errors.
Can anyone share nginx config that actually work?

Yep, on port 9000 it works. But not on reverse proxy

Im using nginx 1.6.2 on Ubuntu 14/04

Feature request: independent schemes regarding node download and communication

Aside of #49 I´ve also had an issue with the scheme setting. Currently you can only define http or https which will be used for both address:port values, the one for communication as well as downloads.

In my setup I actually would like to use http for node communication - no need for https because the docker network takes care of it - and https for downloads.
As I rewrite http to https via proxy for public access it´s not an issue, just wanted to address this as it could be useful for others too.

download button downloads empty file

I have a torrent downloaded and i can see it in the complete folder but when i choose download from the front end it downloads an empty file.

Where to from here?

Download and zip not working

When I try to download a file, I got File not found error in my browser
file not found

And when I try zip download, I got only text displayed in my browser.
zip

here is my nginx config

events {
  worker_connections  4096;  ## Default: 1024
}

 http {
    server_tokens off;
    add_header X-Frame-Options SAMEORIGIN;
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";

    server {
        listen 80;
        server_name be1.domain.com;

        gzip on;
        gzip_types "text/plain" "text/xml" "application/json";
        gzip_comp_level 9;

        merge_slashes off;
        proxy_method GET;

        location / {
                proxy_set_header Host $http_host;
                proxy_set_header X-Forwarded-Proto http;
                proxy_pass http://localhost:9001;
                more_clear_headers "Set-Cookie" "X-Archive-Files";
        }

        location /protected {
                internal;
                alias /media/openseedbox/complete;
        }
}

}

Hope you able to help because Im too close to install the script completely :)

Use frontend as a node?

I don't have plans to use more than a single server for this and I wonder if this will be supported too?

I guess it kinda is but since the frontend "requires" nginx too it would be a mess to use two nginx setups on a single box.

Does email notification still work?

According to the README.md there are two values regarding email notification in case of an error:

openseedbox.errors.mailto - an email address. Errors will get sent here.
openseedbox.errors.mailfrom - the From address in the error emails

As there is no SMTP configured at all I doubt that it will do anything.

Older versions of the application.conf contain settings like this:

-%prod.mail.smtp.host=smtp.openseedbox.com		
-%[email protected]		
-%prod.mail.smtp.pass=pass		
-%prod.mail.smtp.channel=ssl		
-mail.debug=true		
-%prod.mail.debug=false

If I stop the backend container and take a look at the node table in the database it won´t set down to true or report backendRunning as false.
So from my understanding even if we have proper SMTP settings it still won´t send out emails in the current implementation.

PostgreSQL support

Ever tried to run the frontend against anything else than MySQL/MariaDB?
Since PostgreSQL doesn´t allow tables called 'user' I had to change the table name in the Users.java file to 'users'.
At the first start all tables and columns were created. During the login the new 'users' table got filled the same way than in MySQL but the login doesn´t work.
I end up again at the login button but there isn´t any error message at all.

List of api command?

I want to use api for managing the backend. Like adding, delete, status, of a torrent.. But I dont know what query need to be sent, can you list me all the api query available for backend?

Error on step 7 for backend installation

Got this error

~  _ __ | | __ _ _  _| |
~ | '_ \| |/ _' | || |_|
~ |  __/|_|\____|\__ (_)
~ |_|            |__/
~
~ play! 1.2.5, http://www.playframework.org
~ framework ID is prod
~
~ OK, /src/openseedbox-server is started
~ output is redirected to /src/openseedbox-server/logs/system.out
~ pid is 10834
~
root@seed-be-1:/src/openseedbox-server# Exception in thread "main" play.exceptions.UnexpectedException: SienaPlugin : not using GAE requires at least a db=xxx config
        at play.modules.siena.SienaPlugin.dbSqlType(SienaPlugin.java:58)
        at play.modules.siena.SienaPlugin.dbType(SienaPlugin.java:88)
        at play.modules.siena.GoogleSqlDBPlugin.onLoad(GoogleSqlDBPlugin.java:63)
        at play.plugins.PluginCollection.initializePlugin(PluginCollection.java:251)
        at play.plugins.PluginCollection.loadPlugins(PluginCollection.java:185)
        at play.Play.init(Play.java:294)
        at play.server.Server.main(Server.java:159)

Can't resume downloads

When downloading from softwares like idm users cant resume the downloads, they have to re download it if cancelled any solutions to this?

TransmissionBackend.java could not be compiled

Hi,

I'm getting the following error when I'm starting the backend:

The file /app/com/openseedbox/backend/transmission/TransmissionBackend.java could not be compiled. Error raised is : The method encodeBase64String(byte[]) is undefined for the type Base64

play.exceptions.CompilationException: The method encodeBase64String(byte[]) is undefined for the type Base64
at play.classloading.ApplicationCompiler$2.acceptResult(ApplicationCompiler.java:246)
at org.eclipse.jdt.internal.compiler.Compiler.handleInternalException(Compiler.java:676)
at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:520)
at play.classloading.ApplicationCompiler.compile(ApplicationCompiler.java:282)
at play.classloading.ApplicationClassloader.getAllClasses(ApplicationClassloader.java:426)
at play.Play.preCompile(Play.java:600)
at play.Play.init(Play.java:304)
at play.server.Server.main(Server.java:162)

Are you able to help?

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.