Example #1
0
managed_services = ['transmission-daemon']

managed_packages = ['transmission-daemon']

name = _('Transmission')

short_description = _('BitTorrent')

description = [
    _('BitTorrent is a peer-to-peer file sharing protocol. '
      'Transmission daemon handles Bitorrent file sharing.  Note that '
      'BitTorrent is not anonymous.'),
    _('Access the web interface at <a href="/transmission">/transmission</a>.')
]

web_clients = [web_client(name='Transmission', url='/transmission')]

reserved_usernames = ['debian-transmission']

service = None


def init():
    """Intialize the Transmission module."""
    menu = main_menu.get('apps')
    menu.add_urlname(name, 'glyphicon-save', 'transmission:index',
                     short_description)

    global service
    setup_helper = globals()['setup_helper']
    if setup_helper.get_state() != 'needs-setup':
Example #2
0
description = [
    _('<a href="https://matrix.org/docs/guides/faq.html">Matrix</a> is an new '
      'ecosystem for open, federated instant messaging and VoIP. Synapse is a '
      'server implementing the Matrix protocol. It provides chat groups, '
      'audio/video calls, end-to-end encryption, multiple device '
      'synchronization and does not require phone numbers to work. Users on a '
      'given Matrix server can converse with users on all other Matrix '
      'servers via federation.'),

    _('To communicate, you can use the '
      '<a href="https://matrix.org/docs/projects/">available clients</a> '
      'for mobile, desktop and the web. <a href="https://riot.im/">Riot</a> '
      'client is recommended.')
]

web_clients = [web_client(name='Riot', url='https://riot.im/app/#/home')]

desktop_clients = [desktop_client(name='Riot',
                                 url='https://riot.im/desktop.html'),
                  desktop_client(name='WeeChat CLI',
                                 url='https://weechat.org/')]

mobile_clients = [mobile_client(name='Riot',
                                fully_qualified_name='im.vector.alpha',
                                play_store_url='https://play.google.com/store/apps/'
                                           'details?id=im.vector.alpha',
                                fdroid_url='https://f-droid.org/packages/'
                                               'im.vector.alpha/')]

service = None
Example #3
0
short_description = _('Chat Server')

description = [
    _('XMPP is an open and standardized communication protocol. Here '
      'you can run and configure your XMPP server, called ejabberd.'),
    format_lazy(_(
        'To actually communicate, you can use the <a href="/plinth/apps/'
        'jsxc">web client</a> or any other <a href=\'http://xmpp.org/xmpp-'
        'software/clients/\' target=\'_blank\'>XMPP client</a>. '
        'When enabled, ejabberd can be accessed by any <a href="/plinth/sys'
        '/users">user with a {box_name} login</a>.'),
                box_name=_(cfg.box_name))
]

web_clients = [
    web_client(name='JSXC', url='/plinth/apps/jsxc'),
    web_client(name='XMPP client',
               url='http://xmpp.org/xmpp'
               '-software/clients')
]

reserved_usernames = ['ejabberd']

service = None

logger = logging.getLogger(__name__)


def init():
    """Initialize the ejabberd module"""
    menu = main_menu.get('apps')
Example #4
0
      'replicated on all other devices that also run Syncthing.'),
    format_lazy(_(
        'Running Syncthing on {box_name} provides an extra synchronization '
        'point for your data that is available most of the time, allowing '
        'your devices to synchronize more often.  {box_name} runs a single '
        'instance of Syncthing that may be used by multiple users.  Each '
        'user\'s set of devices may be synchronized with a distinct set of '
        'folders.  The web interface on {box_name} is only available for '
        'users belonging to the "admin" group.'),
                box_name=_(cfg.box_name)),
    _('When enabled, Syncthing\'s web interface will be available from '
      '<a href="/syncthing/">/syncthing</a>.  Desktop and mobile clients are '
      'also <a href="https://syncthing.net/">available</a>.'),
]

web_clients = [web_client(name='Syncthing', url='/syncthing')]

desktop_clients = [
    desktop_client(name='Syncthing', url='https://syncthing.net/')
]

mobile_clients = [
    mobile_client(
        name='Syncthing',
        fully_qualified_name='com.nutomic.syncthingandroid',
        fdroid_url='https://f-droid.org/packages/com.nutomic.syncthingandroid/',
        play_store_url=
        'https://play.google.com/store/apps/details?id=com.nutomic'
        '.syncthingandroid')
]
Example #5
0
name = _('Deluge')

short_description = _('BitTorrent Web Client')

description = [
    _('Deluge is a BitTorrent client that features a Web UI.'),
    _('When enabled, the Deluge web client will be available from '
      '<a href="/deluge">/deluge</a> path on the web server. The '
      'default password is \'deluge\', but you should log in and change '
      'it immediately after enabling this service.')
]

reserved_usernames = ['debian-deluged']

web_clients = [web_client(name='Deluge', url='/deluge')]


def init():
    """Initialize the Deluge module."""
    menu = main_menu.get('apps')
    menu.add_urlname(name, 'glyphicon-magnet', 'deluge:index',
                     short_description)

    global service
    setup_helper = globals()['setup_helper']
    if setup_helper.get_state() != 'needs-setup':
        service = service_module.Service(managed_services[0],
                                         name,
                                         ports=['http', 'https'],
                                         is_external=True,
Example #6
0
    _('Tiny Tiny RSS is a news feed (RSS/Atom) reader and aggregator, '
      'designed to allow reading news from any location, while feeling as '
      'close to a real desktop application as possible.'),

    format_lazy(
        _('When enabled, Tiny Tiny RSS will be available from <a href="/tt-'
          'rss">/tt-rss</a> path on the web server. It can be accessed by '
          'any <a href="/plinth/sys/users">user with a {box_name} login</a>.'),
        box_name=_(cfg.box_name)),

    format_lazy(
        _('When using a mobile or desktop application for Tiny Tiny RSS, use '
          'the URL <a href="/tt-rss-app/">/tt-rss-app</a> for connecting.'))
]

