# # This file is part of FreedomBox. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as # published by the Free Software Foundation, either version 3 of the # License, or (at your option) any later version. # # This program is distributed 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 # along with this program. If not, see . # """ FreedomBox app for api for android app. """ import copy import json from django.core.serializers.json import DjangoJSONEncoder from django.http import HttpResponse from django.templatetags.static import static from plinth import frontpage, module_loader from plinth.modules import names def access_info(request, **kwargs): """API view to return a list of domains and types.""" domains = [{ 'domain': domain, 'type': domain_type } for domain_type, domains in names.domains.items() for domain in domains] response = {'domains': domains} return HttpResponse(json.dumps(response), content_type='application/json') def shortcuts(request, **kwargs): """API view to return the list of frontpage services.""" # XXX: Get the module (or module name) from shortcut properly. username = str(request.user) if request.user.is_authenticated else None shortcuts = [ _get_shortcut_data(shortcut['id'].split('_')[0], shortcut) for shortcut in frontpage.get_shortcuts(username) ] response = {'shortcuts': shortcuts} return HttpResponse( json.dumps(response, cls=DjangoJSONEncoder), content_type='application/json') def _get_shortcut_data(module_name, shortcut): """Return detailed information about a shortcut.""" module = module_loader.loaded_modules[module_name] shortcut_data = { 'name': shortcut['name'], 'short_description': shortcut['short_description'], 'description': shortcut['details'], 'icon_url': _get_icon_url(shortcut['icon']), 'clients': copy.deepcopy(getattr(module, 'clients', None)) } if module_name == 'ikiwiki': shortcut_data['clients'][0]['platforms'][0]['url'] += '/{}'.format( shortcut['name']) return shortcut_data def _get_icon_url(icon_name): """Return icon path given icon name.""" if not icon_name: return None return static('theme/icons/{}.png'.format(icon_name))