Ejemplo n.º 1
0
    def post_init(self):
        self.empty()
        self.append(self.ui.inflate('vh:main'))

        self.binder = Binder(self.manager.config, self)
        self.find('websites').new_item = lambda c: Website.create('New Website')
        self.find('domains').new_item = lambda c: WebsiteDomain.create('example.com')
        self.find('ports').new_item = lambda c: WebsitePort.create(80)
        
        extensions = BaseExtension.get_classes()

        def post_ws_bind(object, collection, item, ui):
            def create_location():
                self.binder.update()
                t = ui.find('create-location-type').value
                l = WebsiteLocation.create(template=t)
                l.backend.type = t
                item.locations.append(l)
                self.refresh()
            ui.find('create-location').on('click', create_location)

            # Extensions
            
            if hasattr(item, 'extensions'):
                for ext in item.extensions:
                    ext._ui_container.delete()

            item.extensions = []
            for ext in extensions:
                ext = ext.new(self.ui, item, config=item.extension_configs.get(ext.classname, None))
                ext._ui_container = self.ui.create('tab', children=[ext], title=ext.name)
                item.extensions.append(ext)
                ui.find('tabs').append(ext._ui_container)

            # Root creator

            ui.find('root-not-created').visible = not os.path.exists(item.root)

            def create_root():
                try:
                    os.mkdir(item.root)
                except:
                    pass
                subprocess.call(['chown', 'www-data', item.root])
                self.save()

            ui.find('create-root-directory').on('click', create_root)
            ui.find('set-path').on('click', self.save)

            # Downloader

            def download():
                url = ui.find('download-url').value
                self.save()
                tmppath = '/tmp/ajenti-v-download'
                script = 'wget "%s" -O "%s" ' % (url, tmppath)
                if url.lower().endswith('.tar.gz') or url.lower().endswith('.tgz'):
                    script += '&& tar xf "%s" -C "%s"' % (tmppath, item.root)
                elif url.lower().endswith('.zip'):
                    script += '&& unzip "%s" -d "%s"' % (tmppath, item.root)

                script += ' && chown www-data -R "%s"' % item.root
                def callback():
                    self.save()
                    self.activate()
                    if os.path.exists(tmppath):
                        os.unlink(tmppath)
                    self.context.notify('info', _('Download complete'))

                self.context.launch('terminal', command=script, callback=callback)

            ui.find('download').on('click', download)


        def post_ws_update(object, collection, item, ui):
            for ext in item.extensions:
                item.extension_configs[ext.classname] = ext.config

        def ws_delete(ws, collection):
            for ext in ws.extensions:
                try:
                    ext.on_destroy()
                except Exception, e:
                    logging.error(str(e))
            collection.remove(ws)
            self.save()
