コード例 #1
0
    def __safe_call__(self):
        box = CTK.Box()
        pre = 'tmp!market!install'

        # Replacements
        app_id = CTK.cfg.get_val('%s!app!application_id' % (pre))
        app_name = CTK.cfg.get_val('%s!app!application_name' % (pre))
        root = CTK.cfg.get_val('%s!root' % (pre))
        target_type = CTK.cfg.get_val('%s!target' % (pre))
        target_vserver = CTK.cfg.get_val('%s!target!vserver' % (pre))
        target_vserver_n = CTK.cfg.get_val('%s!target!vserver_n' % (pre))
        target_directory = CTK.cfg.get_val('%s!target!directory' % (pre))
        pre_vsrv = 'vserver!%s' % (target_vserver_n)

        # PHP info
        php_info = php.get_info(pre_vsrv)

        # More replacements
        props = cfg_get_surrounding_repls('pre_rule', php_info['rule'])
        props.update(locals())

        # Write cfg file
        tools.patch_phpbb_installer()

        # Apply the config
        if target_type == 'vserver':
            config = CONFIG_VSERVER % (props)
            CTK.cfg.apply_chunk(config)
            AddUsualStaticFiles(props['pre_rule_plus2'])
            CTK.cfg.normalize('%s!rule' % (pre_vsrv))

        elif target_type == 'directory':
            config = CONFIG_DIR % (props)
            CTK.cfg.apply_chunk(config)

    # Redirect to post installation
        box += CTK.RawHTML(
            js=CTK.DruidContent__JS_to_goto(box.id, URL_POST_INSTALL))
        return box.Render().toStr()
コード例 #2
0
    def __call__ (self):
        cont = CTK.Container()
        check_new_cert = CTK.CheckCfgText ('%s!gen_autosigned_cert'%(PREFIX), True, _("New self-signed cert."))

        table = CTK.PropsTable()
        table.Add (_('Auto-generate Certificate'), check_new_cert, _(NOTE_GEN_SELFSIGNED_CERT))

        submit = CTK.Submitter (URL_APPLY)
        submit += table

        # Certs details
        table = CTK.PropsTable()
        table.Add (_('Certificate'),     CTK.TextCfg ('%s!cert'    %(PREFIX), False, {'class':'noauto'}), _(NOTE_CERT))
        table.Add (_('Certificate Key'), CTK.TextCfg ('%s!cert_key'%(PREFIX), False, {'class':'noauto'}), _(NOTE_CERT_KEY))

        cert_details = CTK.Box ({'style': 'display:none;'})
        cert_details += table

        submit_certs = CTK.Submitter (URL_APPLY)
        submit_certs += cert_details

        # Events
        check_new_cert.bind ('change',
                             "if ($(this).find(':checked').size() <= 0) {%s} else {%s}"
                             %(cert_details.JS_to_show(), cert_details.JS_to_hide()))

        # Layout
        cont += CTK.RawHTML ("<h2>%s</h2>" %(_("Certificate file")))
        cont += submit
        cont += submit_certs

        # Global Submit
        submit = CTK.Submitter (URL_APPLY)
        submit += CTK.Hidden('final', '1')
        cont += submit

        cont += CTK.DruidButtonsPanel_PrevCreate_Auto()
        return cont.Render().toStr()
コード例 #3
0
    def __build_GUI__(self):
        app_fetch = CTK.cfg.get_val('%s!app_fetch' % (CFG_PREFIX))
        skip = False

        # Special cases
        if not app_fetch:
            skip = True

        if not app_fetch.startswith('http'):
            skip = True

            # (app_fetch != 'auto')):

        # Skip the phase?
        if skip:
            self += CTK.RawHTML(js=CTK.DruidContent__JS_to_goto_next(self.id))
            return

        # Report
        report = CTK.Box()
        report += CTK.RawHTML(_("Initiating download.."))

        # Download widget
        down = CTK.Downloader('package', app_fetch)
        down.bind('finished', CTK.DruidContent__JS_to_goto_next(self.id))
        down.bind('stopped', "")  ## TODO!!
        down.bind('error', "")  ## TODO!!
        down.bind(
            'update',
            "$('#%s').html('Downloaded: ' + (event.downloaded / 1024).toFixed() + ' Kb');"
            % (report.id))

        self += CTK.RawHTML(
            '<p>%s</p>' %
            (_('The application is being downloaded. Hold on tight!')))
        self += down
        self += report
        self += CTK.RawHTML(js=down.JS_to_start())
コード例 #4
0
    def __safe_call__ (self):
        box = CTK.Box()
        pre = 'tmp!market!install'

        # Replacements
        app_id           = CTK.cfg.get_val ('%s!app!application_id'  %(pre))
        app_name         = CTK.cfg.get_val ('%s!app!application_name'%(pre))
        root             = CTK.cfg.get_val ('%s!root'                %(pre))
        target_type      = CTK.cfg.get_val ('%s!target'              %(pre))
        target_vserver   = CTK.cfg.get_val ('%s!target!vserver'      %(pre))
        target_vserver_n = CTK.cfg.get_val ('%s!target!vserver_n'    %(pre))
        target_directory = CTK.cfg.get_val ('%s!target!directory'    %(pre))
        pre_vsrv         = 'vserver!%s' %(target_vserver_n)

        # PHP info
        php_info = php.get_info (pre_vsrv)

        # Fixes Drupal bug for multilingual content
        CTK.cfg['%s!encoder!gzip' %(php_info['rule'])] = '0'

        # More replacements
        props = cfg_get_surrounding_repls ('pre_rule', php_info['rule'])
        props.update (locals())
        tools.preload_installer (root)

        # Apply the config
        if target_type == 'vserver':
            config = CONFIG_VSERVER %(props)
            CTK.cfg.apply_chunk (config)

        elif target_type == 'directory':
            config = CONFIG_DIR %(props)
            CTK.cfg.apply_chunk (config)
            CTK.cfg.normalize ('%s!rule'%(pre_vsrv))

        # Redirect to post installation, and from there to Thanks page
        box += CTK.RawHTML (js = CTK.DruidContent__JS_to_goto (box.id, URL_POST_INSTALL))
        return box.Render().toStr()
コード例 #5
0
    def __safe_call__(self):
        box = CTK.Box()
        box += CTK.RawHTML('<h2>%s</h2>' % (_("Checking Requirements")))

        buttons = CTK.DruidButtonsPanel()
        buttons += CTK.DruidButton_Close(_('Cancel'))
        buttons += CTK.DruidButton_Goto(
            _('Retry'),
            market.Install.URL_INSTALL_SETUP_EXTERNAL,
            do_submit=True)

        # Check PHP
        php_cgi_bin = php.figure_phpcgi_binary()

        if not php_cgi_bin:
            box += php.PHP_Interpreter_Not_Found_Widget()
            box += buttons
            return box.Render().toStr()

        # Check PHP modules
        error = tools.check_modules()
        if error:
            note, instructions = error
            box += market.Util.InstructionBox(note,
                                              instructions,
                                              bin_path=php_cgi_bin)
            box += buttons
            return box.Render().toStr()

        # Database
        supported_dbs = database.get_supported_dbs(DB_SUPPORTED)
        if not supported_dbs:
            box += database.PreconditionError(DB_SUPPORTED)
            box += buttons
            return box.Render().toStr()

        box += CTK.RawHTML(js=CTK.DruidContent__JS_to_goto(box.id, URL_TARGET))
        return box.Render().toStr()
