-
Notifications
You must be signed in to change notification settings - Fork 252
Expand file tree
/
Copy pathadmin.py
More file actions
161 lines (137 loc) · 4.8 KB
/
Copy pathadmin.py
File metadata and controls
161 lines (137 loc) · 4.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
"""This contains customizations for displaying the CommandCenter application models in the admin panel."""
# Django Imports
from django.contrib import admin
from django import forms
from django.template.loader import render_to_string
# Ghostwriter Libraries
from ghostwriter.commandcenter.forms import ReportConfigurationForm
from ghostwriter.commandcenter.models import (
BannerConfiguration,
CloudServicesConfiguration,
CompanyInformation,
ExtraFieldModel,
ExtraFieldSpec,
GeneralConfiguration,
BloodHoundConfiguration,
NamecheapConfiguration,
ReportConfiguration,
SlackConfiguration,
VirusTotalConfiguration,
EXTRA_FIELD_TYPES,
)
from ghostwriter.singleton.admin import SingletonModelAdmin
admin.site.register(CloudServicesConfiguration, SingletonModelAdmin)
admin.site.register(CompanyInformation, SingletonModelAdmin)
admin.site.register(NamecheapConfiguration, SingletonModelAdmin)
admin.site.register(SlackConfiguration, SingletonModelAdmin)
admin.site.register(VirusTotalConfiguration, SingletonModelAdmin)
admin.site.register(GeneralConfiguration, SingletonModelAdmin)
admin.site.register(BannerConfiguration, SingletonModelAdmin)
class ReportConfigurationAdmin(SingletonModelAdmin):
form = ReportConfigurationForm
fieldsets = (
(
"Borders",
{
"fields": (
"enable_borders",
"border_weight",
"border_color",
)
},
),
(
"Captions",
{
"fields": (
"title_case_captions",
"title_case_exceptions",
)
},
),
(
"Figures",
{
"fields": (
"prefix_figure",
"label_figure",
"figure_caption_location",
)
},
),
(
"Tables",
{
"fields": (
"prefix_table",
"label_table",
"table_caption_location",
)
},
),
(
"Report Generation",
{
"fields": (
"report_filename",
"project_filename",
"target_delivery_date",
"default_docx_template",
"default_pptx_template",
)
},
),
)
admin.site.register(ReportConfiguration, ReportConfigurationAdmin)
class ExtraFieldSpecForm(forms.ModelForm):
internal_name = forms.RegexField(
r"^[_a-zA-Z][_a-zA-Z0-9]*$",
max_length=255,
help_text="Name used in report templates and storage (no spaces)",
)
user_default_value = forms.CharField(
required=False,
strip=True,
help_text="Value used in newly created objects. Changing this will not change existing objects, and newly created fields will be set to blank on existing objects.",
)
description = forms.CharField(
required=False, strip=True, help_text="Help text shown under the extra field in forms"
)
def clean_user_default_value(self):
field_type = self.cleaned_data.get("type")
default_value = self.cleaned_data.get("user_default_value")
if field_type is None:
return default_value
try:
EXTRA_FIELD_TYPES[field_type].from_str(default_value)
except ValueError:
raise forms.ValidationError(f"Invalid default value for a(n) {field_type} extra field")
return default_value
class Meta:
model = ExtraFieldSpec
exclude = ["target_model"]
class ExtraFieldSpecInline(admin.TabularInline):
model = ExtraFieldSpec
form = ExtraFieldSpecForm
class ExtraFieldModelAdmin(admin.ModelAdmin):
fields = ["model_display_name"]
readonly_fields = ["model_display_name"]
inlines = [
ExtraFieldSpecInline,
]
change_form_template = "user_extra_fields/admin_change_form.html"
# These objects correspond to our app's models, so they should be added/removed only via fixtures
def has_add_permission(self, request) -> bool:
return False
def has_delete_permission(self, request, obj=None) -> bool:
return False
admin.site.register(ExtraFieldModel, ExtraFieldModelAdmin)
class BloodhoundConfigurationAdmin(SingletonModelAdmin):
change_form_template = "bloodhound_admin_change_form.html"
admin.site.register(BloodHoundConfiguration, BloodhoundConfigurationAdmin)
class CollabAdminBase(admin.ModelAdmin):
"""
Model Admin for collab-editor-enabled models.
"""
change_form_template = "collab_editing/admin/change_form.html"
change_list_template = "collab_editing/admin/change_list.html"