Ejemplo n.º 2
0
    def on_launch(self, website=None):
        self.activate()
        self.website = website
        self.binder.setup(self.website)
        self.binder.populate()

        for ext in BaseExtension.get_classes():
            ext.selftest()

        extensions = BaseExtension.get_classes()

        def create_location():
            self.binder.update()
            t = self.find('create-location-type').value
            l = WebsiteLocation.create(self.website, template=t)
            l.backend.type = t
            self.website.locations.append(l)
            self.refresh()

        self.find('create-location').on('click', create_location)

        # Extensions
        for tab in list(self.find('tabs').children):
            if hasattr(tab, '-is-extension'):
                tab.delete()

        self.website.extensions = []
        for ext in extensions:
            ext = ext.new(self.ui,
                          self.website,
                          config=self.website.extension_configs.get(
                              ext.classname, None))
            ext.editor_ui = self
            ext._ui_container = self.ui.create('tab',
                                               children=[ext],
                                               title=ext.name)
            setattr(ext._ui_container, '-is-extension', True)
            self.website.extensions.append(ext)
            self.find('tabs').append(ext._ui_container)

        # Root creator
        self.find('root-not-created').visible = not os.path.exists(
            self.website.root)

        def create_root():
            self.binder.update()
            if not os.path.exists(self.website.root):
                os.makedirs(self.website.root)
            subprocess.call(['chown', '-R', 'www-data:', self.website.root])
            self.save()

        self.find('create-root-directory').on('click', create_root)
        self.find('fix-root-permissions').on('click', create_root)
        self.find('set-path').on('click', self.save)

        # Downloader

        def download():
            url = self.find('download-url').value
            self.save()
            tmppath = '/tmp/ajenti-v-download'
            script = 'wget "%s" -O "%s" ' % (url, tmppath)
            if url.lower().endswith(
                ('tar', '.tar.gz', '.tgz', '.tar.bz2', '.tbz2')):
                script += '&& tar xf "%s" -C "%s"' % (tmppath,
                                                      self.website.root)
            elif url.lower().endswith('.rar'):
                script += '&& unrar x "%s" "%s"' % (tmppath, self.website.root)
            elif url.lower().endswith('.zip'):
                script += '&& unzip "%s" -d "%s"' % (tmppath,
                                                     self.website.root)

            script += ' && chown www-data: -R "%s"' % self.website.root
            script += ' && find "%s" -type d -exec chmod 775 {} ";"' % self.website.root
            script += ' && find "%s" -type f -exec chmod 644 {} ";"' % self.website.root

            def callback():
                self.save()
                self.activate()
                if os.path.exists(tmppath):
                    os.unlink(tmppath)
                self.context.notify('info', _('Download complete'))

            self.context.launch('terminal', command=script, callback=callback)

        self.find('download').on('click', download)
Ejemplo n.º 3
0
 def on_page_load(self):
     for ext in BaseExtension.get_classes():
         ext.selftest()
     self.refresh()
Ejemplo n.º 4
0
    def on_launch(self, website=None):
        self.activate()
        self.website = website
        self.binder.setup(self.website)
        self.binder.populate()

        for ext in BaseExtension.get_classes():
            ext.selftest()

        extensions = BaseExtension.get_classes()

        def create_location():
            self.binder.update()
            t = self.find('create-location-type').value
            l = WebsiteLocation.create(self.website, template=t)
            l.backend.type = t
            self.website.locations.append(l)
            self.refresh()
        self.find('create-location').on('click', create_location)

        # Extensions
        for tab in list(self.find('tabs').children):
            if hasattr(tab, '-is-extension'):
                tab.delete()

        self.website.extensions = []
        for ext in extensions:
            ext = ext.new(self.ui, self.website, config=self.website.extension_configs.get(ext.classname, None))
            ext._ui_container = self.ui.create('tab', children=[ext], title=ext.name)
            setattr(ext._ui_container, '-is-extension', True)
            self.website.extensions.append(ext)
            self.find('tabs').append(ext._ui_container)

        # Root creator
        self.find('root-not-created').visible = not os.path.exists(self.website.root)

        def create_root():
            self.binder.update()
            try:
                os.mkdir(self.website.root)
            except:
                pass
            subprocess.call(['chown', 'www-data', self.website.root])
            self.save()

        self.find('create-root-directory').on('click', create_root)
        self.find('set-path').on('click', self.save)

        # Downloader

        def download():
            url = self.find('download-url').value
            self.save()
            tmppath = '/tmp/ajenti-v-download'
            script = 'wget "%s" -O "%s" ' % (url, tmppath)
            if url.lower().endswith('.tar.gz') or url.lower().endswith('.tgz'):
                script += '&& tar xf "%s" -C "%s"' % (tmppath, self.website.root)
            elif url.lower().endswith('.zip'):
                script += '&& unzip "%s" -d "%s"' % (tmppath, self.website.root)

            script += ' && chown www-data -R "%s"' % self.website.root
            script += ' && find "%s" -type d -exec chmod 775 {} ";"' % self.website.root
            script += ' && find "%s" -type f -exec chmod 644 {} ";"' % self.website.root

            def callback():
                self.save()
                self.activate()
                if os.path.exists(tmppath):
                    os.unlink(tmppath)
                self.context.notify('info', _('Download complete'))

            self.context.launch('terminal', command=script, callback=callback)

        self.find('download').on('click', download)