コード例 #6
0
    def __safe_call__(self):
        vserver_n = CTK.cfg.get_val('%s!target!vserver_n' %
                                    ('tmp!market!install'))
        pre_vsrv = 'vserver!%s' % (vserver_n)
        replacements = php.figure_php_user(pre_vsrv)

        market.Install_Log.log("Post installation commands")
        commands = [
            ({
                'command':
                'chown -R ${php_user}:${php_group} ${app_root}/openx/var ${app_root}/openx/www/images ${app_root}/openx/plugins ${app_root}/openx/www/admin/plugins'
            }),
            ({
                'command':
                'chmod -R u+w ${app_root}/openx/var ${app_root}/openx/www/images ${app_root}/openx/plugins  ${app_root}/openx/www/admin/plugins'
            }),
        ]

        progress = market.CommandProgress.CommandProgress(
            commands, market.Install.URL_INSTALL_DONE)

        progress['php_user'] = replacements['php_user']
        progress['php_group'] = replacements['php_group']

        box = CTK.Box()
        box += CTK.RawHTML('<h2>%s</h2>' %
                           (_('Performing automatic installation')))
        box += CTK.RawHTML(
            '<p>%s</p>' %
            (_('This process may take a while. Please, hold on.')))
        box += progress

        buttons = CTK.DruidButtonsPanel()
        buttons += CTK.DruidButton_Close(_('Cancel'))
        box += buttons

        return box.Render().toStr()
コード例 #7
0
    def __safe_call__(self):
        box = CTK.Box()
        box += CTK.RawHTML('<h2>%s</h2>' % (_('User configuration')))

        buttons = CTK.DruidButtonsPanel()
        submit = CTK.Submitter(URL_APPLY)

        table = CTK.PropsTable()
        table.Add(
            _('Username'),
            CTK.TextCfg('%s!nagiosadmin' % (PRE), False, {
                'class': 'noauto',
                'value': 'nagiosadmin'
            }), _(NOTE_USERNAME))
        table.Add(
            _('Password'),
            CTK.TextCfg('%s!password' % (PRE), False, {'class': 'noauto'}),
            _(NOTE_PASSWORD))
        table.Add(_('Email'),
                  CTK.TextCfg('%s!email' % (PRE), False, {'class': 'noauto'}),
                  _(NOTE_EMAIL))

        submit += CTK.RawHTML('<h2>%s</h2>' % (_(NOTE_NAGIOSADMIN_H)))
        submit += CTK.RawHTML('<p>%s</p>' % (_(NOTE_NAGIOSADMIN_P)))
        submit += table
        submit.bind(
            'submit_success',
            CTK.DruidContent__JS_to_goto(box.id, URL_USER_CONFIG_SYSTEM))

        box += submit

        buttons += CTK.DruidButton_Close(_('Cancel'))
        buttons += CTK.DruidButton_Submit(_('Next'), do_close=False)
        box += buttons

        return box.Render().toStr()
コード例 #8
0
    def __safe_call__(self):
        box = CTK.Box()
        buttons = CTK.DruidButtonsPanel()

        pre = "tmp!market!install"
        submit = CTK.Submitter(URL_APPLY)
        table = CTK.PropsTable()
        table.Add(
            _('Local directory'),
            CTK.TextCfg('%s!webdav_dir' % (pre), False, {'class': 'noauto'}),
            _(NOTE_DIRECTORY))
        submit += table
        submit.bind('submit_success',
                    CTK.DruidContent__JS_to_goto(box.id, URL_SERVER_CONFIG))

        box += CTK.RawHTML('<h2>%s</h2>' % (_('WsgiDAV configuration')))
        box += CTK.RawHTML('<p>%s</p>' % (_(NOTE_DAV_CONFIG)))
        box += submit

        buttons += CTK.DruidButton_Close(_('Cancel'))
        buttons += CTK.DruidButton_Submit(_('Next'), do_close=False)
        box += buttons

        return box.Render().toStr()
コード例 #9
0
    def __safe_call__(self):
        pre = "tmp!market!install"

        table = CTK.PropsTable()
        table.Add(
            _('Language'),
            CTK.ComboCfg('%s!lang' % (pre), tools.OPTS_LANG, {
                'class': 'noauto',
                'selected': 'en'
            }), _(LANG_NOTE))

        submit = CTK.Submitter(URL_APPLY)
        submit += table

        buttons = CTK.DruidButtonsPanel()
        buttons += CTK.DruidButton_Close(_('Cancel'))
        buttons += CTK.DruidButton_Goto(_('Next'), URL_INSTALL, do_submit=True)

        box = CTK.Box()
        box += CTK.RawHTML('<h2>%s</h2>' % (LANG_H2))
        box += CTK.RawHTML('<p>%s</p>' % (LANG_P1))
        box += submit
        box += buttons
        return box.Render().toStr()
コード例 #10
0
    def __safe_call__(self):
        vserver_n = CTK.cfg.get_val('%s!target!vserver_n' %
                                    ('tmp!market!install'))
        pre_vsrv = 'vserver!%s' % (vserver_n)
        replacements = php.figure_php_user(pre_vsrv)

        market.Install_Log.log("Post installation commands")
        commands = [
            ({
                'function': tools.drush_site_install,
                'description': _('Using Drupal shell to install Drupal')
            }),
            ({
                'command':
                'chown -R ${php_user}:${php_group} ${app_root}/drupal ${app_root}/drush'
            }),
        ]
        progress = market.CommandProgress.CommandProgress(
            commands, market.Install.URL_INSTALL_DONE)

        progress['php_user'] = replacements['php_user']
        progress['php_group'] = replacements['php_group']

        box = CTK.Box()
        box += CTK.RawHTML('<h2>%s</h2>' %
                           (_('Performing Drupal installation')))
        box += CTK.RawHTML(
            '<p>%s</p>' %
            (_('This process may take a while. Please, hold on.')))
        box += progress

        buttons = CTK.DruidButtonsPanel()
        buttons += CTK.DruidButton_Close(_('Cancel'))
        box += buttons

        return box.Render().toStr()
コード例 #11
0
    def __init__(self):
        CTK.Box.__init__(self, {'class': 'domain_list'})

        # Load, filter and sort the domain list
        try:
            domains = cPickle.load(open(config.PROUD_PICKLE, 'r'))
        except (IOError, EOFError
                ) as e:  # This exception means a corrupt pickle failed to load
            domains = []

        domains_clean = filter(lambda d: d['publish'], domains)
        domains_clean.sort(domain_cmp)
        if not domains_clean:  # puke in the napkin, politely
            domains_clean = [{'domain': 'Sorry: list broken!', 'page_rank': 0}]

        # Render the domain list
        l = CTK.List()
        for domain in domains_clean:
            l += CTK.Box(
                {'class': 'domain domain-PR%s' % (domain['page_rank'])},
                CTK.RawHTML(domain['domain']))

        self += l
        self += CTK.RawHTML(js=DOMAIN_CLICK_JS)
コード例 #12
0
ファイル: icons.py プロジェクト: vlinhd11/webserver
    def __call__ (self):
        cont = CTK.Container()
        cont += CTK.RawHTML ('<h2>%s</h2>' %(_(NOTE_WELCOME_H1)))
        cont += Wizard.Icon ('icons', {'class': 'wizard-descr'})
        box = CTK.Box ({'class': 'wizard-welcome'})
        box += CTK.RawHTML ('<p>%s</p>' %(_(NOTE_WELCOME_P1)))
        cont += box

        icons, themes = self._check_config()
        if False in [icons, themes]:
            # Send the VServer num
            tmp = re.findall (r'^/wizard/vserver/(\d+)/', CTK.request.url)
            submit = CTK.Submitter (URL_APPLY)
            submit += CTK.Hidden('%s!vsrv_num'%(PREFIX), tmp[0])
            submit += CTK.Hidden('%s!icons'%(PREFIX),  ('0','1')[icons])
            submit += CTK.Hidden('%s!themes'%(PREFIX), ('0','1')[themes])
            submit += CTK.Hidden('final', '1')
            cont += submit
            cont += CTK.DruidButtonsPanel_Create()
        else:
            cont += CTK.RawHTML ('<p>%s</p>'   %(_(NOTE_WELCOME_ERR)))
            cont += CTK.DruidButtonsPanel_Cancel()

        return cont.Render().toStr()
