aboutsummaryrefslogtreecommitdiff
path: root/android_build/frontend/views.py
blob: 24a4d41e2784e92ec24c3eb62e1c1137fcef55e1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
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,
        'user': get_username(request),
        'groups': request.user.groups.all(),
    }
    return _render(request, 'new.html', data)