foreman_webhooks 3.0.4 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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.
|