foreman_webhooks 3.0.4 → 3.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/views/api/v2/webhooks/show.json.rabl +4 -0
- data/app/views/foreman_webhooks/webhook_templates/katello_-_promote.erb +1 -1
- data/app/views/foreman_webhooks/webhook_templates/katello_-_publish.erb +1 -1
- data/app/views/foreman_webhooks/webhook_templates/katello_-_repo_sync.erb +1 -1
- data/lib/foreman_webhooks/version.rb +1 -1
- data/webpack/ForemanWebhooks/Routes/Webhooks/Components/WebhookForm/Components/ForemanFormikField.js +36 -1
- data/webpack/ForemanWebhooks/Routes/Webhooks/Components/WebhookForm/Components/WebhookFormTabs.js +8 -0
- data/webpack/ForemanWebhooks/Routes/Webhooks/Components/WebhookForm/WebhookForm.js +11 -0
- data/webpack/ForemanWebhooks/Routes/Webhooks/Components/WebhookForm/__tests__/__snapshots__/WebhookForm.test.js.snap +2 -0
- data/webpack/ForemanWebhooks/Routes/Webhooks/Components/WebhookForm/index.js +16 -1
- data/webpack/ForemanWebhooks/Routes/Webhooks/WebhooksIndexPage/Components/WebhookCreateModal.js +4 -2
- data/webpack/ForemanWebhooks/Routes/Webhooks/WebhooksIndexPage/Components/WebhookEditModal.js +38 -17
- metadata +32 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 546a669c4f3c26a491fb5ab87ce068aa5391085cd5e0994e793d4f2d56c19a63
|
4
|
+
data.tar.gz: 5e19ad3a87e48dd0759cd7c418fadec7cd1574dd157b4e15563e43f1a3bce3e9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cba01a2168b1916b5874a8b39d50cd4cc463955e63352a84d8794183078e898f301eec2b79a893745caa1c7ad3f9d493a8b1363a8d0eeac53a2fa5d740bc3722
|
7
|
+
data.tar.gz: fd537f4c7dd5e995ad5f5f2116a2c0670d2df8bbe1398cc982684eee8fbb558dae9ef36b939cd557a7ea6d57d455ed12a3579ff7ec05cede892d73b92c145193
|
@@ -20,4 +20,4 @@ model: WebhookTemplate
|
|
20
20
|
# Task ended at <%= @object.task.ended_at %>
|
21
21
|
# Task resulted with <%= @object.task.result %>
|
22
22
|
# Task state <%= @object.task.state %>
|
23
|
-
# Task action output <%= @object.task.
|
23
|
+
# Task action output <%= @object.task.action_continuous_output %>
|
@@ -21,4 +21,4 @@ model: WebhookTemplate
|
|
21
21
|
# Task ended at <%= @object.task.ended_at %>
|
22
22
|
# Task resulted with <%= @object.task.result %>
|
23
23
|
# Task state <%= @object.task.state %>
|
24
|
-
# Task action output <%= @object.task.
|
24
|
+
# Task action output <%= @object.task.action_continuous_output %>
|
@@ -24,4 +24,4 @@ model: WebhookTemplate
|
|
24
24
|
# Task ended at <%= @object.task.ended_at %>
|
25
25
|
# Task resulted with <%= @object.task.result %>
|
26
26
|
# Task state <%= @object.task.state %>
|
27
|
-
# Task action output <%= @object.task.
|
27
|
+
# Task action output <%= @object.task.action_continuous_output %>
|
data/webpack/ForemanWebhooks/Routes/Webhooks/Components/WebhookForm/Components/ForemanFormikField.js
CHANGED
@@ -21,6 +21,8 @@ const ForemanFormikField = ({
|
|
21
21
|
placeholder,
|
22
22
|
options,
|
23
23
|
isLoading,
|
24
|
+
disabled,
|
25
|
+
setDisabled,
|
24
26
|
}) => (
|
25
27
|
<FormikField name={name}>
|
26
28
|
{({
|
@@ -32,6 +34,15 @@ const ForemanFormikField = ({
|
|
32
34
|
|
33
35
|
return filter(initialOptions, o => o.value === fieldValue);
|
34
36
|
};
|
37
|
+
const passwordInput = (
|
38
|
+
<input
|
39
|
+
{...field}
|
40
|
+
placeholder={disabled ? '********' : ''}
|
41
|
+
type={type}
|
42
|
+
disabled={disabled}
|
43
|
+
className="form-control"
|
44
|
+
/>
|
45
|
+
);
|
35
46
|
let content = null;
|
36
47
|
switch (type) {
|
37
48
|
case 'textarea':
|
@@ -56,10 +67,30 @@ const ForemanFormikField = ({
|
|
56
67
|
onChange={selected =>
|
57
68
|
setFieldValue(field.name, selected[0]?.value)
|
58
69
|
}
|
59
|
-
// onBlur={e => setFieldTouched(field.name, true)}
|
60
70
|
/>
|
61
71
|
);
|
62
72
|
break;
|
73
|
+
case 'password':
|
74
|
+
content = setDisabled ? (
|
75
|
+
<div className="input-group">
|
76
|
+
{passwordInput}
|
77
|
+
<span className="input-group-btn">
|
78
|
+
<button
|
79
|
+
className="btn btn-default"
|
80
|
+
onClick={e => {
|
81
|
+
e.preventDefault();
|
82
|
+
setDisabled(!disabled);
|
83
|
+
}}
|
84
|
+
title={__('Change the password')}
|
85
|
+
>
|
86
|
+
<span className="pficon pficon-edit" />
|
87
|
+
</button>
|
88
|
+
</span>
|
89
|
+
</div>
|
90
|
+
) : (
|
91
|
+
passwordInput
|
92
|
+
);
|
93
|
+
break;
|
63
94
|
default:
|
64
95
|
content = (
|
65
96
|
<input
|
@@ -101,6 +132,8 @@ ForemanFormikField.propTypes = {
|
|
101
132
|
placeholder: PropTypes.string,
|
102
133
|
options: PropTypes.array,
|
103
134
|
isLoading: PropTypes.bool,
|
135
|
+
disabled: PropTypes.bool,
|
136
|
+
setDisabled: PropTypes.func,
|
104
137
|
};
|
105
138
|
|
106
139
|
ForemanFormikField.defaultProps = {
|
@@ -112,6 +145,8 @@ ForemanFormikField.defaultProps = {
|
|
112
145
|
placeholder: '',
|
113
146
|
options: null,
|
114
147
|
isLoading: false,
|
148
|
+
disabled: false,
|
149
|
+
setDisabled: undefined,
|
115
150
|
};
|
116
151
|
|
117
152
|
export default ForemanFormikField;
|
data/webpack/ForemanWebhooks/Routes/Webhooks/Components/WebhookForm/Components/WebhookFormTabs.js
CHANGED
@@ -18,6 +18,8 @@ const WebhookFormTabs = ({
|
|
18
18
|
availableEvents,
|
19
19
|
isTemplatesLoading,
|
20
20
|
isEventsLoading,
|
21
|
+
isPasswordDisabled,
|
22
|
+
setIsPasswordDisabled,
|
21
23
|
}) => (
|
22
24
|
<Tabs activeKey={activeTab} onSelect={handleTabClick} isFilled>
|
23
25
|
<Tab
|
@@ -90,6 +92,8 @@ const WebhookFormTabs = ({
|
|
90
92
|
type="password"
|
91
93
|
label={__('Password')}
|
92
94
|
labelHelp={__('Authentication credentials')}
|
95
|
+
disabled={isPasswordDisabled}
|
96
|
+
setDisabled={setIsPasswordDisabled}
|
93
97
|
/>
|
94
98
|
<ForemanFormikField
|
95
99
|
name="verify_ssl"
|
@@ -153,11 +157,15 @@ WebhookFormTabs.propTypes = {
|
|
153
157
|
availableEvents: PropTypes.array.isRequired,
|
154
158
|
isTemplatesLoading: PropTypes.bool.isRequired,
|
155
159
|
isEventsLoading: PropTypes.bool.isRequired,
|
160
|
+
isPasswordDisabled: PropTypes.bool,
|
161
|
+
setIsPasswordDisabled: PropTypes.func,
|
156
162
|
};
|
157
163
|
|
158
164
|
WebhookFormTabs.defaultProps = {
|
159
165
|
disabled: false,
|
160
166
|
formProps: {},
|
167
|
+
isPasswordDisabled: false,
|
168
|
+
setIsPasswordDisabled: undefined,
|
161
169
|
};
|
162
170
|
|
163
171
|
export default WebhookFormTabs;
|
@@ -25,6 +25,8 @@ const WebhookForm = ({
|
|
25
25
|
availableEvents,
|
26
26
|
isTemplatesLoading,
|
27
27
|
isEventsLoading,
|
28
|
+
isPasswordDisabled,
|
29
|
+
setIsPasswordDisabled,
|
28
30
|
}) => {
|
29
31
|
const webhookTemplates = templates.map(t => ({ value: t.id, label: t.name }));
|
30
32
|
|
@@ -51,6 +53,8 @@ const WebhookForm = ({
|
|
51
53
|
availableEvents={availableEvents}
|
52
54
|
isEventsLoading={isEventsLoading}
|
53
55
|
isTemplatesLoading={isTemplatesLoading}
|
56
|
+
isPasswordDisabled={isPasswordDisabled}
|
57
|
+
setIsPasswordDisabled={setIsPasswordDisabled}
|
54
58
|
/>
|
55
59
|
</ForemanForm>
|
56
60
|
);
|
@@ -64,6 +68,13 @@ WebhookForm.propTypes = {
|
|
64
68
|
availableEvents: PropTypes.array.isRequired,
|
65
69
|
isEventsLoading: PropTypes.bool.isRequired,
|
66
70
|
isTemplatesLoading: PropTypes.bool.isRequired,
|
71
|
+
isPasswordDisabled: PropTypes.bool,
|
72
|
+
setIsPasswordDisabled: PropTypes.func,
|
73
|
+
};
|
74
|
+
|
75
|
+
WebhookForm.defaultProps = {
|
76
|
+
isPasswordDisabled: false,
|
77
|
+
setIsPasswordDisabled: undefined,
|
67
78
|
};
|
68
79
|
|
69
80
|
export default WebhookForm;
|
@@ -241,6 +241,7 @@ exports[`WebhookForm rendering should render for edit page 1`] = `
|
|
241
241
|
]
|
242
242
|
}
|
243
243
|
isEventsLoading={false}
|
244
|
+
isPasswordDisabled={false}
|
244
245
|
isTemplatesLoading={false}
|
245
246
|
webhookTemplates={
|
246
247
|
Array [
|
@@ -492,6 +493,7 @@ exports[`WebhookForm rendering should render for new page 1`] = `
|
|
492
493
|
]
|
493
494
|
}
|
494
495
|
isEventsLoading={false}
|
496
|
+
isPasswordDisabled={false}
|
495
497
|
isTemplatesLoading={false}
|
496
498
|
webhookTemplates={
|
497
499
|
Array [
|
@@ -24,7 +24,13 @@ import {
|
|
24
24
|
|
25
25
|
const params = { page: 1, search: 'snippet = false', per_page: 'all' };
|
26
26
|
|
27
|
-
const ConnectedWebhookForm = ({
|
27
|
+
const ConnectedWebhookForm = ({
|
28
|
+
onCancel,
|
29
|
+
handleSubmit,
|
30
|
+
initialValues,
|
31
|
+
isPasswordDisabled,
|
32
|
+
setIsPasswordDisabled,
|
33
|
+
}) => {
|
28
34
|
const dispatch = useDispatch();
|
29
35
|
|
30
36
|
const templates = useSelector(selectWebhookTemplates);
|
@@ -60,6 +66,8 @@ const ConnectedWebhookForm = ({ onCancel, handleSubmit, initialValues }) => {
|
|
60
66
|
initialValues={initialValues}
|
61
67
|
isTemplatesLoading={isTemplatesLoading}
|
62
68
|
isEventsLoading={isEventsLoading}
|
69
|
+
isPasswordDisabled={isPasswordDisabled}
|
70
|
+
setIsPasswordDisabled={setIsPasswordDisabled}
|
63
71
|
/>
|
64
72
|
);
|
65
73
|
};
|
@@ -68,6 +76,13 @@ ConnectedWebhookForm.propTypes = {
|
|
68
76
|
onCancel: PropTypes.func.isRequired,
|
69
77
|
handleSubmit: PropTypes.func.isRequired,
|
70
78
|
initialValues: PropTypes.object.isRequired,
|
79
|
+
isPasswordDisabled: PropTypes.bool,
|
80
|
+
setIsPasswordDisabled: PropTypes.func,
|
81
|
+
};
|
82
|
+
|
83
|
+
ConnectedWebhookForm.defaultProps = {
|
84
|
+
isPasswordDisabled: false,
|
85
|
+
setIsPasswordDisabled: undefined,
|
71
86
|
};
|
72
87
|
|
73
88
|
export default ConnectedWebhookForm;
|
data/webpack/ForemanWebhooks/Routes/Webhooks/WebhooksIndexPage/Components/WebhookCreateModal.js
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
import PropTypes from 'prop-types';
|
3
|
+
import { Modal } from 'patternfly-react';
|
3
4
|
import { useDispatch } from 'react-redux';
|
4
5
|
|
5
6
|
import { translate as __ } from 'foremanReact/common/I18n';
|
@@ -47,11 +48,12 @@ const WebhookCreateModal = ({ onSuccess, onCancel }) => {
|
|
47
48
|
return (
|
48
49
|
<ForemanModal
|
49
50
|
id={WEBHOOK_CREATE_MODAL_ID}
|
50
|
-
title={__('Create Webhook')}
|
51
51
|
backdrop="static"
|
52
52
|
className="webhooks-modal"
|
53
53
|
>
|
54
|
-
<
|
54
|
+
<Modal.Header>
|
55
|
+
<Modal.Title>{__('Create Webhook')}</Modal.Title>
|
56
|
+
</Modal.Header>
|
55
57
|
<ConnectedWebhookForm
|
56
58
|
handleSubmit={handleSubmit}
|
57
59
|
initialValues={initialWebhookValues}
|
data/webpack/ForemanWebhooks/Routes/Webhooks/WebhooksIndexPage/Components/WebhookEditModal.js
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
import React, { useEffect } from 'react';
|
1
|
+
import React, { useEffect, useState } from 'react';
|
2
|
+
import { Modal } from 'patternfly-react';
|
2
3
|
import { useSelector, useDispatch } from 'react-redux';
|
3
4
|
import PropTypes from 'prop-types';
|
4
5
|
|
@@ -29,22 +30,11 @@ import './WebhookModal.scss';
|
|
29
30
|
const WebhookEditModal = ({ toEdit, onSuccess, onCancel }) => {
|
30
31
|
const dispatch = useDispatch();
|
31
32
|
|
33
|
+
const [isPasswordDisabled, setIsPasswordDisabled] = useState(false);
|
32
34
|
const id = toEdit;
|
33
35
|
|
34
|
-
const handleSubmit = (values, actions) =>
|
35
|
-
dispatch(
|
36
|
-
submitForm({
|
37
|
-
url: foremanUrl(`/api${WEBHOOKS_PATH}/${id}`),
|
38
|
-
values: { ...values, controller: 'webhooks' },
|
39
|
-
item: 'Webhook',
|
40
|
-
message: __('Webhook was successfully updated.'),
|
41
|
-
method: 'put',
|
42
|
-
successCallback: onSuccess,
|
43
|
-
actions,
|
44
|
-
})
|
45
|
-
);
|
46
|
-
|
47
36
|
const isLoading = useSelector(selectIsLoading);
|
37
|
+
const isPasswordSet = useSelector(selectWebhookValues).passwordSet;
|
48
38
|
const initialWebhookValues = {
|
49
39
|
id: useSelector(selectWebhookValues).id,
|
50
40
|
name: useSelector(selectWebhookValues).name,
|
@@ -62,6 +52,27 @@ const WebhookEditModal = ({ toEdit, onSuccess, onCancel }) => {
|
|
62
52
|
proxy_authorization: useSelector(selectWebhookValues).proxyAuthorization,
|
63
53
|
};
|
64
54
|
|
55
|
+
useEffect(() => {
|
56
|
+
setIsPasswordDisabled(isPasswordSet);
|
57
|
+
}, [isPasswordSet]);
|
58
|
+
|
59
|
+
const handleSubmit = (values, actions) => {
|
60
|
+
if (isPasswordDisabled) {
|
61
|
+
delete values.password;
|
62
|
+
}
|
63
|
+
dispatch(
|
64
|
+
submitForm({
|
65
|
+
url: foremanUrl(`/api${WEBHOOKS_PATH}/${id}`),
|
66
|
+
values: { ...values, controller: 'webhooks' },
|
67
|
+
item: 'Webhook',
|
68
|
+
message: __('Webhook was successfully updated.'),
|
69
|
+
method: 'put',
|
70
|
+
successCallback: onSuccess,
|
71
|
+
actions,
|
72
|
+
})
|
73
|
+
);
|
74
|
+
};
|
75
|
+
|
65
76
|
useEffect(() => {
|
66
77
|
if (id) {
|
67
78
|
dispatch(
|
@@ -73,21 +84,31 @@ const WebhookEditModal = ({ toEdit, onSuccess, onCancel }) => {
|
|
73
84
|
}
|
74
85
|
}, [id, dispatch]);
|
75
86
|
|
87
|
+
const onEditCancel = () => {
|
88
|
+
if (isPasswordSet) setIsPasswordDisabled(true);
|
89
|
+
onCancel();
|
90
|
+
};
|
91
|
+
|
76
92
|
return (
|
77
93
|
<ForemanModal
|
78
94
|
id={WEBHOOK_EDIT_MODAL_ID}
|
79
|
-
title={`${__('Edit')} ${initialWebhookValues.name}`}
|
80
95
|
backdrop="static"
|
81
96
|
className="webhooks-modal"
|
82
97
|
>
|
83
|
-
<
|
98
|
+
<Modal.Header>
|
99
|
+
<Modal.Title>
|
100
|
+
{`${__('Edit')} ${initialWebhookValues.name}`}
|
101
|
+
</Modal.Title>
|
102
|
+
</Modal.Header>
|
84
103
|
{isLoading ? (
|
85
104
|
<Loading />
|
86
105
|
) : (
|
87
106
|
<ConnectedWebhookForm
|
88
107
|
handleSubmit={handleSubmit}
|
89
108
|
initialValues={initialWebhookValues}
|
90
|
-
onCancel={
|
109
|
+
onCancel={onEditCancel}
|
110
|
+
isPasswordDisabled={isPasswordDisabled}
|
111
|
+
setIsPasswordDisabled={setIsPasswordDisabled}
|
91
112
|
/>
|
92
113
|
)}
|
93
114
|
</ForemanModal>
|
metadata
CHANGED
@@ -1,15 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: foreman_webhooks
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0
|
4
|
+
version: 3.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Timo Goebel
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
12
|
-
dependencies:
|
11
|
+
date: 2023-03-21 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rake
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rdoc
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
13
41
|
description: Plugin for Foreman that allows to configure Webhooks.
|
14
42
|
email:
|
15
43
|
- mail@timogoebel.name
|
@@ -175,7 +203,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
175
203
|
- !ruby/object:Gem::Version
|
176
204
|
version: '0'
|
177
205
|
requirements: []
|
178
|
-
rubygems_version: 3.1.
|
206
|
+
rubygems_version: 3.1.6
|
179
207
|
signing_key:
|
180
208
|
specification_version: 4
|
181
209
|
summary: Configure webhooks for Foreman.
|