예제 #1
0
def createGroup(request, username):
    assert isinstance(request, HttpRequest)
    # If the method is a POST request, check if it is a valid Create Group form
    if request.method == 'POST':
        form = CreateGroupForm(request.POST)
        if form.is_valid():
            name = form.cleaned_data['name']
            # If the group already exists, do nothing
            if Group.objects.filter(name=name).exists():
                return render(
                    request, 'app/createGroup.html', {
                        'title': username,
                        'form': CreateGroupForm(),
                        'error': 'Group already exists'
                    })
            # If the group does not exists, make a new group
            else:
                user = User.objects.get_by_natural_key(username)
                gDrive = GoogleDrive()
                # Create a folder in the drive and get its id
                folderId = gDrive.createGroup(name)

                # Create a group in the db, setting the owner to be the user who created the group,
                # and the gdriveid to be the id of the newly created folder
                group = Group()
                group.name = name
                group.owner = user
                group.gdriveid = folderId
                # Create a random 16 byte key that will be used for encryption/decryption
                group.key = get_random_bytes(16)
                group.save()

                # Create a membership relationship between the new group and the user who created it
                membership = Membership()
                membership.group = group
                membership.user = user
                membership.save()

                # Redirect back to the user page
                return redirect('/userpage/' + username)
    else:
        # If there was no POST request, just render the userpage as normal
        return render(request, 'app/createGroup.html', {
            'title': username,
            'form': CreateGroupForm()
        })