#!/usr/bin/python2.7
# -*- coding: utf-8 -*-
#
# Univention App Center
#  univention-register-apps
#
# Copyright 2014 Univention GmbH
#
# http://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
# <http://www.gnu.org/licenses/>.
#

import sys
from optparse import OptionParser

from univention.lib.package_manager import PackageManager
from univention.updater import UniventionUpdater
from univention.config_registry import ConfigRegistry
from univention.management.console.modules.appcenter.util import ComponentManager, install_opener
from univention.management.console.modules.appcenter.app_center import Application

ucr = ConfigRegistry()
ucr.load()

def register_all_installed():
	uu = UniventionUpdater(False)
	component_manager = ComponentManager(ucr, uu)
	package_manager = PackageManager(lock=False)

	install_opener(ucr)
	for app in Application.all_installed(package_manager):
		app.register(component_manager, package_manager)
		app.tell_ldap(ucr, package_manager, inform_about_error=False)
	Application._set_ucr_codes_variable(component_manager.ucr, package_manager)

if __name__ == '__main__':
	args = ucr.get('hostname'), ucr.get('domainname'), Application.get_server(with_scheme=True)
	usage = '%prog'
	description = '%%prog registers all installed apps. The installation status is written to LDAP and some apps change the overview site at "https://%s.%s/ucs-overview". The Univention App Center server (%s) needs to be reachable' % args
	parser = OptionParser(usage=usage, description=description)
	parser.parse_args()

	try:
		register_all_installed()
	except Exception as exc:
		sys.stderr.write('univention-register-apps did not succeed. Check the internet connection and try again.\n')
		sys.exit(1)
	else:
		sys.stdout.write('All applications have been registered.\n')
		sys.exit(0)