コード例 #13
0
ファイル: Page.py プロジェクト: agentlans/webserver
    def __call__(self, dialog):
        # Check
        errors = SavingChecks.check_config()
        if errors:
            # FIXME: Needs to change the dialog title to "Configuration was not saved" or something
            ul = CTK.List()
            for error in errors:
                link = CTK.Link(error.url, CTK.RawHTML(_("Solve")))
                content = CTK.Box()
                content += CTK.RawHTML('%s: ' % (error.title))
                content += link
                ul += content

            all = CTK.Box({'id': 'sanity-msg'})
            all += CTK.RawHTML("<h2>%s</h2>" % (SAVE_CHECK_H1))
            all += CTK.RawHTML("<p>%s</p>" % (SAVE_CHECK_P1))
            all += CTK.Box({'id': "sanity-errors"}, ul)
            all += CTK.RawHTML("<p>%s</p>" % (SAVE_CHECK_P2))

            render = all.Render()
            return render.toStr()

        # Save
        CTK.cfg.save()

        all = CTK.Box({'id': "buttons"})
        all += CTK.RawHTML("<h2>%s</h2>" %
                           (_("Configuration successfully saved")))

        if Cherokee.server.is_alive():
            # Prompt about the reset
            all += CTK.RawHTML('<p>%s</p>' % (_(SAVED_RESTART)))

            submit = CTK.Submitter(URL_SAVE_NONE)
            submit += CTK.Hidden('none', 'foo')
            submit += CTK.SubmitterButton(_('Do not restart'))
            submit.bind('submit_success', dialog.JS_to_close())
            all += submit

            submit = CTK.Submitter(URL_SAVE_GRACEFUL)
            submit += CTK.Hidden('graceful', 'foo')
            submit += CTK.SubmitterButton(_('Graceful restart'))
            submit.bind('submit_success', dialog.JS_to_close())
            all += submit

            submit = CTK.Submitter(URL_SAVE_HARD)
            submit += CTK.Hidden('hard', 'foo')
            submit += CTK.SubmitterButton(_('Hard restart'))
            submit.bind('submit_success', dialog.JS_to_close())
            all += submit
        else:
            # Close the dialog
            all += CTK.RawHTML('<p>%s</p>' % (_(SAVED_NO_RUNNING)))

            submit = CTK.Submitter(URL_SAVE_NONE)
            submit += CTK.Hidden('none', 'foo')
            submit.bind('submit_success', dialog.JS_to_close())

            all += submit
            all += CTK.RawHTML(js=submit.JS_to_submit())

        render = all.Render()
        return render.toStr()
コード例 #14
0
    def __safe_call__(self):
        pre = 'tmp!market!install'
        root = CTK.cfg.get_val('%s!root' % (pre))
        lang = CTK.cfg.get_val('%s!lang' % (pre))
        db = CTK.cfg.get_val('%s!db!db_type' % (pre))

        path = os.path.join(root, 'redmine')
        env = tools.get_ruby_env()

        tools.write_database_configuration(root)

        GEM_INST_FAST = 'gem install --no-test --no-rdoc --no-ri --verbose --local '
        GEM_INST_SLOW = 'gem install --no-test --no-rdoc --verbose --local '

        tpre = [
            ({
                'command': GEM_INST_FAST + '${app_root}/rake-0.8.7.gem',
                'env': env
            }),
            ({
                'command':
                GEM_INST_FAST + '${app_root}/activesupport-2.3.5.gem',
                'env': env
            }),
            ({
                'command':
                GEM_INST_FAST + '${app_root}/activerecord-2.3.5.gem',
                'env': env
            }),
            ({
                'command': GEM_INST_SLOW + '${app_root}/rack-1.0.1.gem',
                'env': env
            }),
            ({
                'command': GEM_INST_FAST + '${app_root}/actionpack-2.3.5.gem',
                'env': env
            }),
            ({
                'command':
                GEM_INST_FAST + '${app_root}/actionmailer-2.3.5.gem',
                'env': env
            }),
            ({
                'command':
                GEM_INST_FAST + '${app_root}/activeresource-2.3.5.gem',
                'env': env
            }),
            ({
                'command': GEM_INST_FAST + '${app_root}/rails-2.3.5.gem',
                'env': env
            }),
            ({
                'command': GEM_INST_SLOW + '${app_root}/daemons-1.1.0.gem',
                'env': env
            }),
            ({
                'command':
                GEM_INST_SLOW + '${app_root}/eventmachine-0.12.10.gem',
                'env': env
            }),
            ({
                'command': GEM_INST_FAST + '${app_root}/thin-1.2.7.gem',
                'env': env
            }),
            ({
                'command':
                GEM_INST_FAST + '${app_root}/cgi_multipart_eof_fix-2.5.0.gem',
                'env': env
            }),
            ({
                'command': GEM_INST_FAST + '${app_root}/i18n-0.4.2.gem',
                'env': env
            }),
        ]

        # PostgreSQL
        if db == 'postgresql':
            tdb = [
                ({
                    'command':
                    GEM_INST_FAST + '${app_root}/postgres-pr-0.6.3.gem',
                    'env': env
                }),
            ]

        # SQLite
        elif db == 'sqlite3':
            tdb = [
                ({
                    'command': GEM_INST_FAST + '${app_root}/sqlite3-1.3.3.gem',
                    'env': env
                }),
                ({
                    'command':
                    GEM_INST_FAST + '${app_root}/sqlite3-ruby-1.3.3.gem',
                    'env': env
                }),
            ]
        # MySQL
        elif db == 'mysql':
            mysql_bin = database.mysql_bins(database.MYSQL_BIN_NAMES)
            mysql_dir = os.path.realpath(mysql_bin + '/../..')

            if 'mysql' in mysql_dir:
                tdb = [
                    ({
                        'command':
                        GEM_INST_FAST +
                        '${app_root}/mysql-2.8.1.gem -- --with-mysql-dir=%s' %
                        (mysql_dir),
                        'env':
                        env
                    }),
                ]
            else:
                tdb = [
                    ({
                        'command':
                        GEM_INST_FAST + '${app_root}/mysql-2.8.1.gem',
                        'env': env
                    }),
                ]

        else:
            assert False, "Unsupported DB"

        tpost = [
            ({
                'command': 'cd %s && rake generate_session_store' % (path),
                'env': env
            }),
            ({
                'command':
                'cd %s && RAILS_ENV=production rake db:migrate' % (path),
                'env':
                env
            }),
            ({
                'command':
                'cd %s && RAILS_ENV=production rake redmine:load_default_data %s'
                % (path, tools.EOF_STR % (locals())),
                'env':
                env
            }),
            ({
                'command':
                'chown -R ${web_user}:${web_group} ${app_root}/redmine/db'
            }),
        ]

        tasks = tpre + tdb + tpost

        buttons = CTK.DruidButtonsPanel()
        buttons += CTK.DruidButton_Close(_('Cancel'))

        box = CTK.Box()
        box += CTK.RawHTML('<h2>%s</h2>' % (INSTALL_H2))
        box += CTK.RawHTML('<p>%s</p>' % (INSTALL_P1))
        box += CommandProgress(tasks, URL_CONFIG_SERVER)
        box += buttons

        return box.Render().toStr()
