Skip to content

Commit 208efae

Browse files
committed
fix: migrate long VARCHAR fields to TEXT (#27)
1 parent b02a2f9 commit 208efae

File tree

8 files changed

+389
-49
lines changed

8 files changed

+389
-49
lines changed

CHANGELOG.md

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,19 @@ tbd
88

99
## Version 0
1010

11+
### 0.8.5
12+
13+
Fixes:
14+
15+
* Migrate long VARCHAR fields to TEXT
16+
17+
----
18+
1119
### 0.8.4
1220

1321
Features:
1422

1523
* Bumped [AWS-SSM to version 1.2.707.0](https://github.com/aws/session-manager-plugin/releases/tag/1.2.707.0) (*Docker image oxlorg-ansible-webui-aws*)
16-
* Issue when switching between Jobs in logs-list
1724
* Security: Added job-queue validation
1825

1926
This lowers the danger of an attack-vector that would utilize DB-write-access to execute jobs.
@@ -26,10 +33,13 @@ Features:
2633

2734
Fixes:
2835

29-
* Hide DB-Password from System-Config view
30-
* Multiple MariaDB/MySQL/PSQL fixes
36+
* Security: Hide DB-Password from System-Config view
37+
* Issue when switching between Jobs in logs-list
38+
* Multiple MariaDB/MySQL/PSQL fixes [#27](https://github.com/O-X-L/ansible-webui/issues/27)
3139
* Frontend Cache-Invalidation on Version-Change
3240

41+
----
42+
3343
### 0.8.3
3444

3545
Fixes:
@@ -46,6 +56,8 @@ Features:
4656

4757
* Ability to change Dashboard Stats-Time-Period
4858

59+
----
60+
4961
### 0.8.2
5062

5163
Fixes:
@@ -64,6 +76,8 @@ Chore:
6476

6577
* Cleaned-up Credentials-API
6678

79+
----
80+
6781
### 0.8.1
6882

6983
* Completely refactored frontend (SvelteJS & TailwindCSS)

src/oxl_ansible_webui/aw/api_endpoints/system.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,9 @@ class APIUserPasswordChange(APIView):
201201
)
202202
def put(self, request):
203203
user = get_api_user(request)
204+
if user.username == 'demo':
205+
return Response({'error': 'The demo-user is not allowed to change password'}, status=403)
206+
204207
pwd = request.data['password']
205208

206209
if len(pwd) < 10:
Lines changed: 323 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,323 @@
1+
# Generated by Django 5.1.8 on 2025-04-25 18:49
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('aw', '0013_v0_8_4'),
10+
]
11+
12+
operations = [
13+
migrations.AlterField(
14+
model_name='alertplugin',
15+
name='executable',
16+
field=models.TextField(max_length=300),
17+
),
18+
migrations.AlterField(
19+
model_name='job',
20+
name='cmd_args',
21+
field=models.TextField(blank=True, default=None, max_length=1000, null=True),
22+
),
23+
migrations.AlterField(
24+
model_name='job',
25+
name='comment',
26+
field=models.TextField(blank=True, default=None, max_length=300, null=True),
27+
),
28+
migrations.AlterField(
29+
model_name='job',
30+
name='environment_vars',
31+
field=models.TextField(blank=True, default=None, max_length=1000, null=True),
32+
),
33+
migrations.AlterField(
34+
model_name='job',
35+
name='execution_prompts',
36+
field=models.TextField(blank=True, default=None, max_length=5000, null=True),
37+
),
38+
migrations.AlterField(
39+
model_name='job',
40+
name='execution_prompts_json',
41+
field=models.TextField(default='', max_length=5000),
42+
),
43+
migrations.AlterField(
44+
model_name='job',
45+
name='inventory_file',
46+
field=models.TextField(blank=True, default=None, max_length=300, null=True),
47+
),
48+
migrations.AlterField(
49+
model_name='job',
50+
name='limit',
51+
field=models.TextField(blank=True, default=None, max_length=500, null=True),
52+
),
53+
migrations.AlterField(
54+
model_name='job',
55+
name='tags',
56+
field=models.TextField(blank=True, default=None, max_length=500, null=True),
57+
),
58+
migrations.AlterField(
59+
model_name='job',
60+
name='tags_skip',
61+
field=models.TextField(blank=True, default=None, max_length=500, null=True),
62+
),
63+
migrations.AlterField(
64+
model_name='jobexecution',
65+
name='cmd_args',
66+
field=models.TextField(blank=True, default=None, max_length=1000, null=True),
67+
),
68+
migrations.AlterField(
69+
model_name='jobexecution',
70+
name='command',
71+
field=models.TextField(blank=True, default=None, max_length=2000, null=True),
72+
),
73+
migrations.AlterField(
74+
model_name='jobexecution',
75+
name='comment',
76+
field=models.TextField(blank=True, default=None, max_length=300, null=True),
77+
),
78+
migrations.AlterField(
79+
model_name='jobexecution',
80+
name='environment_vars',
81+
field=models.TextField(blank=True, default=None, max_length=1000, null=True),
82+
),
83+
migrations.AlterField(
84+
model_name='jobexecution',
85+
name='limit',
86+
field=models.TextField(blank=True, default=None, max_length=500, null=True),
87+
),
88+
migrations.AlterField(
89+
model_name='jobexecution',
90+
name='log_stderr',
91+
field=models.TextField(blank=True, default=None, max_length=300, null=True),
92+
),
93+
migrations.AlterField(
94+
model_name='jobexecution',
95+
name='log_stderr_repo',
96+
field=models.TextField(blank=True, default=None, max_length=300, null=True),
97+
),
98+
migrations.AlterField(
99+
model_name='jobexecution',
100+
name='log_stdout',
101+
field=models.TextField(blank=True, default=None, max_length=300, null=True),
102+
),
103+
migrations.AlterField(
104+
model_name='jobexecution',
105+
name='log_stdout_repo',
106+
field=models.TextField(blank=True, default=None, max_length=300, null=True),
107+
),
108+
migrations.AlterField(
109+
model_name='jobexecution',
110+
name='tags',
111+
field=models.TextField(blank=True, default=None, max_length=500, null=True),
112+
),
113+
migrations.AlterField(
114+
model_name='jobexecution',
115+
name='tags_skip',
116+
field=models.TextField(blank=True, default=None, max_length=500, null=True),
117+
),
118+
migrations.AlterField(
119+
model_name='jobexecutionresulthost',
120+
name='hostname',
121+
field=models.TextField(max_length=300),
122+
),
123+
migrations.AlterField(
124+
model_name='jobqueue',
125+
name='v',
126+
field=models.TextField(default='-', max_length=5000),
127+
),
128+
migrations.AlterField(
129+
model_name='jobsharedcredentials',
130+
name='_enc_become_pass',
131+
field=models.TextField(blank=True, default=None, max_length=500, null=True),
132+
),
133+
migrations.AlterField(
134+
model_name='jobsharedcredentials',
135+
name='_enc_connect_pass',
136+
field=models.TextField(blank=True, default=None, max_length=500, null=True),
137+
),
138+
migrations.AlterField(
139+
model_name='jobsharedcredentials',
140+
name='_enc_ssh_key',
141+
field=models.TextField(blank=True, default=None, max_length=5000, null=True),
142+
),
143+
migrations.AlterField(
144+
model_name='jobsharedcredentials',
145+
name='_enc_vault_pass',
146+
field=models.TextField(blank=True, default=None, max_length=500, null=True),
147+
),
148+
migrations.AlterField(
149+
model_name='jobsharedcredentials',
150+
name='vault_file',
151+
field=models.TextField(blank=True, default=None, max_length=300, null=True),
152+
),
153+
migrations.AlterField(
154+
model_name='jobusercredentials',
155+
name='_enc_become_pass',
156+
field=models.TextField(blank=True, default=None, max_length=500, null=True),
157+
),
158+
migrations.AlterField(
159+
model_name='jobusercredentials',
160+
name='_enc_connect_pass',
161+
field=models.TextField(blank=True, default=None, max_length=500, null=True),
162+
),
163+
migrations.AlterField(
164+
model_name='jobusercredentials',
165+
name='_enc_ssh_key',
166+
field=models.TextField(blank=True, default=None, max_length=5000, null=True),
167+
),
168+
migrations.AlterField(
169+
model_name='jobusercredentials',
170+
name='_enc_vault_pass',
171+
field=models.TextField(blank=True, default=None, max_length=500, null=True),
172+
),
173+
migrations.AlterField(
174+
model_name='jobusercredentials',
175+
name='vault_file',
176+
field=models.TextField(blank=True, default=None, max_length=300, null=True),
177+
),
178+
migrations.AlterField(
179+
model_name='jobusertmpcredentials',
180+
name='_enc_become_pass',
181+
field=models.TextField(blank=True, default=None, max_length=500, null=True),
182+
),
183+
migrations.AlterField(
184+
model_name='jobusertmpcredentials',
185+
name='_enc_connect_pass',
186+
field=models.TextField(blank=True, default=None, max_length=500, null=True),
187+
),
188+
migrations.AlterField(
189+
model_name='jobusertmpcredentials',
190+
name='_enc_ssh_key',
191+
field=models.TextField(blank=True, default=None, max_length=5000, null=True),
192+
),
193+
migrations.AlterField(
194+
model_name='jobusertmpcredentials',
195+
name='_enc_vault_pass',
196+
field=models.TextField(blank=True, default=None, max_length=500, null=True),
197+
),
198+
migrations.AlterField(
199+
model_name='jobusertmpcredentials',
200+
name='vault_file',
201+
field=models.TextField(blank=True, default=None, max_length=300, null=True),
202+
),
203+
migrations.AlterField(
204+
model_name='repository',
205+
name='git_hook_cleanup',
206+
field=models.TextField(blank=True, default=None, max_length=1000, null=True),
207+
),
208+
migrations.AlterField(
209+
model_name='repository',
210+
name='git_hook_post',
211+
field=models.TextField(blank=True, default=None, max_length=1000, null=True),
212+
),
213+
migrations.AlterField(
214+
model_name='repository',
215+
name='git_hook_pre',
216+
field=models.TextField(blank=True, default=None, max_length=1000, null=True),
217+
),
218+
migrations.AlterField(
219+
model_name='repository',
220+
name='git_override_initialize',
221+
field=models.TextField(blank=True, default=None, max_length=1000, null=True),
222+
),
223+
migrations.AlterField(
224+
model_name='repository',
225+
name='git_override_update',
226+
field=models.TextField(blank=True, default=None, max_length=1000, null=True),
227+
),
228+
migrations.AlterField(
229+
model_name='repository',
230+
name='git_playbook_base',
231+
field=models.TextField(blank=True, default=None, max_length=300, null=True),
232+
),
233+
migrations.AlterField(
234+
model_name='repository',
235+
name='log_stderr',
236+
field=models.TextField(blank=True, default=None, max_length=300, null=True),
237+
),
238+
migrations.AlterField(
239+
model_name='repository',
240+
name='log_stdout',
241+
field=models.TextField(blank=True, default=None, max_length=300, null=True),
242+
),
243+
migrations.AlterField(
244+
model_name='repository',
245+
name='static_path',
246+
field=models.TextField(blank=True, default=None, max_length=500, null=True),
247+
),
248+
migrations.AlterField(
249+
model_name='systemconfig',
250+
name='_enc_mail_pass',
251+
field=models.TextField(blank=True, default=None, max_length=500, null=True),
252+
),
253+
migrations.AlterField(
254+
model_name='systemconfig',
255+
name='ara_server',
256+
field=models.TextField(blank=True, default=None, max_length=300, null=True),
257+
),
258+
migrations.AlterField(
259+
model_name='systemconfig',
260+
name='global_environment_vars',
261+
field=models.TextField(blank=True, default=None, max_length=1000, null=True),
262+
),
263+
migrations.AlterField(
264+
model_name='systemconfig',
265+
name='logo_url',
266+
field=models.TextField(blank=True, default=None, max_length=500, null=True),
267+
),
268+
migrations.AlterField(
269+
model_name='systemconfig',
270+
name='mail_sender',
271+
field=models.TextField(blank=True, default=None, max_length=300, null=True),
272+
),
273+
migrations.AlterField(
274+
model_name='systemconfig',
275+
name='mail_server',
276+
field=models.TextField(blank=True, default='127.0.0.1:25', max_length=300, null=True),
277+
),
278+
migrations.AlterField(
279+
model_name='systemconfig',
280+
name='mail_user',
281+
field=models.TextField(blank=True, default=None, max_length=300, null=True),
282+
),
283+
migrations.AlterField(
284+
model_name='systemconfig',
285+
name='path_ansible_config',
286+
field=models.TextField(blank=True, default=None, max_length=500, null=True),
287+
),
288+
migrations.AlterField(
289+
model_name='systemconfig',
290+
name='path_log',
291+
field=models.TextField(default=None, max_length=500),
292+
),
293+
migrations.AlterField(
294+
model_name='systemconfig',
295+
name='path_play',
296+
field=models.TextField(default=None, max_length=500),
297+
),
298+
migrations.AlterField(
299+
model_name='systemconfig',
300+
name='path_run',
301+
field=models.TextField(default='/tmp/ansible-webui', max_length=500),
302+
),
303+
migrations.AlterField(
304+
model_name='systemconfig',
305+
name='path_ssh_known_hosts',
306+
field=models.TextField(blank=True, default=None, max_length=500, null=True),
307+
),
308+
migrations.AlterField(
309+
model_name='systemconfig',
310+
name='path_template',
311+
field=models.TextField(blank=True, default=None, max_length=500, null=True),
312+
),
313+
migrations.AlterField(
314+
model_name='systemconfig',
315+
name='timezone',
316+
field=models.TextField(default='UTC', max_length=300),
317+
),
318+
migrations.AlterField(
319+
model_name='userextended',
320+
name='description',
321+
field=models.TextField(blank=True, default=None, max_length=1000, null=True),
322+
),
323+
]

src/oxl_ansible_webui/aw/model/alert.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ class AlertPlugin(BaseModel):
3131
api_fields.extend(form_fields)
3232

3333
name = models.CharField(max_length=100)
34-
executable = models.CharField(max_length=300)
34+
executable = models.TextField(max_length=300)
3535

3636

3737
class BaseAlert(BaseModel):

0 commit comments

Comments
 (0)