web_clients = [web_client(name='TT-RSS', url='/tt-rss')]

mobile_clients = [
    mobile_client(name='TTRSS-Reader',
                  fully_qualified_name='org.ttrssreader',
                  play_store_url='https://play.google.com/store/apps/details'
                                 '?id=org.ttrssreader',
                  fdroid_url='https://f-droid.org/packages/org.ttrssreader/')]

service = None


def init():
    """Intialize the module."""
    menu = main_menu.get('apps')
    menu.add_urlname(name, 'glyphicon-envelope', 'ttrss:index',
Example #7
0
    _('You can access Roundcube from <a href="/roundcube">'
      '/roundcube</a>. Provide the username and password of the email '
      'account you wish to access followed by the domain name of the '
      'IMAP server for your email provider, like <code>imap.example.com'
      '</code>.  For IMAP over SSL (recommended), fill the server field '
      'like <code>imaps://imap.example.com</code>.'),

    _('For Gmail, username will be your Gmail address, password will be '
      'your Google account password and server will be '
      '<code>imaps://imap.gmail.com</code>.  Note that you will also need '
      'to enable "Less secure apps" in your Google account settings '
      '(<a href="https://www.google.com/settings/security/lesssecureapps"'
      '>https://www.google.com/settings/security/lesssecureapps</a>).'),
]

web_clients = [web_client('Roundcube', '/roundcube')]

service = None


def init():
    """Intialize the module."""
    menu = main_menu.get('apps')
    menu.add_urlname(name, 'glyphicon-envelope', 'roundcube:index', short_description)

    global service
    setup_helper = globals()['setup_helper']
    if setup_helper.get_state() != 'needs-setup':
        service = service_module.Service(
            'roundcube', name, ports=['http', 'https'], is_external=True,
            is_enabled=is_enabled, enable=enable, disable=disable)
Example #8
0
managed_packages = ['shaarli']

name = _('Shaarli')

short_description = _('Bookmarks')

description = [
    _('Shaarli allows you to save and share bookmarks.'),

    _('When enabled, Shaarli will be available from <a href="/shaarli">'
      '/shaarli</a> path on the web server. Note that Shaarli only supports a '
      'single user account, which you will need to setup on the initial '
      'visit.'),
]

web_clients = [web_client(name='Shaarli', url='/shaarli')]

service = None


def init():
    """Initialize the module."""
    menu = main_menu.get('apps')
    menu.add_urlname(name, 'glyphicon-bookmark', 'shaarli:index', short_description)

    global service
    setup_helper = globals()['setup_helper']
    if setup_helper.get_state() != 'needs-setup':
        service = service_module.Service(
            'shaarli', name, ports=['http', 'https'], is_external=True,
            is_enabled=is_enabled, enable=enable, disable=disable)
Example #9
0
short_description = _('Unhosted Storage')

description = [
    format_lazy(
        _('reStore is a server for <a href=\'https://unhosted.org/\'>'
          'unhosted</a> web applications.  The idea is to uncouple web '
          'applications from data.  No matter where a web application is '
          'served from, the data can be stored on an unhosted storage '
          'server of user\'s choice.  With reStore, your {box_name} becomes '
          'your unhosted storage server.'), box_name=_(cfg.box_name)),

    _('You can create and edit accounts in the '
      '<a href=\'/restore/\'>reStore web-interface</a>.')
]

web_clients = [web_client(name='reStore web-interface', url='/restore')]

reserved_usernames = ['node-restore']

service = None


def init():
    """Initialize the reStore module."""
    menu = main_menu.get('apps')
    menu.add_urlname(name, 'glyphicon-hdd', 'restore:index', short_description)

    global service
    setup_helper = globals()['setup_helper']
    if setup_helper.get_state() != 'needs-setup':
        service = service_module.Service(
Example #10
0
description = [
    _('ikiwiki is a simple wiki and blog application. It supports '
      'several lightweight markup languages, including Markdown, and '
      'common blogging functionality such as comments and RSS feeds. '
      'When enabled, the blogs and wikis will be available '
      'at <a href="/ikiwiki">/ikiwiki</a> (once created).'),
    format_lazy(_(
        'Only {box_name} users in the <b>admin</b> group can <i>create</i> '
        'and <i>manage</i> blogs and wikis, but any user in the <b>wiki</b> '
        'group can <i>edit</i> existing ones. In the <a href="/plinth/sys/'
        'users">User Configuration</a> you can change these '
        'permissions or add new users.'),
                box_name=_(cfg.box_name))
]

web_clients = [web_client(name='ikiwiki', url='/ikiwiki')]


def init():
    """Initialize the ikiwiki module."""
    menu = main_menu.get('apps')
    menu.add_urlname(name, 'glyphicon-edit', 'ikiwiki:index',
                     short_description)

    global service
    setup_helper = globals()['setup_helper']
    if setup_helper.get_state() != 'needs-setup':
        service = service_module.Service('ikiwiki',
                                         name,
                                         ports=['http', 'https'],
                                         is_external=True,