125 lines
		
	
	
	
		
			4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			125 lines
		
	
	
	
		
			4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import random
 | |
| import string
 | |
| from django import forms
 | |
| from membership.models import CustomUser
 | |
| from django.contrib.auth import authenticate
 | |
| 
 | |
| 
 | |
| from utils.stripe_utils import StripeUtils
 | |
| 
 | |
| from .models import HostingOrder, VirtualMachinePlan, UserHostingKey
 | |
| 
 | |
| 
 | |
| class HostingOrderAdminForm(forms.ModelForm):
 | |
| 
 | |
|     class Meta:
 | |
|         model = HostingOrder
 | |
|         fields = ['vm_plan', 'customer']
 | |
| 
 | |
|     def clean(self):
 | |
|         customer = self.cleaned_data.get('customer')
 | |
|         vm_plan = self.cleaned_data.get('vm_plan')
 | |
| 
 | |
|         if vm_plan.status == VirtualMachinePlan.CANCELED_STATUS:
 | |
|             raise forms.ValidationError("""You can't make a charge over
 | |
|                                          a canceled virtual machine plan""")
 | |
| 
 | |
|         if not customer:
 | |
|             raise forms.ValidationError("""You need select a costumer""")
 | |
| 
 | |
|         # Make a charge to the customer
 | |
|         stripe_utils = StripeUtils()
 | |
|         charge_response = stripe_utils.make_charge(customer=customer.stripe_id,
 | |
|                                                    amount=vm_plan.price)
 | |
|         charge = charge_response.get('response_object')
 | |
|         if not charge:
 | |
|             raise forms.ValidationError(charge_response.get('error'))
 | |
| 
 | |
|         self.cleaned_data.update({
 | |
|             'charge': charge
 | |
|         })
 | |
|         return self.cleaned_data
 | |
| 
 | |
| 
 | |
| class HostingUserLoginForm(forms.Form):
 | |
| 
 | |
|     email = forms.CharField(widget=forms.EmailInput())
 | |
|     password = forms.CharField(widget=forms.PasswordInput())
 | |
| 
 | |
|     class Meta:
 | |
|         fields = ['email', 'password']
 | |
| 
 | |
|     def clean(self):
 | |
|         email = self.cleaned_data.get('email')
 | |
|         password = self.cleaned_data.get('password')
 | |
|         is_auth = authenticate(email=email, password=password)
 | |
|         if not is_auth:
 | |
|             raise forms.ValidationError("Your username and/or password were incorrect.")
 | |
|         return self.cleaned_data
 | |
| 
 | |
|     def clean_email(self):
 | |
|         email = self.cleaned_data.get('email')
 | |
|         try:
 | |
|             CustomUser.objects.get(email=email)
 | |
|             return email
 | |
|         except CustomUser.DoesNotExist:
 | |
|             raise forms.ValidationError("User does not exist")
 | |
|         else:
 | |
|             return email
 | |
| 
 | |
| 
 | |
| class HostingUserSignupForm(forms.ModelForm):
 | |
| 
 | |
|     confirm_password = forms.CharField(widget=forms.PasswordInput())
 | |
|     password = forms.CharField(widget=forms.PasswordInput())
 | |
| 
 | |
|     class Meta:
 | |
|         model = CustomUser
 | |
|         fields = ['name', 'email', 'password']
 | |
|         widgets = {
 | |
|             'name': forms.TextInput(attrs={'placeholder': 'Enter your name or company name'}),
 | |
|         }
 | |
| 
 | |
|     def clean_confirm_password(self):
 | |
|         password = self.cleaned_data.get('password')
 | |
|         confirm_password = self.cleaned_data.get('confirm_password')
 | |
|         if not confirm_password == password:
 | |
|             raise forms.ValidationError("Passwords don't match")
 | |
|         return confirm_password
 | |
| 
 | |
| 
 | |
| class UserHostingKeyForm(forms.ModelForm):
 | |
|     private_key = forms.CharField(widget=forms.PasswordInput(), required=False)
 | |
|     public_key = forms.CharField(widget=forms.PasswordInput(), required=False)
 | |
|     user = forms.models.ModelChoiceField(queryset=CustomUser.objects.all(), required=False)
 | |
|     name = forms.CharField(required=False)
 | |
| 
 | |
|     def __init__(self, *args, **kwargs):
 | |
|         self.request = kwargs.pop("request")
 | |
|         super(UserHostingKeyForm, self).__init__(*args, **kwargs)
 | |
|         # self.initial['user'].initial = self.request.user.id
 | |
|         # print(self.fields)
 | |
| 
 | |
|     def clean_name(self):
 | |
|         return ''.join(random.choice(string.ascii_lowercase) for i in range(7))
 | |
| 
 | |
|     def clean_user(self):
 | |
|         return self.request.user
 | |
| 
 | |
|     def clean(self):
 | |
|         cleaned_data = self.cleaned_data
 | |
| 
 | |
|         print(cleaned_data)
 | |
| 
 | |
|         if not cleaned_data.get('public_key'):
 | |
|             private_key, public_key = UserHostingKey.generate_keys()
 | |
|             cleaned_data.update({
 | |
|                 'private_key': private_key,
 | |
|                 'public_key': public_key
 | |
|             })
 | |
| 
 | |
|         return cleaned_data
 | |
| 
 | |
|     class Meta:
 | |
|         model = UserHostingKey
 | |
|         fields = ['user', 'public_key', 'name']
 |