Skip to content

Commit dfa3c70

Browse files
authored
fix(ui, api): remove import workflow template from URL (#6192)
Signed-off-by: francois samin <[email protected]>
1 parent 4fd962f commit dfa3c70

File tree

6 files changed

+32
-143
lines changed

6 files changed

+32
-143
lines changed

engine/api/templates.go

+7-71
Original file line numberDiff line numberDiff line change
@@ -60,41 +60,9 @@ func (api *API) postTemplateHandler() service.Handler {
6060
return err
6161
}
6262

63-
var grp *sdk.Group
64-
var err error
65-
// if imported from url try to download files then overrides request
66-
if data.ImportURL != "" {
67-
t := new(bytes.Buffer)
68-
if err := exportentities.DownloadTemplate(data.ImportURL, t); err != nil {
69-
return sdk.NewError(sdk.ErrWrongRequest, err)
70-
}
71-
wt, err := exportentities.ReadTemplateFromTar(tar.NewReader(t))
72-
if err != nil {
73-
return err
74-
}
75-
wt.ImportURL = data.ImportURL
76-
data = wt
77-
78-
// group name should be set
79-
if data.Group == nil {
80-
return sdk.NewErrorFrom(sdk.ErrWrongRequest, "missing group name")
81-
}
82-
83-
grp, err = group.LoadByName(ctx, api.mustDB(), data.Group.Name, group.LoadOptions.WithMembers)
84-
if err != nil {
85-
return sdk.NewError(sdk.ErrWrongRequest, err)
86-
}
87-
data.GroupID = grp.ID
88-
89-
// check the workflow template extracted
90-
if err := data.IsValid(); err != nil {
91-
return err
92-
}
93-
} else {
94-
grp, err = group.LoadByID(ctx, api.mustDB(), data.GroupID, group.LoadOptions.WithMembers)
95-
if err != nil {
96-
return err
97-
}
63+
grp, err := group.LoadByID(ctx, api.mustDB(), data.GroupID, group.LoadOptions.WithMembers)
64+
if err != nil {
65+
return err
9866
}
9967

10068
data.Version = 1
@@ -201,42 +169,10 @@ func (api *API) putTemplateHandler() service.Handler {
201169
return err
202170
}
203171

204-
var grp *sdk.Group
205-
// if imported from url try to download files then overrides request
206-
if data.ImportURL != "" {
207-
t := new(bytes.Buffer)
208-
if err := exportentities.DownloadTemplate(data.ImportURL, t); err != nil {
209-
return sdk.NewError(sdk.ErrWrongRequest, err)
210-
}
211-
wt, err := exportentities.ReadTemplateFromTar(tar.NewReader(t))
212-
if err != nil {
213-
return err
214-
}
215-
wt.ImportURL = data.ImportURL
216-
data = wt
217-
218-
// group name should be set
219-
if data.Group == nil {
220-
return sdk.NewErrorFrom(sdk.ErrWrongRequest, "missing group name")
221-
}
222-
223-
// check that the user is admin on the given template's group
224-
grp, err = group.LoadByName(ctx, api.mustDB(), data.Group.Name, group.LoadOptions.WithMembers)
225-
if err != nil {
226-
return sdk.NewError(sdk.ErrWrongRequest, err)
227-
}
228-
data.GroupID = grp.ID
229-
230-
// check the workflow template extracted
231-
if err := data.IsValid(); err != nil {
232-
return err
233-
}
234-
} else {
235-
// check that the group exists and user is admin for group id
236-
grp, err = group.LoadByID(ctx, api.mustDB(), data.GroupID, group.LoadOptions.WithMembers)
237-
if err != nil {
238-
return err
239-
}
172+
// check that the group exists and user is admin for group id
173+
grp, err := group.LoadByID(ctx, api.mustDB(), data.GroupID, group.LoadOptions.WithMembers)
174+
if err != nil {
175+
return err
240176
}
241177

242178
if !isGroupAdmin(ctx, grp) {

sdk/workflow_template.go

-10
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@ type WorkflowTemplate struct {
5757
Applications ApplicationTemplates `json:"applications" db:"applications"`
5858
Environments EnvironmentTemplates `json:"environments" db:"environments"`
5959
Version int64 `json:"version" db:"version"`
60-
ImportURL string `json:"import_url" db:"import_url"`
6160
// aggregates
6261
Group *Group `json:"group,omitempty" db:"-"`
6362
FirstAudit *AuditWorkflowTemplate `json:"first_audit,omitempty" db:"-"`
@@ -86,14 +85,6 @@ func (w *WorkflowTemplate) Scan(src interface{}) error {
8685

8786
// IsValid returns workflow template validity.
8887
func (w *WorkflowTemplate) IsValid() error {
89-
// no more checks if import url is set, fields will be overrited by downloaded files
90-
if w.ImportURL != "" {
91-
if !IsURL(w.ImportURL) || !strings.HasSuffix(w.ImportURL, ".yml") {
92-
return NewErrorFrom(ErrWrongRequest, "invalid given import url")
93-
}
94-
return nil
95-
}
96-
9788
if w.GroupID == 0 {
9889
return NewErrorFrom(ErrWrongRequest, "invalid group id for template")
9990
}
@@ -188,7 +179,6 @@ func (w *WorkflowTemplate) Update(data WorkflowTemplate) {
188179
w.Applications = data.Applications
189180
w.Environments = data.Environments
190181
w.Version = w.Version + 1
191-
w.ImportURL = data.ImportURL
192182
}
193183

194184
func (w WorkflowTemplate) Path() string {

ui/src/app/model/workflow-template.model.ts

-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ export class WorkflowTemplate {
2121
last_audit: AuditWorkflowTemplate;
2222
editable: boolean;
2323
change_message: string;
24-
import_url: string;
2524
}
2625

2726
export class WorkflowTemplateParameter {

ui/src/app/views/settings/workflow-template/form/workflow-template.form.component.ts

-13
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,6 @@ export class WorkflowTemplateFormComponent {
2929
this._workflowTemplate = <WorkflowTemplate>{ editable: true };
3030
}
3131

32-
this.importFromURL = !!this._workflowTemplate.import_url;
33-
3432
this.changeMessage = null;
3533

3634
this.parameterKeys = [];
@@ -125,7 +123,6 @@ export class WorkflowTemplateFormComponent {
125123
environmentErrors: { [key: number]: WorkflowTemplateError; };
126124
environmentKeys: Array<number>;
127125
changeMessage: string;
128-
importFromURL: boolean;
129126

130127
constructor(
131128
private _sharedService: SharedService,
@@ -149,11 +146,6 @@ export class WorkflowTemplateFormComponent {
149146
}
150147

151148
clickSave() {
152-
if (this.importFromURL) {
153-
this.save.emit({ import_url: this.workflowTemplate.import_url });
154-
return;
155-
}
156-
157149
if (!this.workflowTemplate.name || !this.workflowTemplate.group_id) {
158150
return;
159151
}
@@ -229,9 +221,4 @@ export class WorkflowTemplateFormComponent {
229221
environmentValueChange(key: number, value: string) {
230222
this.environmentValues[key] = value;
231223
}
232-
233-
changeFromURL() {
234-
this.importFromURL = !this.importFromURL;
235-
this._cd.markForCheck();
236-
}
237224
}

ui/src/app/views/settings/workflow-template/form/workflow-template.form.html

+25-45
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,14 @@
66
<div *ngIf="workflowTemplate.editable && groups && groups.length === 0" class="ui orange message">
77
{{'common_help_no_group' | translate}}
88
</div>
9-
<div *ngIf="workflowTemplate.editable && importFromURL" class="ui blue message">
9+
<div *ngIf="workflowTemplate.editable" class="ui blue message">
1010
{{'workflow_template_help_edit_from' | translate}}
1111
</div>
1212
<div class="four fields">
1313
<div class="field">
1414
<label>{{'common_name' | translate}} *</label>
1515
<input class="ui input" type="text" name="name" [(ngModel)]="workflowTemplate.name"
16-
[readonly]="!workflowTemplate.editable || importFromURL">
16+
[readonly]="!workflowTemplate.editable">
1717
</div>
1818
<div class="field">
1919
<label>{{'common_slug' | translate}} *</label>
@@ -23,11 +23,11 @@
2323
<div class="field">
2424
<label>{{'common_group' | translate}} *</label>
2525
<sm-select class="fluid search" name="group"
26-
*ngIf="groups && workflowTemplate.editable && !importFromURL" [disabled]="loading"
26+
*ngIf="groups && workflowTemplate.editable" [disabled]="loading"
2727
[(model)]="workflowTemplate.group_id" [options]="{'fullTextSearch': true}">
2828
<option *ngFor="let group of groups" [value]="group.id">{{group.name}}</option>
2929
</sm-select>
30-
<input *ngIf="!workflowTemplate.editable || importFromURL" class="ui input" type="text"
30+
<input *ngIf="!workflowTemplate.editable" class="ui input" type="text"
3131
name="group" [ngModel]="workflowTemplate.group?.name" [readonly]="true">
3232
</div>
3333
<div class="field">
@@ -40,65 +40,48 @@
4040
<label>{{'common_description' | translate}}</label>
4141
<textarea name="description" [(ngModel)]="workflowTemplate.description"
4242
(ngModelChange)="descriptionChange()" [rows]="descriptionRows"
43-
[readonly]="!workflowTemplate.editable || importFromURL"></textarea>
43+
[readonly]="!workflowTemplate.editable"></textarea>
4444
</div>
4545
</div>
4646
<div *ngIf="workflowTemplate.editable" class="ui horizontal divider">
4747
{{'common_or' | translate}}
4848
</div>
49-
<div *ngIf="workflowTemplate.editable || importFromURL" class="sixteen wide column">
50-
<div class="wide fields">
51-
<div class="four wide field centeredField">
52-
<sui-checkbox *ngIf="workflowTemplate.editable" name="import-from-url" [ngModel]="importFromURL"
53-
class="toggle" (ngModelChange)="changeFromURL()">
54-
{{'workflow_template_import_from_url' | translate}}
55-
</sui-checkbox>
56-
<span *ngIf="!workflowTemplate.editable">{{'workflow_template_imported_from_url' |
57-
translate}}</span>
58-
</div>
59-
<div class="twelve wide field">
60-
<input class="ui input" type="text" name="import-url" placeholder="https://host/my-template.yml"
61-
[(ngModel)]="workflowTemplate.import_url"
62-
[readonly]="!workflowTemplate.editable || !importFromURL">
63-
</div>
64-
</div>
65-
</div>
66-
<div class="sixteen wide column" *ngIf="!(mode === 'add' && importFromURL)">
67-
<div *ngIf="(workflowTemplate.editable && !importFromURL) || parameterKeys.length > 0"
49+
<div class="sixteen wide column" *ngIf="!(mode === 'add')">
50+
<div *ngIf="(workflowTemplate.editable) || parameterKeys.length > 0"
6851
class="wide field">
6952
<label>{{ 'common_parameters' | translate }}</label>
7053
</div>
7154
<div class="sixteen wide fields" *ngFor="let k of parameterKeys; let index = index">
7255
<div class="eleven wide field">
7356
<input type="text" name="parameter-key-{{index}}" [placeholder]="'common_name' | translate"
7457
[(ngModel)]="parameterValues[k].key"
75-
[readonly]="!workflowTemplate.editable || importFromURL">
58+
[readonly]="!workflowTemplate.editable">
7659
</div>
7760
<div class="three wide field">
78-
<sui-select *ngIf="workflowTemplate.editable && !importFromURL" class="selection"
61+
<sui-select *ngIf="workflowTemplate.editable" class="selection"
7962
name="parameter-type-{{index}}" placeholder="{{'common_select' | translate}}"
8063
[options]="templateParameterTypes" isSearchable="true" [(ngModel)]="parameterValues[k].type"
8164
#selectType>
8265
<sui-select-option *ngFor="let option of selectType.filteredOptions" [value]="option">
8366
</sui-select-option>
8467
</sui-select>
85-
<input *ngIf="!workflowTemplate.editable || importFromURL" class="ui input" type="text"
68+
<input *ngIf="!workflowTemplate.editable" class="ui input" type="text"
8669
name="parameter-type-{{index}}" [ngModel]="parameterValues[k].type" [readonly]="true">
8770
</div>
8871
<div class="two wide field centeredField">
8972
<div class="ui checked checkbox">
9073
<input type="checkbox" name="parameter-required-{{index}}"
9174
[(ngModel)]="parameterValues[k].required"
92-
[disabled]="!workflowTemplate.editable || importFromURL">
75+
[disabled]="!workflowTemplate.editable">
9376
<label>{{'common_required' | translate}}</label>
9477
</div>
9578
</div>
96-
<button *ngIf="workflowTemplate.editable && !importFromURL" class="ui icon red button"
79+
<button *ngIf="workflowTemplate.editable" class="ui icon red button"
9780
(click)="clickRemoveParameter(k)">
9881
<i class="trash icon"></i>
9982
</button>
10083
</div>
101-
<div *ngIf="workflowTemplate.editable && !importFromURL" class="sixteen wide fields">
84+
<div *ngIf="workflowTemplate.editable" class="sixteen wide fields">
10285
<div class="eleven wide field">
10386
<input type="text" name="parameter-key-add" [placeholder]="'common_name' | translate"
10487
[(ngModel)]="parameterValueAdd.key">
@@ -125,56 +108,56 @@
125108
<div class="wide field">
126109
<label>{{ 'common_workflow' | translate }}</label>
127110
<app-workflow-template-editor name="workflow-value"
128-
[editable]="workflowTemplate.editable && !importFromURL" [value]="workflowValue"
111+
[editable]="workflowTemplate.editable" [value]="workflowValue"
129112
(changeValue)="workflowValueChange($event)" [error]="workflowError">
130113
</app-workflow-template-editor>
131114
</div>
132-
<div *ngIf="(workflowTemplate.editable && !importFromURL) || pipelineKeys.length > 0"
115+
<div *ngIf="(workflowTemplate.editable) || pipelineKeys.length > 0"
133116
class="wide field">
134117
<label>Pipelines</label>
135118
<div class="codeContainer field" *ngFor="let k of pipelineKeys">
136119
<app-workflow-template-editor name="pipeline-value-{{k}}"
137-
[editable]="workflowTemplate.editable && !importFromURL" [removable]="true"
120+
[editable]="workflowTemplate.editable" [removable]="true"
138121
[value]="pipelineValues[k]" (changeValue)="pipelineValueChange(k, $event)"
139122
(remove)="clickRemovePipeline(k)" [error]="pipelineErrors[k]">
140123
</app-workflow-template-editor>
141124
</div>
142-
<button *ngIf="workflowTemplate.editable && !importFromURL" class="ui icon green button"
125+
<button *ngIf="workflowTemplate.editable" class="ui icon green button"
143126
(click)="clickAddPipeline()">
144127
<i class="plus icon"></i>
145128
</button>
146129
</div>
147-
<div *ngIf="(workflowTemplate.editable && !importFromURL) || applicationKeys.length > 0"
130+
<div *ngIf="(workflowTemplate.editable) || applicationKeys.length > 0"
148131
class="wide field">
149132
<label>Applications</label>
150133
<div class="codeContainer field" *ngFor="let k of applicationKeys">
151134
<app-workflow-template-editor name="application-value-{{k}}"
152-
[editable]="workflowTemplate.editable && !importFromURL" [removable]="true"
135+
[editable]="workflowTemplate.editable" [removable]="true"
153136
[value]="applicationValues[k]" (changeValue)="applicationValueChange(k, $event)"
154137
(remove)="clickRemoveApplication(k)" [error]="applicationErrors[k]">
155138
</app-workflow-template-editor>
156139
</div>
157-
<button *ngIf="workflowTemplate.editable && !importFromURL" class="ui icon green button"
140+
<button *ngIf="workflowTemplate.editable" class="ui icon green button"
158141
(click)="clickAddApplication()">
159142
<i class="plus icon"></i>
160143
</button>
161144
</div>
162-
<div *ngIf="(workflowTemplate.editable && !importFromURL) || environmentKeys.length > 0"
145+
<div *ngIf="(workflowTemplate.editable) || environmentKeys.length > 0"
163146
class="wide field">
164147
<label>Environments</label>
165148
<div class="codeContainer field" *ngFor="let k of environmentKeys">
166149
<app-workflow-template-editor name="environment-value-{{k}}"
167-
[editable]="workflowTemplate.editable && !importFromURL" [removable]="true"
150+
[editable]="workflowTemplate.editable" [removable]="true"
168151
[value]="environmentValues[k]" (changeValue)="environmentValueChange(k, $event)"
169152
(remove)="clickRemoveEnvironment(k)" [error]="environmentErrors[k]">
170153
</app-workflow-template-editor>
171154
</div>
172-
<button *ngIf="workflowTemplate.editable && !importFromURL" class="ui icon green button"
155+
<button *ngIf="workflowTemplate.editable" class="ui icon green button"
173156
(click)="clickAddEnvironment()">
174157
<i class="plus icon"></i>
175158
</button>
176159
</div>
177-
<div *ngIf="workflowTemplate.editable && !importFromURL && mode === 'edit'" class="wide field">
160+
<div *ngIf="workflowTemplate.editable && mode === 'edit'" class="wide field">
178161
<textarea name="changeMessage" [(ngModel)]="changeMessage"
179162
[placeholder]="'workflow_template_change_message' | translate" [rows]="3"></textarea>
180163
</div>
@@ -184,12 +167,9 @@
184167
<app-delete-button *ngIf="mode === 'edit'" class="left floated" (event)="clickDelete()"
185168
[loading]="loading"></app-delete-button>
186169
<button class="ui positive right floated button" [class.loading]="loading" (click)="clickSave()">
187-
<ng-container *ngIf="!importFromURL">
170+
<ng-container>
188171
<i class="ui icon save"></i>{{ 'btn_save' | translate }}
189172
</ng-container>
190-
<ng-container *ngIf="importFromURL">
191-
<i class="ui icon cloud download"></i>{{ 'btn_synchronize' | translate }}
192-
</ng-container>
193173
</button>
194174
</div>
195175
</div>

ui/src/assets/i18n/en.json

-3
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,6 @@
126126
"btn_add": "Add",
127127
"btn_back": "Back",
128128
"btn_filter": "Filter",
129-
"btn_synchronize": "Synchronize",
130129
"cdsctl_choice_os": "Choose your OS",
131130
"cdsctl_choice_arch": "Choose your architecture",
132131
"cdsctl_choice_options": "Choose your options",
@@ -859,8 +858,6 @@
859858
"workflow_template_init_from_workflow": "Init a template",
860859
"workflow_template_help_add_from": "Current workflow template was initialized with data from \"{{workflowName}}\" workflow in \"{{projectKey}}\" project. The data will not be stored until you save the template.",
861860
"workflow_template_help_edit_from": "Current workflow template is synchronized from URL. You can't edit it.",
862-
"workflow_template_import_from_url": "Import from URL",
863-
"workflow_template_imported_from_url": "Imported from URL",
864861
"workflow_template_param_select_key": "Select a key",
865862
"workflow_warning_deprecated_yaml": "Yaml workflow configuration is deprecated",
866863
"application_repository_help_line_1": "Your application was not imported from your code.",

0 commit comments

Comments
 (0)