from django.conf import settings from django.http import HttpResponse from django.template import RequestContext from django.shortcuts import ( render_to_response, ) from django.contrib.auth.decorators import ( login_required ) from django.contrib.auth.models import Group config_template = '''\ var globalConfig = { %s } ''' def get_username(request): return request.user.username.split("@", 1)[0] def prefix2group(prefix): # If prefix is in adhoc map, return corresponding group for k, v in settings.GROUP_TO_PREFIX_MAP.iteritems(): if v == prefix: return k # Otherwise, check if prefix matches groups known to Django if Group.objects.filter(name=prefix).exists(): return prefix # Otherwise, it should be personal build return "linaro-android-builders" def group2prefix(request, group): val = settings.GROUP_TO_PREFIX_MAP.get(group, group) if val == "$user": return get_username(request) return val def is_builder(request): return request.user.groups.filter(name='linaro-android-builders').exists() def can_edit(request, build_name): if request.user.is_authenticated(): owner_name = build_name.split('/')[0][1:] group = prefix2group(owner_name) if group == "linaro-android-builders": return owner_name == get_username(request) else: return request.user.groups.filter(name=group).exists() else: return False def _config(request): data = {} if request.user.is_authenticated(): data['userName'] = repr(str(get_username(request))) gl = [] for g in request.user.groups.all(): gl.append(g.name) data['userGroups'] = repr(str(' '.join(gl))) else: data['userName'] = 'null' data['userGroups'] = 'null' data['jenkinsURL'] = repr(settings.JENKINS_URL_FOR_APP) data['loginURL'] = repr(settings.LOGIN_URL) l = [] for k, v in data.items(): l.append('%s: %s' % (k, v)) return config_template % (',\n '.join(l)) def _render(request, filename, data=None): context_data = { 'config_data': _config(request), 'useOwnCombo': settings.USE_OWN_COMBO, } if data is not None: context_data.update(data) response = render_to_response( filename, context_data, context_instance=RequestContext(request)) response.set_cookie( settings.CSRF_COOKIE_NAME, request.META["CSRF_COOKIE"], max_age=60 * 60 * 24 * 7 * 52, domain=settings.CSRF_COOKIE_DOMAIN) return response def index(request): return _render(request, 'index.html') def build_details(request, buildName): data = { 'buildName': buildName, 'canEdit': can_edit(request, buildName), 'canBuild': is_builder(request), } return _render(request, 'buildDetails.html', data) @login_required def new(request): if not is_builder(request): return HttpResponse("sorry you are not allowed here", status=403) data = { 'request': request, 'groups': request.user.groups.all(), } return _render(request, 'new.html', data)