def validate(self, request=None, add_messages=False): valid = True if not validator.name(self.name): if add_messages: messages.error(request, "Du har glemt å skrive inn navnet ditt.") valid = False if not validator.address(self.address): if add_messages: messages.error(request, "Du må oppgi din egen adresse da vi sender faktura og medlemskort hjem til deg.") valid = False if not validator.zipcode(self.zipcode) or self.area == '': # Empty area defines invalid zipcode, as stated in __init__ if add_messages: messages.error(request, "Postnummeret ditt ser ikke riktig ut. Du må oppgi et gyldig postnummer da vi sender faktura og medlemskort hjem til deg.") valid = False if not validator.memberid(self.memberid, req=False): if add_messages: messages.error(request, "Medlemsnummeret ditt kan kun bestå av tall. Du trenger ikke være medlem for å bestille gavemedlemskap, da kan du la medlemsnummerfeltet stå tomt.") valid = False if not validator.phone(self.phone, req=False): if add_messages: messages.error(request, "Telefonnummeret ditt må være minst 8 siffer. Du trenger ikke oppgi telefonnummeret ditt, men vi anbefaler at du gir oss minst én måte å kontakte deg.") valid = False if not validator.email(self.email, req=False): if add_messages: messages.error(request, "E-postadressen din er ikke en gyldig adresse. Du trenger ikke oppgi e-postadressen din, men vi anbefaler at du gir oss minst én måte å kontakte deg.") valid = False return valid
def is_valid(self, require_contact_info=False): # Name or address is empty if not validator.name(self.name): return False # Gender is not set if self.gender != 'm' and self.gender != 'f': return False # Use validator for phone number, require only if required if not validator.phone(self.phone, req=require_contact_info): return False # Use validator for email address, require only if required if not validator.email(self.email, req=require_contact_info): return False # Date of birth is saved as NULL when invalid if self.dob is None: return False # Birthyear is out of smalldatetime range (MSSQLs datetime datatype will barf) if self.dob.year < 1900 or self.dob.year > 2078: return False # Birthdate can't be in the future if self.dob > date.today(): return False # All tests passed! return True
def attempt_registration_nonmember(request): error_messages = [] # Check that name is provided if not validator.name(request.POST['name']): error_messages.append('invalid_name') # Check that the email address is valid if not validator.email(request.POST['email']): error_messages.append('invalid_email') # Check that the email address isn't in use if User.objects.filter(identifier=request.POST['email']).exists(): error_messages.append('email_exists') # Check that the password is long enough if len(request.POST['password']) < settings.USER_PASSWORD_LENGTH: error_messages.append('too_short_password') if len(error_messages) > 0: request.session['user.registration_nonmember_attempt'] = { 'name': request.POST['name'], 'email': request.POST['email'] } return None, error_messages user = User(identifier=request.POST['email'], email=request.POST['email']) user.first_name, user.last_name = request.POST['name'].rsplit(maxsplit=1) user.set_consent_accepted_privacy_policy_date(None, False) user.set_password(request.POST['password']) user.save() user.set_consent_dnt( Forening.DNT_CENTRAL_ID, 'email', True if request.POST.get('consent-dnt-communication-email') else False, save=True, ) authenticate(user=user) log_user_in(request, user) try: message = render_to_string('common/user/login/registered_nonmember_email.txt', request=request) send_mail(EMAIL_REGISTERED_SUBJECT, message, settings.DEFAULT_FROM_EMAIL, [user.get_email()]) except (SMTPException, SSLError, UnicodeEncodeError): # Silently log and ignore this error. Consider warning the user that the email wasn't sent? logger.warning( "Klarte ikke å sende registreringskvitteringepost", exc_info=sys.exc_info(), extra={'request': request} ) return user, None
def validate(self, request=None, add_messages=False): valid = True if self.type_index < 0 or self.type_index >= len(membership_types): if add_messages: messages.error(request, "Du har på en eller annen måte klart å angi en ugyldig medlemskapstype. Vennligst bruk select-boksen til å velge medlemskapstype.") valid = False if not validator.name(self.name): if add_messages: if len(self.name) > 0: messages.error(request, "Du må angi fullt navn til %s." % self.name) else: messages.error(request, "En av mottakerne mangler navn.") valid = False if not isinstance(self.dob, datetime): if add_messages: messages.error(request, "Fødselsdatoen til %s er ugyldig." % self.name) valid = False if isinstance(self.dob, datetime) and self.dob >= datetime.now(): if add_messages: messages.error(request, "Fødselsdatoen til %s kan ikke være i fremtiden." % self.name) valid = False if not validator.address(self.address): if add_messages: messages.error(request, "%s mangler adresse." % self.name) valid = False if not validator.zipcode(self.zipcode) or self.area == '': if add_messages: messages.error(request, "Postnummeret til %s er mangler eller er feil." % self.name) valid = False if not validator.phone(self.phone, req=False): if add_messages: messages.error(request, "Telefonnummeret til %s må bestå av minst 8 siffer." % self.name) valid = False if not validator.email(self.email, req=False): if add_messages: messages.error(request, "E-postadressen til %s er ikke gyldig." % self.name) valid = False return valid
def attempt_registration_nonmember(request): error_messages = [] # Check that name is provided if not validator.name(request.POST['name']): error_messages.append('invalid_name') # Check that the email address is valid if not validator.email(request.POST['email']): error_messages.append('invalid_email') # Check that the email address isn't in use if User.objects.filter(identifier=request.POST['email']).exists(): error_messages.append('email_exists') # Check that the password is long enough if len(request.POST['password']) < settings.USER_PASSWORD_LENGTH: error_messages.append('too_short_password') if len(error_messages) > 0: request.session['user.registration_nonmember_attempt'] = { 'name': request.POST['name'], 'email': request.POST['email'] } return None, error_messages user = User(identifier=request.POST['email'], email=request.POST['email']) user.first_name, user.last_name = request.POST['name'].rsplit(' ', 1) user.set_password(request.POST['password']) user.save() authenticate(user=user) log_user_in(request, user) try: t = loader.get_template('common/user/login/registered_nonmember_email.txt') c = RequestContext(request) send_mail(EMAIL_REGISTERED_SUBJECT, t.render(c), settings.DEFAULT_FROM_EMAIL, [user.get_email()]) except (SMTPException, SSLError): # Silently log and ignore this error. Consider warning the user that the email wasn't sent? logger.warning(u"Klarte ikke å sende registreringskvitteringepost", exc_info=sys.exc_info(), extra={'request': request} ) return user, None
def upload(request): try: image_file = request.FILES['file'] except KeyError: raise PermissionDenied if not validator.name(request.POST.get('name', '')): raise PermissionDenied if not validator.phone(request.POST.get('phone', '')): raise PermissionDenied if not validator.email(request.POST.get('email', '')): raise PermissionDenied if len(request.POST.get('description', '').strip()) == 0: raise PermissionDenied post_name = request.POST['name'].strip() post_phone = request.POST['phone'].strip() post_email = request.POST['email'].strip() post_description = request.POST['description'].strip() try: conn = boto.connect_s3(settings.AWS_ACCESS_KEY_ID, settings.AWS_SECRET_ACCESS_KEY) bucket = conn.get_bucket(s3_bucket()) image_key = Image.generate_unique_random_key() data = image_file.read() ext = image_file.name.split(".")[-1].lower() pil_image = PIL.Image.open(StringIO(data)) exif_json = json.dumps(get_exif_tags(pil_image)) image_file_tags = xmp.find_keywords(data) thumbs = [{'size': size, 'data': create_thumb(pil_image, ext, size)} for size in settings.THUMB_SIZES] if pil_image.size[0] < MIN_SIZE or pil_image.size[1] < MIN_SIZE: return HttpResponseBadRequest(json.dumps({ 'files': [{ 'name': image_file.name, 'size': image_file.size, 'error': u"Bildet må være minst 800x800 piksler", }] })) # Give boto an encoded str, not unicode content_type = image_file.content_type.encode('utf-8') key = boto.s3.key.Key(bucket, '%s%s.%s' % (settings.AWS_IMAGEGALLERY_PREFIX, image_key, ext)) key.content_type = content_type key.set_contents_from_string(data, policy='public-read') for thumb in thumbs: key = boto.s3.key.Key(bucket, '%s%s-%s.%s' % (settings.AWS_IMAGEGALLERY_PREFIX, image_key, thumb['size'], ext)) key.content_type = content_type key.set_contents_from_string(thumb['data'], policy='public-read') destination_album = Fotokonkurranse.objects.get().album licence_text = "Kan brukes i DNTs egne kommunikasjonskanaler som magasiner, nettsider og sosiale medier, i PR og for bruk av DNTs sponsorer." image = Image( key=image_key, extension=ext, hash=sha1(data).hexdigest(), description=post_description, album=destination_album, photographer=post_name, credits="%s / DNTs fotokonkurranse" % post_name, licence="%s Kontakt: %s (%s / %s)" % (licence_text, post_name, post_phone, post_email), exif=exif_json, uploader=request.user if not request.user.is_anonymous() else None, width=pil_image.size[0], height=pil_image.size[1]) image.save() for tag in [tag.lower() for tag in image_file_tags]: obj, created = Tag.objects.get_or_create(name=tag) image.tags.add(obj) # Note that we're caching the email address for one hour and not resending the email receipt # for further uploads from that address during this period. if cache.get('fotokonkurranse.emails.%s' % post_email) is None: # Set the cache quickly when we know we're going to send an email. Don't wait until after # it's sent, because other upload requests may try to send meanwhile and we don't want them to. cache.set('fotokonkurranse.emails.%s' % post_email, True, 60 * 60) try: t = loader.get_template('central/fotokonkurranse/email_confirmation.txt') c = RequestContext(request, { 'user_name': post_name, }) send_mail(EMAIL_CONFIRMATION_SUBJECT, t.render(c), settings.DEFAULT_FROM_EMAIL, [post_email]) except (SMTPException, SSLError): cache.delete('fotokonkurranse.emails.%s' % post_email) logger.warning(u"Kvitteringsepost for fotokonkurranse feilet", exc_info=sys.exc_info(), extra={'request': request} ) return HttpResponse(json.dumps({ 'files': [{ 'name': image_file.name, 'size': image_file.size, 'url': '', 'thumbnailUrl': '', 'deleteUrl': '', 'deleteType': '', }] })) except Exception as e: logger.error(u"Feil ved opplasting av bilde til fotokonkurranse", exc_info=sys.exc_info(), extra={'request': request} ) return HttpResponseBadRequest(json.dumps({ 'files': [{ 'name': image_file.name, 'size': image_file.size, 'error': "Exception ved bildeopplasting: %s" % e, }] }))