diff options
| author | 2010-08-25 16:48:55 +0200 | |
|---|---|---|
| committer | 2010-08-25 16:48:55 +0200 | |
| commit | 3c9f55270a83b0e88ec0dc516f9d9921e4d7b6ea (patch) | |
| tree | c5b2b1bfeb7eb8df2b97be118f6cbcec4e29cb3b /module/setup.py | |
| parent | ul.to fetching, so.biz expire (diff) | |
| download | pyload-3c9f55270a83b0e88ec0dc516f9d9921e4d7b6ea.tar.xz | |
merged gui
Diffstat (limited to 'module/setup.py')
| -rw-r--r-- | module/setup.py | 448 | 
1 files changed, 0 insertions, 448 deletions
diff --git a/module/setup.py b/module/setup.py deleted file mode 100644 index c1f449be4..000000000 --- a/module/setup.py +++ /dev/null @@ -1,448 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -    This program is free software; you can redistribute it and/or modify -    it under the terms of the GNU General Public License as published by -    the Free Software Foundation; either version 3 of the License, -    or (at your option) any later version. - -    This program is distributed in the hope that it will be useful, -    but WITHOUT ANY WARRANTY; without even the implied warranty of -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -    See the GNU General Public License for more details. - -    You should have received a copy of the GNU General Public License -    along with this program; if not, see <http://www.gnu.org/licenses/>. -     -    @author: RaNaN -""" -from getpass import getpass -import gettext -from hashlib import sha1 -import os -from os import remove -from os import makedirs -from os.path import abspath -from os.path import dirname -from os.path import exists -from os.path import isfile -from os.path import join -import random -import re -from subprocess import PIPE -from subprocess import call -import sys -from sys import exit - -class Setup(): -    """ -    pyLoads initial setup configuration assistent -    """ -    def __init__(self, path, config): - -        self.path = path -        self.config = config - - -    def start(self): -         -        lang = self.ask("Choose your Language / Wähle deine Sprache", "en", ["en", "de"]) -        translation = gettext.translation("setup", join(self.path, "locale"), languages=[lang]) -        translation.install(unicode=(True if  sys.getfilesystemencoding().startswith("utf") else False)) - -        print "" -        print _("Welcome to the pyLoad Configuration Assistent.") -        print _("It will check your system and make a basic setup in order to run pyLoad.") -        print "" -        print _("The value in brackets [] always is the default value,") -        print _("in case you don't want to change it or you are unsure what to choose, just hit enter.") -        print _("Don't forget: You can always rerun this assistent with --setup or -s parameter, when you start pyLoadCore.") -        print _("If you have any problems with this assistent hit STRG-C,") -        print _("to abort and don't let him start with pyLoadCore automatically anymore.") -        print "" -        print _("When you are ready for system check, hit enter.") -        raw_input() -         -        basic, ssl, captcha, gui, web = self.system_check() -        print "" - -        if not basic: -            print _("You need pycurl, sqlite and python 2.5, 2.6 or 2.7 to run pyLoad.") -            print _("Please correct this and re-run pyLoad.") -            print _("Setup will now close.") -            raw_input() -            return False - -        raw_input(_("System check finished, hit enter to see your status report.")) -        print "" -        print _("## Status ##") -        print "" -         -         -        avail = [] -        if self.check_module("Crypto"): avail.append(_("container decrypting")) -        if ssl: avail.append(_("ssl connection")) -        if captcha: avail.append(_("automatic captcha decryption")) -        if gui: avail.append(_("GUI")) -        if web: avail.append(_("Webinterface")) -  -        string = "" -         -        for av in avail: -            string += ", "+av - -        print _("Features available:") + string[1:] -        print "" -         -        if len(avail) < 5: -            print _("Featues missing: ") -            print -             -            if not self.check_module("Crypto"): -                print _("no py-crypto available") -                print _("You need this if you want to decrypt container files.") -                print "" -             -            if not ssl: -                print _("no SSL available") -                print _("This is needed if you want to establish a secure connection to core or webinterface.") -                print _("If you only want to access locally to pyLoad ssl is not usefull.") -                print "" -             -            if not captcha: -                print _("no Captcha Recognition available") -                print _("Only needed for some hosters and as freeuser.") -                print "" -             -            if not gui: -                print _("Gui not available") -                print _("The Graphical User Interface.") -                print "" -                 -            if not web: -                print _("no Webinterface available") -                print _("Gives abillity to control pyLoad with your webbrowser.") -                print "" -             -            print _("You can abort the setup now and fix some dependicies if you want.") - -        con = self.ask(_("Continue with setup?"), "y", bool=True) - -        if not con: -            return False - -        print "" -        print _("Do you want to change the config path? Current is %s" % abspath("")) -        print _("If you use pyLoad on a server or the home partition lives on an iternal flash it may be a good idea to change it.") -        path = self.ask(_("Change config path?"), "n", bool=True) -        if path: -            self.conf_path() -            #calls exit when changed -         -         -        print "" -        print _("Do you want to configure basic settings?") -        print _("This is recommend for first run.") -        con = self.ask(_("Make basic setup?"), "y", bool=True) - -        if con: -            self.conf_basic() - -        if ssl: -            print "" -            print _("Do you want to configure ssl?") -            ssl = self.ask(_("Configure ssl?"), "n", bool=True) -            if ssl: -                self.conf_ssl() - -        if web: -            print "" -            print _("Do you want to configure webinterface?") -            web = self.ask(_("Configure webinterface?"), "y", bool=True) -            if web: -                self.conf_web() - -        print "" -        print _("Setup finished successfully.") -        print _("Hit enter to exit and restart pyLoad") -        raw_input() -        return True - -    def system_check(self): -        """ make a systemcheck and return the results""" -        print _("## System Check ##") - -        python = False - -        if sys.version_info > (2, 7): -            print _("Your python version is to new, Please use Python 2.6/2.7") -            python = False -        elif sys.version_info < (2, 5): -            print _("Your python version is to old, Please use at least Python 2.5") -            python = False -        else: -            print _("Python Version: OK") -            python = True - - -        curl = self.check_module("pycurl") -        self.print_dep("pycurl", curl) - -        sqlite = self.check_module("sqlite3") -        self.print_dep("sqlite3", sqlite) - -        basic = python and curl and sqlite - -        print "" -         -        crypto = self.check_module("Crypto") -        self.print_dep("pycrypto", crypto) -         -        ssl = self.check_module("OpenSSL") -        self.print_dep("OpenSSL", ssl) - -        print "" - -        pil = self.check_module("Image") -        self.print_dep("py-imaging", pil) -         -        if os.name == "nt": -            tesser = self.check_prog([join(pypath, "tesseract", "tesseract.exe"), "-v"]) -        else: -            tesser = self.check_prog(["tesseract", "-v"]) -         -        self.print_dep("tesseract", tesser) - -        captcha = pil and tesser - -        print "" - -        gui = self.check_module("PyQt4") -        self.print_dep("PyQt4", gui) - -        print "" - -        web = self.check_module("django") -         - -        try: -            import django - -            if django.VERSION < (1, 1): -                print _("Your django version is to old, please upgrade to django 1.1") -                web = False -            elif django.VERSION > (1, 3): -                print _("Your django version is to new, please use django 1.2") -                web = False -        except: -            web = False - -        self.print_dep("django", web) -        web = web and sqlite - -        return (basic, ssl, captcha, gui, web) - -    def conf_basic(self): -        print "" -        print _("## Basic Setup ##") - -        print "" -        print _("The following logindata are only valid for CLI and GUI, but NOT for webinterface.") -        self.config.username = self.ask(_("Username"), "User") -        self.config.password = self.ask("", "", password=True) - -        print "" -        self.config["general"]["language"] = self.ask(_("Language"), "en", ["en", "de", "fr", "nl", "pl"]) -        self.config["general"]["download_folder"] = self.ask(_("Downloadfolder"), "Downloads") -        self.config["general"]["max_downloads"] = self.ask(_("Max parallel downloads"), "3") -        print _("You should disable checksum proofing, if you have low hardware requirements.") -        self.config["general"]["checksum"] = self.ask(_("Proof checksum?"), "y", bool=True) - -        reconnect = self.ask(_("Use Reconnect?"), "n", bool=True) -        self.config["reconnect"]["activated"] = reconnect -        if reconnect: -            self.config["reconnect"]["method"] = self.ask(_("Reconnect script location"), "./reconnect.sh") - - -    def conf_web(self): -        print "" -        print _("## Webinterface Setup ##") - -        db_path = "pyload.db" -        is_db = isfile(db_path) -        db_setup = True - -        if is_db: -            print _("You already have a database for the webinterface.") -            db_setup = self.ask(_("Do you want to delete it and make a new one?"), "n", bool=True) - -        if db_setup: -            if is_db: remove(db_path) -            from django import VERSION -            import sqlite3 -             -            if VERSION[:2] < (1,2): -                from module.web import syncdb_django11 as syncdb -            else: -                from module.web import syncdb -                 -            from module.web import createsuperuser -             -             -            print "" -            syncdb.handle_noargs() -            print _("If you see no errors, your db should be fine and we're adding an user now.") -            username = self.ask(_("Username"), "User") -            createsuperuser.handle(username, "email@trash-mail.com") -             -            password = self.ask("", "", password=True) -            salt = reduce(lambda x, y: x + y, [str(random.randint(0, 9)) for i in range(0, 5)]) -            hash = sha1(salt + password) -            password = "sha1$%s$%s" % (salt, hash.hexdigest()) - -            conn = sqlite3.connect(db_path) -            c = conn.cursor() -            c.execute('UPDATE "main"."auth_user" SET "password"=? WHERE "username"=?', (password, username)) - -            conn.commit() -            c.close() - -        print "" -        self.config["webinterface"]["activated"] = self.ask(_("Activate webinterface?"), "y", bool=True) -        print "" -        print _("Listen address, if you use 127.0.0.1 or localhost, the webinterface will only accessible locally.") -        self.config["webinterface"]["host"] = self.ask(_("Address"), "0.0.0.0") -        self.config["webinterface"]["port"] = self.ask(_("Port"), "8000") -        #@TODO setup for additional webservers - -    def conf_ssl(self): -        print "" -        print _("## SSL Setup ##") -        print "" -        print _("Execute these commands from pyLoad folder to make ssl certificates:") -        print "" -        print "openssl genrsa - 1024 > ssl.key" -        print "openssl req -new -key ssl.key -out ssl.csr" -        print "openssl req -days 36500 -x509 -key ssl.key -in ssl.csr > ssl.crt " -        print "" -        print _("If you're done and everything went fine, you can activate ssl now.") - -        self.config["ssl"]["activated"] = self.ask(_("Activate SSL?"), "y", bool=True) - -    def set_user(self): - -        translation = gettext.translation("setup", join(self.path, "locale"), languages=[self.config["general"]["language"]]) -        translation.install(unicode=(True if  sys.getfilesystemencoding().startswith("utf") else False)) -        print _("Setting new username and password") -        print "" -        self.config.username = self.ask(_("Username"), "User") -        self.config.password = self.ask("", "", password=True) -        self.config.save() - -    def conf_path(self, trans=False): -        if trans: -            translation = gettext.translation("setup", join(self.path, "locale"), languages=[self.config["general"]["language"]]) -            translation.install(unicode=(True if  sys.getfilesystemencoding().startswith("utf") else False)) -         -        print _("Setting new configpath, current configuration will not be transfered!") -        path = self.ask(_("Configpath"), abspath("")) -        try: -            path = join(pypath, path) -            if not exists(path): -                makedirs(path) -            f = open(join(pypath, "module","config", "configdir"), "wb") -            f.write(path) -            f.close() -            print _("Configpath changed, setup will now close, please restart to go on.") -            print _("Press Enter to exit.") -            raw_input() -            exit() -        except Exception, e: -            print _("Setting config path failed: %s") % str(e) -         -    def print_dep(self, name, value): -        """Print Status of dependency""" -        if value: -            print _("%s: OK") % name -        else: -            print _("%s: missing") % name - - -    def check_module(self, module): -        try: -            __import__(module) -            return True -        except: -            return False - -    def check_prog(self, command): -        pipe = PIPE -        try: -            call(command, stdout=pipe, stderr=pipe) -            return True -        except: -            return False - -    def ask(self, qst, default, answers=[], bool=False, password=False): -        """produce one line to asking for input""" -        if answers: -            info = "(" - -            for i, answer in enumerate(answers): -                info += (", " if i != 0 else "") + str((answer == default and "[%s]" % answer) or answer) - -            info += ")" -        elif bool: -            if default == "y": -                info = "([y]/n)" -            else: -                info = "(y/[n])" -        else: -            info = "[%s]" % default - -        if password: -            p1 = True -            p2 = False -            while p1 != p2: -                p1 = getpass(_("Password: ")) - -                if len(p1) < 4: -                    print _("Password to short. Use at least 4 symbols.") -                    continue - -                p2 = getpass(_("Password (again): ")) - -                if p1 == p2: -                    return p1 -                else: -                    print _("Passwords did not match.") - -        while True: -            input = raw_input(qst + " %s: " % info) - -            if input.strip() == "": -                input = default - -            if bool: -                if re.match(r"(y|yes|j|ja|true)", input.lower().strip()): -                    return True -                elif re.match(r"(n|no|nein|false)", input.lower().strip()): -                    return False -                else: -                    print _("Invalid Input") -                    continue - - -            if not answers: -                return input - -            else: -                if input in answers: -                    return input -                else: -                    print _("Invalid Input") - - -if __name__ == "__main__": -    test = Setup(join(abspath(dirname(__file__)), ".."), None) -    test.start()  | 
