From 29fed4e6eb186e2f9a4037ce91fe5cef4d40ebce Mon Sep 17 00:00:00 2001 From: Nick Sergeant Date: Tue, 18 Aug 2015 00:59:29 -0400 Subject: [PATCH] Base work for teams. --- settings.py | 1 + teams/__init__.py | 0 teams/admin.py | 9 ++++ teams/migrations/0001_initial.py | 28 ++++++++++ teams/migrations/0002_team_email.py | 20 +++++++ teams/migrations/0003_auto_20150818_0057.py | 20 +++++++ teams/migrations/__init__.py | 0 teams/models.py | 23 ++++++++ views.py | 60 +++------------------ 9 files changed, 109 insertions(+), 52 deletions(-) create mode 100644 teams/__init__.py create mode 100644 teams/admin.py create mode 100644 teams/migrations/0001_initial.py create mode 100644 teams/migrations/0002_team_email.py create mode 100644 teams/migrations/0003_auto_20150818_0057.py create mode 100644 teams/migrations/__init__.py create mode 100644 teams/models.py diff --git a/settings.py b/settings.py index 1f06dd4..31e5989 100644 --- a/settings.py +++ b/settings.py @@ -108,6 +108,7 @@ INSTALLED_APPS = ( 'storages', 'taggit', 'tastypie', + 'teams', 'typogrify', 'user-admin', 'utils', diff --git a/teams/__init__.py b/teams/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/teams/admin.py b/teams/admin.py new file mode 100644 index 0000000..2cecf13 --- /dev/null +++ b/teams/admin.py @@ -0,0 +1,9 @@ +from django.contrib import admin +from teams.models import Team + + +class TeamAdmin(admin.ModelAdmin): + list_display = ('name', 'owner', 'created', 'modified') + ordering = ('-created',) + +admin.site.register(Team, TeamAdmin) diff --git a/teams/migrations/0001_initial.py b/teams/migrations/0001_initial.py new file mode 100644 index 0000000..063e2f2 --- /dev/null +++ b/teams/migrations/0001_initial.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations +from django.conf import settings + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='Team', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=255)), + ('slug', models.SlugField(max_length=255, blank=True)), + ('created', models.DateTimeField(auto_now_add=True)), + ('modified', models.DateTimeField(auto_now=True)), + ('members', models.ManyToManyField(related_name='member', to=settings.AUTH_USER_MODEL)), + ('owner', models.ForeignKey(related_name='owner', to=settings.AUTH_USER_MODEL)), + ('user', models.OneToOneField(to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/teams/migrations/0002_team_email.py b/teams/migrations/0002_team_email.py new file mode 100644 index 0000000..716ed97 --- /dev/null +++ b/teams/migrations/0002_team_email.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('teams', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='team', + name='email', + field=models.EmailField(default='nick@snipt.net', max_length=255), + preserve_default=False, + ), + ] diff --git a/teams/migrations/0003_auto_20150818_0057.py b/teams/migrations/0003_auto_20150818_0057.py new file mode 100644 index 0000000..844de1d --- /dev/null +++ b/teams/migrations/0003_auto_20150818_0057.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations +from django.conf import settings + + +class Migration(migrations.Migration): + + dependencies = [ + ('teams', '0002_team_email'), + ] + + operations = [ + migrations.AlterField( + model_name='team', + name='user', + field=models.OneToOneField(null=True, blank=True, to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/teams/migrations/__init__.py b/teams/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/teams/models.py b/teams/models.py new file mode 100644 index 0000000..28767c8 --- /dev/null +++ b/teams/models.py @@ -0,0 +1,23 @@ +from django.contrib.auth.models import User +from django.db import models +from snipts.utils import slugify_uniquely + + +class Team(models.Model): + user = models.OneToOneField(User, blank=True, null=True) + owner = models.ForeignKey(User, related_name='owner') + name = models.CharField(max_length=255) + email = models.EmailField(max_length=255) + slug = models.SlugField(max_length=255, blank=True) + members = models.ManyToManyField(User, related_name='member') + + created = models.DateTimeField(auto_now_add=True, editable=False) + modified = models.DateTimeField(auto_now=True, editable=False) + + def save(self, *args, **kwargs): + if not self.slug: + self.slug = slugify_uniquely(self.name, User, 'username') + return super(Team, self).save(*args, **kwargs) + + def __unicode__(self): + return self.name diff --git a/views.py b/views.py index 19db8d1..3c3abba 100644 --- a/views.py +++ b/views.py @@ -2,7 +2,6 @@ import datetime import hashlib import os import stripe -import requests from accounts.models import UserProfile from annoying.decorators import ajax_request, render_to @@ -10,7 +9,6 @@ from blogs.views import blog_list from django.conf import settings from django.contrib.auth.decorators import login_required from django.contrib.auth.models import User -from django.core.mail import send_mail from django.db.models import Count from django.http import HttpResponseRedirect, HttpResponseBadRequest from django.shortcuts import render_to_response @@ -18,6 +16,7 @@ from django.template import RequestContext from snipts.models import Snipt from snipts.utils import get_lexers_list from taggit.models import Tag +from teams.models import Team @render_to('for-teams.html') @@ -31,59 +30,16 @@ def for_teams(request): @render_to('for-teams-complete.html') def for_teams_complete(request): + if request.method == 'POST' and request.user.is_authenticated(): - if request.method == 'POST': - - if 'g-recaptcha-response' not in request.POST: - return HttpResponseBadRequest() - - payload = { - 'secret': settings.RECAPTCHA_SECRET, - 'response': request.POST['g-recaptcha-response'], - 'remoteip': request.META.get('REMOTE_ADDR') - } - r = requests.post('https://www.google.com/recaptcha/api/siteverify', - data=payload) - - if not r.json()['success']: - return HttpResponseBadRequest() - - if request.user.is_authenticated(): - name = request.POST['name'] - members = request.POST['members'] - info = request.POST['info'] - send_mail('[Snipt] New Snipt for Teams beta request.', """ - User: %s (%s) - Team name: %s - Team members: %s - Info: - - %s - """ % (request.user.username, request.user.email, name, members, - info), 'support@snipt.net', - ['nick@nicksergeant.com'], fail_silently=False) - - profile = request.user.profile - profile.teams_beta_applied = True - profile.save() - else: - username = request.POST['username'] - email = request.POST['email'] - name = request.POST['name'] - members = request.POST['members'] - info = request.POST['info'] - send_mail('[Snipt] New Snipt for Teams beta request.', """ - User: %s (%s) (not authenticated) - Team name: %s - Team members: %s - Info: - - %s - """ % (username, email, name, members, info), 'support@snipt.net', - ['nick@nicksergeant.com'], fail_silently=False) + team = Team(name=request.POST['name'], + email='nick@snipt.net', + owner=request.user) + user = User.objects.create_user(team.slug, team.email, 'password') + team.user = user + team.save() return {} - else: return HttpResponseBadRequest()