コード例 #15
0
    def __safe_call__(self):
        ruby_min = ruby.ruby_version()
        dblist = database.get_supported_dbs(DB_SUPPORTED)
        db_system = [x['db'] for x in dblist]
        db_redmine = DB_SUPPORTED[:]

        box = CTK.Box()
        box += CTK.RawHTML('<h2>%s</h2>' % (_("Database Requirements")))
        message = ''

        if 'mysql' in db_system:
            if version_to_int(ruby_min) < version_to_int('1.8.6'):
                message += '<p>%s</p>' % (_(NOTE_MYSQL1))
                db_redmine.remove('mysql')

            elif not database.mysql_dev_path():  # required by mysql gem:
                message += '<p>%s</p>' % (_(NOTE_MYSQL2))
                db_redmine.remove('mysql')

                box += market.Util.InstructionBox(
                    database.MYSQL_DEV_NOTE, database.MYSQL_DEV_INSTRUCTIONS)

        if 'sqlite3' in db_system:
            if version_to_int(ruby_min) < version_to_int(
                    '1.8.7'):  # required by sqlite3 gem:
                message += '<p>%s</p>' % (_(NOTE_SQLITE))
                db_redmine.remove('sqlite3')

        # No DBS
        if db_redmine == []:
            message += '<p>%s</p>' % (_(NOTE_NODBS))

            buttons = CTK.DruidButtonsPanel()
            buttons += CTK.DruidButton_Close(_('Cancel'))
            buttons += CTK.DruidButton_Goto(_('Retry'),
                                            URL_DATABASE_PRE,
                                            do_submit=True)

            notice = CTK.Notice()
            notice += CTK.RawHTML(message)

            box += notice
            box += buttons

        # Some DBs present on system but not supported for some reason
        elif message:
            buttons = CTK.DruidButtonsPanel()
            buttons += CTK.DruidButton_Close(_('Cancel'))
            buttons += CTK.DruidButton_Goto(_('Next'),
                                            URL_DATABASE,
                                            do_submit=True)

            notice = CTK.Notice()
            notice += CTK.RawHTML(message)

            box += notice
            box += buttons

        # DB list untouched
        else:
            box += CTK.RawHTML(
                js=CTK.DruidContent__JS_to_goto(box.id, URL_DATABASE))

        return box.Render().toStr()
コード例 #16
0
    def __init__(self, app_name):
        CTK.Box.__init__(self, {'class': 'cherokee-market-app'})

        index = Distro.Index()

        app = index.get_package(app_name, 'software')
        maintainer = index.get_package(app_name, 'maintainer')

        # Install dialog
        install = InstallDialog(app_name)

        # Author
        by = CTK.Container()
        by += CTK.RawHTML('%s ' % (_('By')))
        by += CTK.LinkWindow(app['URL'], CTK.RawHTML(app['author']))

        install_button = CTK.Button(_("Install"))
        install_button.bind('click', install.JS_to_show())

        # Report button
        druid = CTK.Druid(CTK.RefreshableURL())
        report_dialog = CTK.Dialog({
            'title': (_("Report Application")),
            'width': 480
        })
        report_dialog += druid
        druid.bind('druid_exiting', report_dialog.JS_to_close())

        report_link = CTK.Link(None, CTK.RawHTML(_("Report issue")))
        report_link.bind ('click', report_dialog.JS_to_show() + \
                                   druid.JS_to_goto('"%s/%s"'%(URL_REPORT, app_name)))

        report = CTK.Container()
        report += report_dialog
        report += report_link

        # Info
        repo_url = CTK.cfg.get_val('admin!ows!repository', REPO_MAIN)
        url_icon_big = os.path.join(repo_url, app['id'], "icons",
                                    app['icon_big'])

        appw = CTK.Box({'class': 'market-app-desc'})
        appw += CTK.Box({'class': 'market-app-desc-icon'},
                        CTK.Image({'src': url_icon_big}))
        appw += CTK.Box({'class': 'market-app-desc-buy'}, install_button)
        appw += CTK.Box({'class': 'market-app-desc-title'},
                        CTK.RawHTML(app['name']))
        appw += CTK.Box({'class': 'market-app-desc-version'},
                        CTK.RawHTML("%s: %s" % (_("Version"), app['version'])))
        appw += CTK.Box({'class': 'market-app-desc-url'}, by)
        appw += CTK.Box(
            {'class': 'market-app-desc-packager'},
            CTK.RawHTML("%s: %s" %
                        (_("Packager"), maintainer['name'] or _("Orphan"))))
        appw += CTK.Box({'class': 'market-app-desc-category'},
                        CTK.RawHTML("%s: %s" %
                                    (_("Category"), app['category'])))
        appw += CTK.Box({'class': 'market-app-desc-short-desc'},
                        CTK.RawHTML(app['desc_short']))
        appw += CTK.Box({'class': 'market-app-desc-report'}, report)

        # Support
        ext_description = CTK.Box({'class': 'market-app-desc-description'})
        ext_description += CTK.RawHTML(app['desc_long'])
        desc_panel = CTK.Box({'class': 'market-app-desc-desc-panel'})
        desc_panel += ext_description
        desc_panel += CTK.Box({'class': 'market-app-desc-support-box'},
                              SupportBox(app_name))

        # Shots
        shots = CTK.CarouselThumbnails()
        shot_entries = app.get('screenshots', [])

        if shot_entries:
            for s in shot_entries:
                shots += CTK.Image({
                    'src':
                    os.path.join(repo_url, app_name, "screenshots", s)
                })
        else:
            shots += CTK.Box({'id': 'shot-box-empty'},
                             CTK.RawHTML('<h2>%s</h2>' %
                                         (_("No screenshots"))))

        # Tabs
        tabs = CTK.Tab()
        tabs.Add(_('Screenshots'), shots)
        tabs.Add(_('Description'), desc_panel)

        # GUI Layout
        self += appw
        self += tabs
        self += install
コード例 #17
0
 def __init__ (self):
     CTK.Box.__init__ (self, {'id': 'license'})
     self += CTK.Box ({'id': 'license-text'}, CTK.RawHTML (GPL2_LICENSE))
コード例 #18
0
    def __safe_call__(self):
        app_id = CTK.cfg.get_val('tmp!market!install!app!application_id')
        app_name = CTK.cfg.get_val('tmp!market!install!app!application_name')

        # URL Package
        index = Distro.Index()
        pkg = index.get_package(app_id, 'package')

        repo_url = CTK.cfg.get_val('admin!ows!repository', REPO_MAIN)
        url_download = os.path.join(repo_url, app_id, pkg['filename'])
        CTK.cfg['tmp!market!install!download'] = url_download

        # Local storage shortcut
        pkg_filename_full = url_download.split('/')[-1]
        pkg_filename = pkg_filename_full.split('_')[0]
        pkg_revision = 0

        pkg_repo_fp = os.path.join(CHEROKEE_OWS_DIR, "packages", app_id)
        if os.access(pkg_repo_fp, os.X_OK):
            for f in os.listdir(pkg_repo_fp):
                tmp = re.findall('^%s_(\d+)' % (pkg_filename), f)
                if tmp:
                    pkg_revision = max(pkg_revision, int(tmp[0]))

        if pkg_revision > 0:
            pkg_fullpath = os.path.join(
                CHEROKEE_OWS_DIR, "packages", app_id,
                '%s_%d.cpk' % (pkg_filename, pkg_revision))
            CTK.cfg['tmp!market!install!local_package'] = pkg_fullpath

            Install_Log.log("Using local repository package: %s" %
                            (pkg_fullpath))

            box = CTK.Box()
            box += CTK.RawHTML(
                js=CTK.DruidContent__JS_to_goto(box.id, URL_INSTALL_SETUP))
            return box.Render().toStr()

        # Instance a Downloader
        downloader = CTK.Downloader('package', url_download)
        downloader.bind('stopped',
                        CTK.DruidContent__JS_to_close(downloader.id))
        downloader.bind(
            'finished',
            CTK.DruidContent__JS_to_goto(downloader.id, URL_INSTALL_SETUP))
        downloader.bind(
            'error',
            CTK.DruidContent__JS_to_goto(downloader.id,
                                         URL_INSTALL_DOWNLOAD_ERROR))

        stop = CTK.Button(_('Cancel'))
        stop.bind('click', downloader.JS_to_stop())
        buttons = CTK.DruidButtonsPanel()
        buttons += stop

        Install_Log.log("Downloading %s" % (url_download))

        cont = CTK.Container()
        cont += CTK.RawHTML('<h2>%s %s</h2>' % (_("Installing"), app_name))
        cont += CTK.RawHTML(
            '<p>%s</p>' %
            (_('The application is being downloaded. Hold on tight!')))
        cont += downloader
        cont += buttons
        cont += CTK.RawHTML(js=downloader.JS_to_start())

        return cont.Render().toStr()
