Skip to content

Commit

Permalink
#28 добавил возможность перевыпускать рутовый сертификат
Browse files Browse the repository at this point in the history
  • Loading branch information
YraganTron committed Jun 4, 2017
1 parent 7006304 commit 8bc727d
Show file tree
Hide file tree
Showing 5 changed files with 51 additions and 6 deletions.
2 changes: 1 addition & 1 deletion core/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -125,5 +125,5 @@ def clean_crt_text(self):
return crt_text


class RecreationSiteCrt(forms.Form):
class RecreationCrt(forms.Form):
validity_period = forms.DateField(label='Certificate expiration date')
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
<div class="container">
<div class="col-sm-12">
<div class="col-sm-12 view-root-crt-btns">
<a href="#" role="button" class="btn btn-default">Re-creation</a>
<a href="{% url 'recreation_root_crt' %}" role="button" class="btn btn-default">Re-creation</a>
<a href="{% url 'delete_root_crt' %}" role="button" class="btn btn-danger pull-right">Delete</a>
</div>
<div class="col-sm-5">
Expand Down
1 change: 1 addition & 0 deletions core/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
url(r'^has_root_key/$', views.LoadRootCrt.as_view(), name='has_root_key'),
url(r'^no_root_key/$', views.GenerateRootCrt.as_view(), name='no_root_key'),
url(r'^view_root_crt/$', views.ViewRootCrt.as_view(), name='view_root_crt'),
url(r'^recreation_root_crt/$', views.RecreationRootCrt.as_view(), name='recreation_root_crt'),
url(r'^delete_root_crt/$', views.RootCrtDelete.as_view(), name='delete_root_crt'),

url(r'^create_crt/$', views.CreateSiteCrt.as_view(), name='create_crt'),
Expand Down
22 changes: 19 additions & 3 deletions core/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,16 @@


class CA:
def generate_root_certificate(self, data):
def generate_root_certificate(self, data, recreation=False):
pkey = self.create_key_pair()
validity_period = self.calculate_validity_period(data['validity_period'])
cert = self.create_cert_root(pkey, self.generate_subj_root_crt(data), validity_period)
if recreation:
cert = self.create_cert_root(pkey, self.generate_subj_recreation_root_crt(), validity_period)
else:
cert = self.create_cert_root(pkey, self.generate_subj_root_crt(data), validity_period)
self.write_cert_root(cert, pkey)
self.create_model_root_crt(data)
if not recreation:
self.create_model_root_crt(data)

def generate_site_certificate(self, cn, validity_period, pk=None):
pkey = self.create_key_pair()
Expand Down Expand Up @@ -48,6 +52,18 @@ def generate_subj_site_crt(cn):
}
return options

def generate_subj_recreation_root_crt(self):
root = models.RootCrt.objects.get()
options = {
'C': root.country,
'ST': root.state,
'L': root.location,
'O': root.organization,
'OU': root.organizational_unit_name,
'emailAddress': root.email,
}
return options

def generate_subj_root_crt(self, data):
options = {
'C': data['country'],
Expand Down
30 changes: 29 additions & 1 deletion core/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -261,7 +261,7 @@ def delete(self, request, *args, **kwargs):

class RecreationSiteCrt(BreadcrumbsMixin, CertRootNotExistMixin, FormView, DetailView):
model = models.SiteCrt
form_class = forms.RecreationSiteCrt
form_class = forms.RecreationCrt
template_name = 'core/certificate/recreation.html'

def get_breadcrumbs(self):
Expand All @@ -288,3 +288,31 @@ def form_valid(self, form):
ca.generate_site_certificate(self.object.cn, form.cleaned_data['validity_period'], pk=self.object.pk)
messages.success(self.request, 'Recreation success')
return super().form_valid(form)


class RecreationRootCrt(BreadcrumbsMixin, FormView, DetailView):
model = models.RootCrt
form_class = forms.RecreationCrt
template_name = 'core/certificate/recreation.html'
success_url = reverse_lazy('view_root_crt')

def get_breadcrumbs(self):
return (
('Home', reverse('index')),
('View root crt', reverse('view_root_crt')),
('Recreation root certificate', '')
)

def get_object(self, queryset=None):
return get_object_or_404(self.model)

def form_valid(self, form):
self.object = models.RootCrt.objects.get()
path_root_dir = os.path.join(settings.MEDIA_ROOT, settings.ROOT_CRT_PATH)
directory = os.listdir(path_root_dir)
for file in directory:
os.remove(os.path.join(path_root_dir, file))
ca = CA()
ca.generate_root_certificate(form.cleaned_data, recreation=True)
messages.success(self.request, 'Recreation success')
return super().form_valid(form)

0 comments on commit 8bc727d

Please sign in to comment.