Source code for univention.app_appliance

#!/usr/bin/python3
# -*- coding: utf-8 -*-
#
# Univention App Appliance
#  Application class
#
# Copyright 2016-2022 Univention GmbH
#
# https://www.univention.de/
#
# All rights reserved.
#
# The source code of this program is made available
# under the terms of the GNU Affero General Public License version 3
# (GNU AGPL V3) as published by the Free Software Foundation.
#
# Binary versions of this program provided by Univention to you as
# well as other copyrighted, protected or trademarked materials like
# Logos, graphics, fonts, specific documentations and configurations,
# cryptographic keys etc. are subject to a license agreement between
# you and Univention and not subject to the GNU AGPL V3.
#
# In the case you use this program under the terms of the GNU AGPL V3,
# the program is provided 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 Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public
# License with the Debian GNU/Linux or Univention distribution in file
# /usr/share/common-licenses/AGPL-3; if not, see
# <https://www.gnu.org/licenses/>.
#

import univention.appcenter.app as app
import univention.appcenter.app_cache as app_cache
import struct
import os
import json


[docs]class App(app.App): appliance_name = app.AppAttribute() # UMC modules to be displayed in the UMC category 'favorites' appliance_favorite_modules = app.AppListAttribute() # simple two-color scheme for setup wizard + system activation appliance_primary_color = app.AppAttribute() appliance_secondary_color = app.AppAttribute() # background CSS style as well as logo for the bootsplash screen appliance_css_background = app.AppAttribute() appliance_bootsplash_logo = app.AppAttribute() # additional logos for the setup wizard appliance_umc_header_logo = app.AppAttribute() # also used for the system activation appliance_logo = app.AppAttribute() # logo is displayed on the first wizard page # logo and font color to be used together with the appliance_css_background # for the welcome screen appliance_welcome_screen_logo = app.AppAttribute() appliance_welcome_screen_font_color = app.AppAttribute() # properties to be applied to the portal appliance_portal_logo = app.AppAttribute() appliance_portal_font_color = app.AppAttribute() appliance_portal_css_background = app.AppAttribute() appliance_portal_background_image = app.AppAttribute() appliance_portal_title = app.AppAttribute() readme_appliance = app.AppFileAttribute() # additional properties appliance_pages_blacklist = app.AppAttribute() appliance_fields_blacklist = app.AppAttribute() appliance_blacklist = app.AppAttribute() appliance_whitelist = app.AppAttribute() appliance_allow_preconfigured_setup = app.AppBooleanAttribute(default=False)
[docs]class AppCache(app_cache.AppCache):
[docs] def get_app_class(self): if self._app_class is None: self._app_class = App return self._app_class
[docs]class AppCenterCache(app_cache.AppCenterCache):
[docs] def get_app_cache_class(self): if self._cache_class is None: self._cache_class = AppCache return self._cache_class
[docs]class Apps(app_cache.Apps):
[docs] def get_appcenter_cache_class(self): if self._cache_class is None: self._cache_class = AppCenterCache return self._cache_class
[docs]def get_luminance(hexcolor): hexcolor = hexcolor.strip(' #') red, green, blue = struct.unpack('BBB', hexcolor.decode('hex')) # Taken from: http://stackoverflow.com/questions/1855884/determine-font-color-based-on-background-color return (0.299 * red + 0.587 * green + 0.114 * blue) / 255
[docs]def get_cache_dir_name(app): CACHE_DIR = '/var/cache/univention-app-appliance/' app_cache_dir = os.path.join(CACHE_DIR, app.id) return app_cache_dir
[docs]def get_app_style_properties(app): local_cache_name = 'app_props' if app.get_locale() == 'en' else 'app_props_de' try: with open(os.path.join(get_cache_dir_name(app), local_cache_name)) as fd: props = json.load(fd) print('Properties loaded from %s cache' % local_cache_name) return props except Exception as exc: if not os.path.exists(os.path.join(get_cache_dir_name(app), local_cache_name)): print('Properties loaded from web for %s' % local_cache_name) else: print('Warning: ' + exc) props = dict() for i in ( 'primary_color', 'secondary_color', 'css_background', 'bootsplash_logo', 'umc_header_logo', 'logo', 'welcome_screen_logo', 'welcome_screen_font_color', 'favorite_modules', 'portal_logo', 'portal_font_color', 'portal_css_background', 'portal_background_image', 'portal_title', ): ival = getattr(app, 'appliance_%s' % i, None) if ival: props[i] = ival return props