コード例 #19
0
ファイル: PageVServers.py プロジェクト: zevenet/cherokee
        def __init__(self, refresh, right_box):
            CTK.Container.__init__(self)

            # Sanity check
            if not CTK.cfg.keys('vserver'):
                CTK.cfg['vserver!1!nick'] = 'default'
                CTK.cfg['vserver!1!document_root'] = '/tmp'
                CTK.cfg['vserver!1!rule!1!match'] = 'default'
                CTK.cfg['vserver!1!rule!1!handler'] = 'common'

            # Helper
            entry = lambda klass, key: CTK.Box(
                {'class': klass},
                CTK.RawHTML(CTK.escape_html(CTK.cfg.get_val(key, ''))))

            # Build the panel list
            panel = SelectionPanel.SelectionPanel(reorder,
                                                  right_box.id,
                                                  URL_BASE,
                                                  '',
                                                  container='vservers_panel')
            self += panel

            # Build the Virtual Server list
            vservers = CTK.cfg.keys('vserver')
            vservers.sort(lambda x, y: cmp(int(x), int(y)))
            vservers.reverse()

            for k in vservers:
                # Document root widget
                droot_str = CTK.cfg.get_val('vserver!%s!document_root' % (k),
                                            '')
                droot_widget = CTK.Box({'class': 'droot'},
                                       CTK.RawHTML(CTK.escape_html(droot_str)))

                if k == vservers[-1]:
                    content = [
                        entry('nick', 'vserver!%s!nick' % (k)), droot_widget
                    ]
                    panel.Add(k,
                              '/vserver/content/%s' % (k),
                              content,
                              draggable=False)
                else:
                    nick = CTK.cfg.get_val('vserver!%s!nick' % (k),
                                           _('Unknown'))
                    nick_esc = CTK.escape_html(nick)

                    # Remove
                    dialog = CTK.Dialog({
                        'title':
                        _('Do you really want to remove it?'),
                        'width':
                        480
                    })
                    dialog.AddButton(_('Cancel'), "close")
                    dialog.AddButton (_('Remove'), CTK.JS.Ajax (URL_APPLY, async=True,
                                                                data    = {'vserver!%s'%(k):''},
                                                                success = dialog.JS_to_close() + \
                                                                    refresh.JS_to_refresh()))
                    dialog += CTK.RawHTML(_(NOTE_DELETE_DIALOG) % (locals()))
                    self += dialog
                    remove = CTK.ImageStock('del')
                    remove.bind('click', dialog.JS_to_show() + "return false;")

                    # Disable
                    is_disabled = bool(
                        int(CTK.cfg.get_val('vserver!%s!disabled' % (k), "0")))
                    disclass = ('', 'vserver-inactive')[is_disabled][:]

                    disabled = CTK.ToggleButtonOnOff(not is_disabled)
                    disabled.bind(
                        'changed',
                        CTK.JS.Ajax(
                            URL_APPLY,
                            async=True,
                            data='{"vserver!%s!disabled": event.value}' % (k)))
コード例 #20
0
    def __safe_call__(self):
        box = CTK.Box()
        box += CTK.RawHTML('<h2>%s</h2>' % (_("Checking Requirements")))

        buttons = CTK.DruidButtonsPanel()
        buttons += CTK.DruidButton_Close(_('Cancel'))
        buttons += CTK.DruidButton_Goto(_('Retry'),
                                        URL_PRECONDITION,
                                        do_submit=True)

        # Check PHP
        php_cgi_bin = php.figure_phpcgi_binary()

        if not php_cgi_bin:
            box += php.PHP_Interpreter_Not_Found_Widget()
            box += buttons
            return box.Render().toStr()

        # Check general modules
        error = tools.check_modules()
        if error:
            note, instructions = error
            box += market.Util.InstructionBox(note,
                                              instructions,
                                              bin_path=php_cgi_bin)
            box += buttons
            return box.Render().toStr()

        # Database
        supported_dbs = database.get_supported_dbs(DB_SUPPORTED)
        if not supported_dbs:
            box += database.PreconditionError(DB_SUPPORTED)
            box += buttons
            return box.Render().toStr()

        # Check at least one php DB module is available
        db_errors = tools.check_database_support()
        if db_errors:
            php_cgi_bin = php.figure_phpcgi_binary()
            note, instruction_list = db_errors

            box += market.Util.InstructionBox(note,
                                              instruction_list,
                                              bin_path=php_cgi_bin)
            box += buttons
            return box.Render().toStr()

        # Check PHP settings
        setting_errors = tools.check_settings()
        if setting_errors:
            box += CTK.RawHTML('<p>%s</p>' % (_(
                "Some of your PHP settings do not meet Drupal's requirements. Please edit your PHP configuration files and try again."
            )))
            table = CTK.Table({'class': 'infosection'})
            table.set_header(1)
            table += [
                CTK.RawHTML(x)
                for x in ('%s ' % _('Setting'), '%s ' % _('Expected value'),
                          _('Current value'))
            ]
            for setting_test in setting_errors:
                table += [CTK.RawHTML(str(x)) for x in setting_test]

            box += CTK.Indenter(table)
            box += buttons
            return box.Render().toStr()

        box += CTK.RawHTML(js=CTK.DruidContent__JS_to_goto(box.id, URL_TARGET))
        return box.Render().toStr()
コード例 #21
0
    def __safe_call__(self):
        box = CTK.Box()
        buttons = CTK.DruidButtonsPanel()

        pre = 'tmp!market!install'
        root = CTK.cfg.get_val('%s!root' % (pre))
        project = os.path.join(root, 'project')
        trac_src = os.path.join(root, 'trac')
        trac_admin = os.path.join(root, 'bin', 'trac-admin')
        easy_bin = os.path.join(root, 'bin', 'easy_install')
        group_root = SystemInfo.get_info()['group_root']

        server_user = CTK.cfg.get_val('server!user', 'root')
        server_group = CTK.cfg.get_val('server!group', group_root)

        # Figure out PYTHONPATH
        ret = popen.popen_sync('python setup.py install --prefix=%(root)s' %
                               (locals()),
                               cd='%(root)s/Genshi-0.6' % (locals()))

        err = ret['stderr'] + ret['stdout']  # Python 2.4.3 actually succeeds
        tmp = re.findall(r' (%(root)s.+site-packages)' % (locals()), err)

        PYTHONPATH = tmp[0]
        CTK.cfg['tmp!market!install!trac!PYTHONPATH'] = PYTHONPATH

        # Create site-packages
        if not os.path.isdir(PYTHONPATH):
            os.makedirs(PYTHONPATH)

        # Build PYTHONPATH
        env = os.environ.copy()
        if 'PYTHONPATH' in env:
            env['PYTHONPATH'] = '%s:%s' % (PYTHONPATH, env['PYTHONPATH'])
        else:
            env['PYTHONPATH'] = PYTHONPATH

        # Installation
        tasks = [
            # Install dependencies
            ({
                'command': "python setup.py install --prefix=${app_root}",
                'env': env,
                'cd': '%(root)s/flup-1.0.2' % (locals())
            }),
            ({
                'command': "python setup.py install --prefix=${app_root}",
                'env': env,
                'cd': '%(root)s/Genshi-0.6' % (locals())
            }),
            #({'command': "python setup.py install --prefix=${app_root}", 'env': env, 'cd': '%(root)s/pysqlite-2.6.0'%(locals())}),
            ({
                'function': tools.install_pysqlite,
                'description': _('Satisfying pysqlite requirements'),
                'params': {
                    'root': root,
                    'env': str(env)
                }
            }),
            ({
                'command':
                "python %(trac_src)s/setup.py install --prefix=${app_root}" %
                (locals()),
                'env':
                env,
                'cd':
                trac_src
            }),

            # Create Project
            ({
                'command':
                "%(trac_admin)s %(project)s initenv <<EOF\nTrac\n\nEOF\n" %
                (locals()),
                'env':
                env
            }),
            ({
                'command':
                "chown -R %(server_user)s:%(server_group)s %(project)s" %
                (locals())
            })
        ]

        box += CTK.RawHTML('<h2>%s</h2>' % (_('Installing Trac')))
        box += CTK.RawHTML(
            '<p>%s</p>' %
            (_('This process may take a while. Please, hold on.')))
        box += CommandProgress(tasks, URL_USER_CONFIG)

        buttons = CTK.DruidButtonsPanel()
        buttons += CTK.DruidButton_Close(_('Cancel'))
        box += buttons

        return box.Render().toStr()
コード例 #22
0
    def __safe_call__(self):
        root = CTK.cfg.get_val('%s!root' % (PRE))
        target_directory = CTK.cfg.get_val('%s!target!directory' % (PRE),
                                           '').rstrip('/')
        nagiosuser = CTK.cfg.get_val('%s!nagiosuser' % (PRE))
        nagiosgroup = CTK.cfg.get_val('%s!nagiosgroup' % (PRE))
        nagioscmd = CTK.cfg.get_val('%s!nagioscmd' % (PRE))
        email = CTK.cfg.get_val('%s!email' % (PRE))
        contacts_path = os.path.join(root, 'nagios', 'etc', 'objects',
                                     'contacts.cfg')

        cmd_config = './configure --with-command-group=%(nagioscmd)s --prefix=${app_root}/nagios'
        if target_directory:
            cmd_config += ' --with-htmurl=%(target_directory)s --with-cgiurl=%(target_directory)s/cgi-bin'
        else:
            cmd_config += ' --with-htmurl=/ --with-cgiurl=/cgi-bin'

        tasks = [
            ({
                'cd': '${app_root}/nagios_core',
                'command': cmd_config % (locals())
            }),
            ({
                'cd': '${app_root}/nagios_core',
                'command': 'make all'
            }),
            ({
                'cd': '${app_root}/nagios_core',
                'command': 'make install'
            }),
            ({
                'function': self.make_install_init
            }),
            ({
                'cd': '${app_root}/nagios_core',
                'command': 'make install-config'
            }),
            ({
                'cd': '${app_root}/nagios_core',
                'command': 'make install-commandmode'
            }),
            ({
                'cd':
                '${app_root}/nagios_plugins',
                'command':
                './configure --with-nagios-user=%(nagiosuser)s --with-nagios-group=%(nagiosgroup)s --prefix=${app_root}/nagios'
                % (locals())
            }),
            ({
                'cd': '${app_root}/nagios_plugins',
                'command': 'make'
            }),
            ({
                'cd': '${app_root}/nagios_plugins',
                'command': 'make install'
            }),
            # The following two steps fix and validate the configuration
            ({
                'command':
                "sed -i.bkp 's/nagios@localhost/%(email)s/' %(contacts_path)s"
                % (locals())
            }),
            ({
                'command':
                '${app_root}/nagios/bin/nagios -v ${app_root}/nagios/etc/nagios.cfg'
            }),
            ({
                'command':
                'chown -R %(nagiosuser)s:%(nagiosgroup)s ${app_root}/nagios' %
                (locals())
            })
        ]

        box = CTK.Box()
        box += CTK.RawHTML('<h2>%s</h2>' % (_('Installing Nagios')))
        box += CTK.RawHTML(
            '<p>%s</p>' %
            (_('This process may take a while. Please, hold on.')))
        box += CommandProgress(tasks, URL_LAUNCH_CONFIG)

        buttons = CTK.DruidButtonsPanel()
        buttons += CTK.DruidButton_Close(_('Cancel'))
        box += buttons

        return box.Render().toStr()
コード例 #23
0
ファイル: PageRule.py プロジェクト: zevenet/cherokee
                    final = CTK.ToggleButton(
                        CTK.Box({'class': 'final-on'},
                                CTK.RawHTML(_('Final'))),
                        CTK.Box({'class': 'final-off'},
                                CTK.RawHTML(_('Non Final'))), is_final)
                    final.bind(
                        'changed',
                        CTK.JS.Ajax(
                            url_apply,
                            async=True,
                            data=
                            '{"vserver!%s!rule!%s!match!final": parseInt(event.value)?"0":"1"}'
                            % (vsrv_num, r)))

                    # Actions
                    group = CTK.Box({'class': 'sel-actions'},
                                    [disabled, remove])

                    content = [group]
                    content += [
                        CTK.Box({'class': 'name'}, CTK.RawHTML(rule_name_esc)),
                        CTK.Box({'class': 'final'}, final),
                        CTK.Box({'class': 'comment'},
                                CTK.RawHTML(', '.join(comment)))
                    ]

                    # Add the list entry
                    panel.Add(row_id,
                              '/vserver/%s/rule/content/%s' % (vsrv_num, r),
                              content, True, disclass)

    class PanelButtons(CTK.Box):
コード例 #24
0
    def __safe_call__(self):
        box = CTK.Box()
        pre = "tmp!market!install"

        submit = CTK.Submitter(URL_DETAILS_APPLY)
        table = CTK.PropsTable()

        table.Add(
            _('Admin user'),
            CTK.TextCfg('%s!moodle!adminuser' % (pre), False,
                        {'class': 'required'}), _(NOTE_ADMINUSER))
        table.Add(
            _('Admin password'),
            CTK.TextCfg('%s!moodle!adminpass' % (pre), False,
                        {'class': 'required'}), _(NOTE_ADMINPASS))
        table.Add(
            _('Full sitename'),
            CTK.TextCfg('%s!moodle!fullname' % (pre), False,
                        {'class': 'required'}), _(NOTE_FULLNAME))
        table.Add(
            _('Short sitename'),
            CTK.TextCfg('%s!moodle!shortname' % (pre), False,
                        {'class': 'required'}), _(NOTE_SHORTNAME))

        target_type = CTK.cfg.get_val('%s!target' % (pre))
        if target_type == 'directory':
            target_vserver_n = CTK.cfg.get_val('%s!target!vserver_n' % (pre))
            pre_vsrv = 'vserver!%s' % (target_vserver_n)
            vserver_nick = CTK.cfg.get_val('%s!nick' % (pre_vsrv))
            vserver_match = CTK.cfg.get_val('%s!match' % (pre_vsrv), 'name')
            if vserver_match == 'name' and vserver_nick != 'default':
                submit += CTK.Hidden('%s!moodle!domain' % (pre), vserver_nick)
            else:
                table.Add(
                    _('Domain name'),
                    CTK.TextCfg('%s!moodle!domain' % (pre), False,
                                {'class': 'required'}), _(NOTE_DOMAINNAME))

        agree_box = CTK.Box()
        agree_box += CTK.RawHTML(_('Make sure you understand and accept the '))
        agree_box += CTK.LinkWindow('http://docs.moodle.org/en/License',
                                    CTK.RawHTML(_('Moodle License')))
        agree_box += CTK.RawHTML(
            _(' before proceeding. Moodle license must be accepted to proceed.'
              ))
        agree_box += CTK.CheckCfgText('%s!moodle!agreement' % (pre), False,
                                      _('Accept license'),
                                      {'class': 'required'})

        submit += table
        submit += agree_box
        submit.bind('submit_success',
                    CTK.DruidContent__JS_to_goto(table.id, URL_SERVER))

        buttons = CTK.DruidButtonsPanel()
        buttons += CTK.DruidButton_Close(_('Cancel'))
        buttons += CTK.DruidButton_Submit(_('Next'), do_close=False)

        box = CTK.Box()
        box += CTK.RawHTML('<h2>%s</h2>' % (DETAILS_H2))
        box += CTK.RawHTML('<p>%s</p>' % (DETAILS_P1))
        box += submit
        box += buttons

        return box.Render().toStr()
コード例 #25
0
ファイル: PageRule.py プロジェクト: zevenet/cherokee
        def __init__(self, refresh, right_box, vsrv_num):
            CTK.Container.__init__(self)
            url_base = '/vserver/%s/rule' % (vsrv_num)
            url_apply = URL_APPLY % (vsrv_num)

            # Build the panel list
            panel = SelectionPanel.SelectionPanel(reorder,
                                                  right_box.id,
                                                  url_base,
                                                  '',
                                                  container='rules_panel')
            self += panel

            # Build the Rule list
            rules = CTK.cfg.keys('vserver!%s!rule' % (vsrv_num))
            rules.sort(lambda x, y: cmp(int(x), int(y)))
            rules.reverse()

            for r in rules:
                rule = Rule('vserver!%s!rule!%s!match' % (vsrv_num, r))
                rule_name = rule.GetName()
                rule_name_esc = CTK.escape_html(rule_name)

                # Comment
                comment = []

                handler = CTK.cfg.get_val('vserver!%s!rule!%s!handler' %
                                          (vsrv_num, r))
                if handler:
                    desc = filter(lambda x: x[0] == handler, HANDLERS)[0][1]
                    comment.append(_(desc))

                auth = CTK.cfg.get_val('vserver!%s!rule!%s!auth' %
                                       (vsrv_num, r))
                if auth:
                    desc = filter(lambda x: x[0] == auth, VALIDATORS)[0][1]
                    comment.append(_(desc))

                for e in CTK.cfg.keys('vserver!%s!rule!%s!encoder' %
                                      (vsrv_num, r)):
                    val = CTK.cfg.get_val('vserver!%s!rule!%s!encoder!%s' %
                                          (vsrv_num, r, e))
                    if val == 'allow':
                        comment.append(e)
                    elif val == 'forbid':
                        comment.append("no %s" % (e))

                if CTK.cfg.get_val('vserver!%s!rule!%s!flcache' %
                                   (vsrv_num, r)) == "allow":
                    comment.append('Cache')

                if CTK.cfg.get_val('vserver!%s!rule!%s!timeout' %
                                   (vsrv_num, r)):
                    comment.append('Timeout')

                if CTK.cfg.get_val('vserver!%s!rule!%s!rate' % (vsrv_num, r)):
                    comment.append('Traffic')

                if int(
                        CTK.cfg.get_val(
                            'vserver!%s!rule!%s!no_log' %
                            (vsrv_num, r), "0")) > 0:
                    comment.append('No log')

                # List entry
                row_id = '%s_%s' % (r, vsrv_num)

                if r == rules[-1]:
                    content = [
                        CTK.Box({'class': 'name'}, CTK.RawHTML(rule_name_esc)),
                        CTK.Box({'class': 'comment'},
                                CTK.RawHTML(', '.join(comment)))
                    ]
                    panel.Add(row_id,
                              '/vserver/%s/rule/content/%s' % (vsrv_num, r),
                              content,
                              draggable=False)
                else:
                    # Remove
                    dialog = CTK.Dialog({
                        'title':
                        _('Do you really want to remove it?'),
                        'width':
                        480
                    })
                    dialog.AddButton(_('Cancel'), "close")
                    dialog.AddButton (_('Remove'), CTK.JS.Ajax (url_apply, async=False,
                                                                data    = {'vserver!%s!rule!%s'%(vsrv_num, r):''},
                                                                success = dialog.JS_to_close() + \
                                                                          refresh.JS_to_refresh()))
                    dialog += CTK.RawHTML(
                        _(NOTE_DELETE_DIALOG) % (rule_name_esc))
                    self += dialog
                    remove = CTK.ImageStock('del')
                    remove.bind('click', dialog.JS_to_show() + "return false;")

                    # Disable
                    is_disabled = bool(
                        int(
                            CTK.cfg.get_val(
                                'vserver!%s!rule!%s!disabled' % (vsrv_num, r),
                                "0")))
                    disclass = ('', 'rule-inactive')[is_disabled][:]

                    disabled = CTK.ToggleButtonOnOff(not is_disabled)
                    disabled.bind(
                        'changed',
                        CTK.JS.Ajax(
                            url_apply,
                            async=True,
                            data='{"vserver!%s!rule!%s!disabled": event.value}'
                            % (vsrv_num, r)))
コード例 #26
0
    def __call__(self):
        # /source/empty
        if CTK.request.url.endswith('/empty'):
            notice = CTK.Notice('information', CTK.RawHTML(_(NOTE_NO_ENTRIES)))
            return notice.Render().toJSON()

        # /source/content/\d+
        num = re.findall(r'^%s/([\d]+)$' % (URL_CONTENT), CTK.request.url)[0]

        tipe = CTK.cfg.get_val('source!%s!type' % (num))
        nick = CTK.cfg.get_val('source!%s!nick' % (num))

        cont = CTK.Container()
        cont += CTK.RawHTML('<h2>%s: %s</h2>' %
                            (_('Source'), CTK.escape_html(nick)))

        workarea = CTK.Box({'id': 'source-workarea'})

        table = CTK.PropsTable()
        table.Add(
            _('Type'),
            CTK.ComboCfg('source!%s!type' % (num),
                         trans_options(SOURCE_TYPES)), _(NOTE_TYPE))
        table.Add(_('Nick'), CTK.TextCfg('source!%s!nick' % (num), False),
                  _(NOTE_NICK))
        table.Add(_('Connection'), CTK.TextCfg('source!%s!host' % (num),
                                               False), _(NOTE_HOST))

        if tipe == 'interpreter':
            NOTE_INTERPRETER = _(NOTE_INTERPRETER1) + '<br/>' + '<b>%s</b>' % (
                _(NOTE_INTERPRETER2))

            table.Add(_('Interpreter'),
                      CTK.TextCfg('source!%s!interpreter' % (num), False),
                      NOTE_INTERPRETER)
            table.Add(_('Spawning timeout'),
                      CTK.TextCfg('source!%s!timeout' % (num), True),
                      _(NOTE_TIMEOUT))
            table.Add(_('Execute as User'),
                      CTK.TextCfg('source!%s!user' % (num), True),
                      _(NOTE_USER))
            table.Add(_('Execute as Group'),
                      CTK.TextCfg('source!%s!group' % (num), True),
                      _(NOTE_GROUP))
            table.Add(
                _('Inherit Environment'),
                CTK.CheckCfgText('source!%s!env_inherited' % (num), True,
                                 _('Enabled')), _(NOTE_ENV_INHERIT))

        submit = CTK.Submitter(URL_APPLY)
        submit += table
        workarea += submit

        if CTK.cfg.get_val ('source!%s!type'%(num)) == 'interpreter' and \
           CTK.cfg.get_val ('source!%s!env_inherited'%(num)) == '0':
            workarea += EnvironmentWidget(num)

        sources = _all_sources_per_rule()
        rules = [
            dic.keys()[0] for dic in sources if str(num) in dic.values()[0]
        ]

        if rules:
            workarea += self.Source_Usage(rules)

        cont += workarea

        render = cont.Render()
        return render.toJSON()
コード例 #27
0
    def __safe_call__(self):
        root = CTK.cfg.get_val('tmp!market!install!root')
        app_name = CTK.cfg.get_val('tmp!market!install!app!application_name')
        cfg_changes = CTK.cfg.get_val(
            'tmp!market!install!cfg_previous_changes')

        # Finished
        finished_file = os.path.join(root, "finished")
        Install_Log.log("Creating %s" % (finished_file))
        f = open(finished_file, 'w+')
        f.close()

        # Normalize CTK.cfg
        CTK.cfg.normalize('vserver')

        # Save configuration
        box = CTK.Box()

        if not int(cfg_changes):
            CTK.cfg.save()
            Install_Log.log("Configuration saved.")

            Cherokee.server.restart(graceful=True)
            Install_Log.log("Server gracefully restarted.")
            box += CTK.RawHTML(js=SaveButton.ButtonSave__JS_to_deactive())

        Install_Log.log("Finished")

        # Thank user for the install
        box += CTK.RawHTML('<h2>%s %s</h2>' %
                           (app_name, _("has been installed successfully")))
        box += CTK.RawHTML("<p>%s</p>" % (_(NOTE_THANKS_P1)))

        # Save / Visit
        if int(cfg_changes):
            box += CTK.Notice('information', CTK.RawHTML(_(NOTE_SAVE_RESTART)))

        elif Cherokee.server.is_alive():
            install_type = CTK.cfg.get_val('tmp!market!install!target')
            nick = CTK.cfg.get_val('tmp!market!install!target!vserver')
            vserver_n = CTK.cfg.get_val('tmp!market!install!target!vserver_n')
            directory = CTK.cfg.get_val('tmp!market!install!target!directory')

            # Host
            if vserver_n and not nick:
                nick = CTK.cfg.get_val("vserver!%s!nick" % (vserver_n))

            if not nick or nick.lower() == "default":
                sys_stats = SystemStats.get_system_stats()
                nick = sys_stats.hostname

            # Ports
            ports = []
            for b in CTK.cfg['server!bind'] or []:
                port = CTK.cfg.get_val('server!bind!%s!port' % (b))
                if port:
                    ports.append(port)

            nick_port = nick
            if ports and not '80' in ports:
                nick_port = '%s:%s' % (nick, ports[0])

            # URL
            url = ''
            if install_type == 'vserver' and nick:
                url = 'http://%s/' % (nick_port)
            elif install_type == 'directory' and vserver_n and directory:
                nick = CTK.cfg.get_val('vserver!%s!nick' % (vserver_n))
                url = 'http://%s%s/' % (nick_port, directory)

            if url:
                box += CTK.RawHTML('<p>%s ' % (_("You can now visit")))
                box += CTK.LinkWindow(url,
                                      CTK.RawHTML(_('your new application')))
                box += CTK.RawHTML(' on a new window.</p>')

        box += CTK.RawHTML("<h1>%s</h1>" % (_(NOTE_THANKS_P2)))

        buttons = CTK.DruidButtonsPanel()
        buttons += CTK.DruidButton_Close(_('Close'))
        box += buttons

        # Clean up CTK.cfg
        for k in CTK.cfg.keys('tmp!market!install'):
            if k != 'app':
                del (CTK.cfg['tmp!market!install!%s' % (k)])

        return box.Render().toStr()
コード例 #28
0
    def __call__(self):
        cont = CTK.Container()

        # Basic Funcionality
        combo_type = CTK.ComboCfg('%s!policy' % (PREFIX),
                                  trans_options(POLICIES))

        table = CTK.PropsTable()
        table.Add(_('Type of Caching'), combo_type, _(NOTE_POLICY))

        encoded_table = CTK.PropsTable()
        encoded_table.Add(
            _('Extensions'),
            CTK.TextCfg('%s!encoded_exts' % (PREFIX), False,
                        {'value': ENCODED_EXTS_DEFAULT}), _(NOTE_ENC_EXTS))
        encoded_box = CTK.Box({'style': 'display:none;'})
        encoded_box += encoded_table

        combo_type.bind(
            'change', "if ($(this).val() == 'dynamic') {%s} else {%s}" %
            (encoded_box.JS_to_hide(), encoded_box.JS_to_show()))

        submit = CTK.Submitter(URL_APPLY)
        submit += table
        submit += encoded_box

        cont += CTK.RawHTML("<h2>%s</h2>" % (_("Basic Functionality")))
        cont += submit

        # PURGE
        check_auth = CTK.CheckCfgText('%s!purge' % (PREFIX), False,
                                      _("Enable"))

        table = CTK.PropsTable()
        table.Add(_('Enable PURGE requests'), check_auth, _(NOTE_AUTH))

        admin_table = CTK.PropsTable()
        admin_table.Add(
            _('Admin Username'),
            CTK.TextCfg('%s!admin!username' % (PREFIX), False,
                        {'class': 'noauto'}), _(NOTE_ADMIN_USER))
        admin_table.Add(
            _('Admin Password'),
            CTK.TextCfg('%s!admin!password' % (PREFIX), False,
                        {'class': 'noauto'}), _(NOTE_ADMIN_PASSWORD))
        admin_box = CTK.Box({'style': 'display:none;'})
        admin_box += admin_table

        check_auth.bind(
            'change',
            "if ($(this).find(':checked').size() <= 0) {%s} else {%s}" %
            (admin_box.JS_to_hide(), admin_box.JS_to_show()))

        submit = CTK.Submitter(URL_APPLY)
        submit += table
        submit += admin_box

        cont += CTK.RawHTML("<h2>%s</h2>" % (_("Purge of Cache Objects")))
        cont += submit

        # Global Submit
        submit = CTK.Submitter(URL_APPLY)
        submit += CTK.Hidden('final', '1')
        cont += submit

        cont += CTK.DruidButtonsPanel_PrevCreate_Auto()
        return cont.Render().toStr()
コード例 #29
0
ファイル: PageVServers.py プロジェクト: zevenet/cherokee
    def __call__(self):
        title = _('Virtual Servers')

        # Virtual Server List
        left = CTK.Box({'class': 'panel'})
        left += CTK.RawHTML('<h2>%s</h2>' % (title))

        # Content
        refresh_r = CTK.Refreshable({'id': 'vservers_panel'})
        refresh_r.register(lambda: self.PanelList(refresh_r, right).Render())

        # Refresh on 'New' or 'Clone'
        buttons = self.PanelButtons()
        buttons.bind(
            'submit_success',
            refresh_r.JS_to_refresh(on_success=JS_ACTIVATE_FIRST %
                                    (refresh_r.id)))
        left += buttons

        left += CTK.Box({'class': 'filterbox'},
                        CTK.TextField({
                            'class':
                            'filter',
                            'optional_string':
                            _('Virtual Server Filtering'),
                            'optional':
                            True
                        }))
        right = CTK.Box({'class': 'vserver_content'})
        left += refresh_r

        # Refresh the list whenever the content change
        right.bind('submit_success', refresh_r.JS_to_refresh())

        # Refresh the list when it's been reordered
        left.bind('reordered', refresh_r.JS_to_refresh())

        # Figure out content panel headers. This step is very tricky.
        # We have no idea what HTML headers the content HTML will
        # have. In fact, the panel content is receiving only the HTML
        # content only (body).
        #
        # The static CHILD_HEADERS class property will hold a copy of
        # the headers generated by the direct render of the PageVServer
        # class. It should cover most of the cases, unless a dynamically
        # loaded module requires an additional header entry.
        #
        if not self.CHILD_HEADERS:
            import PageVServer
            vsrv_num = CTK.cfg.keys('vserver')[0]
            render = PageVServer.RenderContent(vsrv_num).Render()
            self.CHILD_HEADERS = render.headers

        # Build the page
        page = Page.Base(title,
                         body_id='vservers',
                         helps=HELPS,
                         headers=self.CHILD_HEADERS)
        page += left
        page += right

        return page.Render()
コード例 #30
0
 def _build_error_raw(self):
     self += CTK.RawHTML('<h1>%s</h1>' % (_('Server Launch Error')))
     self += CTK.Box({'class': 'description'},
                     CTK.RawHTML(_('Something unexpected just happened.')))
     self += CTK.Box({'class': 'backtrace'}, CTK.RawHTML(self._error_raw))