Code development platform for open source projects from the European Union institutions :large_blue_circle: EU Login authentication by SMS will be completely phased out by mid-2025. To see alternatives please check here

Skip to content
Snippets Groups Projects
Commit 4eb73e0c authored by Joze RIHTARSIC's avatar Joze RIHTARSIC
Browse files

Pull request #88: [EDELIVERY-12755] implement DNS lookup tools

Merge in EDELIVERY/smp from feature/EDELIVERY-12755-sml-integration-dns-tools to development

* commit 'f553d28d':
  [EDELIVERY-12755] PR updates
  [EDELIVERY-12755] PR updates
  [EDELIVERY-12755] implement DNS lookup tools
parents 84dccbfb f553d28d
No related branches found
No related tags found
No related merge requests found
Pipeline #155896 failed
Showing
with 540 additions and 368 deletions
......@@ -7,6 +7,7 @@ eDelivery SMP 5.1
smp.sso.cas.registration.enabled: Enable/Disable automatic user registration from CAS at first login.
smp.sso.cas.registration.confirmation.mandatory: Enable/Disable user confirmation after registration from CAS at first login.
smp.sso.cas.registration.mapping: The CAS property mapping to user data. Ex: 'EMAIL:${email}|FULL_NAME:${firstName} ${lastName}'
bdmsl.integration.dns.zone: The DNS zone/top domain of the SML server. The DNS zone is used to generate DNS queries.
eDelivery SMP 5.0
- removed: bdmsl.participant.multidomain.enabled
......
This diff is collapsed.
......@@ -16,13 +16,13 @@
"private": true,
"dependencies": {
"@angular/animations": "^16.2.12",
"@angular/cdk": "^16.2.12",
"@angular/cdk": "^16.2.14",
"@angular/common": "^16.2.12",
"@angular/compiler": "^16.2.12",
"@angular/core": "^16.2.12",
"@angular/forms": "^16.2.12",
"@angular/material": "^16.2.12",
"@angular/material-moment-adapter": "^16.2.12",
"@angular/material-moment-adapter": "^16.2.14",
"@angular/platform-browser": "^16.2.12",
"@angular/platform-browser-dynamic": "^16.2.12",
"@angular/platform-server": "^16.2.12",
......@@ -32,15 +32,15 @@
"@angular-material-components/datetime-picker": "^16.0.1",
"@angular-material-components/moment-adapter": "^16.0.1",
"codemirror": "^6.0.1",
"@codemirror/language": "^6.10.0",
"@codemirror/language-data": "^6.3.1",
"@codemirror/language": "^6.10.1",
"@codemirror/language-data": "^6.5.0",
"@codemirror/theme-one-dark": "^6.1.2",
"@codemirror/merge": "^6.5.0",
"@codemirror/merge": "^6.6.1",
"file-saver": "^2.0.5",
"rxjs": "^7.8.1",
"ts-helpers": "^1.1.2",
"tslib": "^2.6.2",
"zone.js": "^0.13.0"
"zone.js": "^0.13.3"
},
"devDependencies": {
"@angular-devkit/build-angular": "^16.2.10",
......
......@@ -142,6 +142,11 @@ import {
import {UserAlertsComponent} from "./user-settings/user-alerts/user-alerts.component";
import {SmpEditorComponent} from "./common/components/smp-editor/smp-editor.component";
import {ResetCredentialComponent} from "./security/reset-credential/reset-credential.component";
import {DnsToolsComponent} from "./tools/dns-tools/dns-tools.component";
import {DnsToolsService} from "./tools/dns-tools/dns-tools.service";
import {
DnsQueryPanelComponent
} from "./tools/dns-tools/dns-query-panel/dns-query-panel.component";
@NgModule({
......@@ -171,6 +176,8 @@ import {ResetCredentialComponent} from "./security/reset-credential/reset-creden
DatePipe,
DefaultPasswordDialogComponent,
DialogComponent,
DnsToolsComponent,
DnsQueryPanelComponent,
DocumentWizardDialogComponent,
DomainGroupComponent,
DomainPanelComponent,
......@@ -276,6 +283,7 @@ import {ResetCredentialComponent} from "./security/reset-credential/reset-creden
AuthorizedGuard,
CertificateService,
DatePipe,
DnsToolsService,
DomainService,
MembershipService,
DownloadService,
......
......@@ -22,12 +22,14 @@ import {activateChildResourceGuard} from "./guards/activate-child-document.guard
import {UserAlertsComponent} from "./user-settings/user-alerts/user-alerts.component";
import {AdminAlertsComponent} from "./system-settings/admin-alerts/admin-alerts.component";
import {ResetCredentialComponent} from "./security/reset-credential/reset-credential.component";
import {DnsToolsComponent} from "./tools/dns-tools/dns-tools.component";
const appRoutes: Routes = [
{path: '', component: ResourceSearchComponent},
{path: 'search', redirectTo: ''},
{path: 'public/dns-tools', component: DnsToolsComponent},
{path: 'login', component: LoginComponent},
{path: 'reset-credential/:resetToken', component: ResetCredentialComponent},
{
......
export interface AccessTokenRo {
identifier: string;
value: string;
generatedOn?: Date;
expireOn?: Date;
}
export enum DnsTypeEnum {
CNAME,
NAPTR
}
import {Injectable} from '@angular/core';
import {Router, NavigationStart, NavigationEnd} from '@angular/router';
import {Observable, Subject} from 'rxjs';
import {HttpErrorResponse} from "@angular/common/http";
import {NavigationService} from "../../window/sidenav/navigation-model.service";
import {AlertMessageService} from "../alert-message/alert-message.service";
......
......@@ -12,6 +12,7 @@ import {SmpConfig} from "../app-config/smp-config.model";
import {SecurityEventService} from "../security/security-event.service";
import {DateAdapter} from "@angular/material/core";
import {NgxMatDateAdapter} from "@angular-material-components/datetime-picker";
import {DomainRo} from "./model/domain-ro.model";
/**
* Purpose of object is to fetch lookups as domains and users
......@@ -22,10 +23,8 @@ export class GlobalLookups {
domainObserver: Observable<SearchTableResult>
userObserver: Observable<SearchTableResult>
cachedDomainList: Array<any> = [];
cachedDomainList: Array<DomainRo> = [];
cachedServiceGroupOwnerList: Array<any> = [];
cachedCertificateList: Array<any> = [];
cachedCertificateAliasList: Array<string> = [];
cachedApplicationInfo: SmpInfo;
cachedApplicationConfig?: SmpConfig;
......@@ -161,8 +160,4 @@ export class GlobalLookups {
this.cachedApplicationConfig = null;
this.cachedDomainList = [];
}
}
export interface DnsQueryRequestRo {
identifierValue:string;
identifierScheme?:string;
domainCode?:string;
topDnsDomain?:string;
}
import {DnsTypeEnum} from "../enums/dns-type.enum";
import {DnsRecordRo} from "./dns-record-ro.model";
export interface DnsQueryRo {
dnsQuery:string
dnsType:DnsTypeEnum
dnsEntries?:DnsRecordRo[]
error?:string[]
}
import {DnsTypeEnum} from "../enums/dns-type.enum";
export interface DnsRecordRo {
dnsType:DnsTypeEnum;
rawRecordResult?:string;
naptrService?:string;
value?:string;
}
import {MembershipRoleEnum} from "../enums/membership-role.enum";
import {SearchTableEntity} from "../search-table/search-table-entity.model";
import {MemberTypeEnum} from "../enums/member-type.enum";
import {VisibilityEnum} from "../enums/visibility.enum";
export interface GroupRo extends SearchTableEntity {
......
export class SmpConstants {
public static EXPANDED_MENU_WIDTH: string = "180px"
public static COLLAPSED_MENU_WIDTH: string = "50px"
public static readonly EXPANDED_MENU_WIDTH: string = "180px"
public static readonly COLLAPSED_MENU_WIDTH: string = "50px"
public static readonly NULL_VALUE: string = "-----------"
public static readonly DATE_TIME_FORMAT = 'dd/MM/yyyy HH:mm:ss z';
public static readonly DATE_FORMAT = 'dd/MM/yyyy';
......@@ -18,6 +18,7 @@ export class SmpConstants {
public static readonly PATH_ACTION_SEARCH = 'search';
public static readonly PATH_ACTION_UPDATE_RESOURCE_TYPES = 'update-resource-types';
public static readonly PATH_ACTION_UPDATE_SML_INTEGRATION = 'update-sml-integration-data';
public static readonly PATH_ACTION_GENERATE_DNS_QUERY : string = 'generate-dns-query';
/* URL variables */
public static readonly PATH_PARAM_ENC_USER_ID = '{user-id}';
public static readonly PATH_PARAM_ENC_DOMAIN_ID = '{domain-id}';
......@@ -36,6 +37,7 @@ export class SmpConstants {
public static readonly PATH_RESOURCE_TYPE_DOMAIN = 'domain';
public static readonly PATH_RESOURCE_TYPE_MEMBER = 'member';
public static readonly PATH_RESOURCE_TYPE_GROUP = 'group';
public static readonly PATH_DNS_TOOLS = 'dns-tools';
public static readonly PATH_RESOURCE_TYPE_RESOURCE_DEF = 'res-def';
......@@ -49,9 +51,9 @@ export class SmpConstants {
// public endpoints
public static readonly REST_PUBLIC = 'public/rest/';
public static readonly REST_INTERNAL = 'internal/rest/';
public static readonly REST_EDIT = 'edit/rest/' + SmpConstants.PATH_PARAM_ENC_USER_ID + '/';
public static readonly REST_EDIT_RESOURCE_SHORT = SmpConstants.REST_EDIT + SmpConstants.PATH_RESOURCE_TYPE_RESOURCE + '/' + SmpConstants.PATH_PARAM_ENC_RESOURCE_ID;
public static readonly REST_EDIT_DOCUMENT = SmpConstants.REST_EDIT_RESOURCE_SHORT + '/' + SmpConstants.PATH_RESOURCE_TYPE_DOCUMENT ;
......@@ -70,8 +72,10 @@ export class SmpConstants {
/* Public services */
public static readonly REST_PUBLIC_SEARCH_RESOURCE = SmpConstants.REST_PUBLIC + SmpConstants.PATH_ACTION_SEARCH;
public static readonly REST_PUBLIC_DOMAIN = SmpConstants.REST_PUBLIC + SmpConstants.PATH_RESOURCE_TYPE_DOMAIN;
public static readonly REST_PUBLIC_DNS_TOOLS = SmpConstants.REST_PUBLIC + SmpConstants.PATH_DNS_TOOLS;
public static readonly REST_PUBLIC_DNS_TOOLS_GEN_QUERY: string = SmpConstants.REST_PUBLIC_DNS_TOOLS + '/' + SmpConstants.PATH_ACTION_GENERATE_DNS_QUERY;
/* Public edit services */
public static readonly REST_EDIT_DOMAIN = SmpConstants.REST_EDIT + SmpConstants.PATH_RESOURCE_TYPE_DOMAIN;
public static readonly REST_EDIT_DOMAIN_MANAGE = SmpConstants.REST_EDIT_DOMAIN + '/' + SmpConstants.PATH_PARAM_ENC_DOMAIN_ID;
......
import {PropertyRo} from './property-ro.model';
export interface PropertyResult {
serviceEntities: Array<PropertyRo>;
pageSize: number;
count: number;
filter: any;
}
.dns-query-panel {
display: flex;
flex-direction: column;
width: 100%;
padding-right: 10px;
font-size: 0.8rem;
}
.dns-query-panel fieldset {
border: 1px solid #ccc;
border-radius: 5px;
padding: 10px;
margin-bottom: 10px;
display: flex;
flex-direction: column;
justify-content: flex-start;
/* adjustment */
position: relative;
}
<div class="dns-query-panel">
<fieldset>
<legend>{{ dnsQeury?.dnsType }}</legend>
<smp-warning-panel *ngIf="dnsQueryNotResolved;" class="smp-warning-panel"
[padding]="false"
icon="error"
label="DNS query not resolved">
</smp-warning-panel>
<b>DNS domain</b>
<pre style="font-size: 0.8em">{{ dnsQeury?.dnsQuery }}</pre>
<div *ngIf="!dnsQueryNotResolved;">
<mat-icon style="position: relative; left: 30%;">arrow_downward</mat-icon>
<div style="font-weight:bold;">Resolved DNS entries</div>
<div *ngFor="let dnsRecord of dnsQeury.dnsEntries; let i = index">
<mat-icon *ngIf="i!==0" style="position: relative; left: 30%">
arrow_downward
</mat-icon>
<pre
style="font-size: 0.8em"
>{{ dnsRecord.rawRecordResult }}</pre>
</div>
</div>
</fieldset>
</div>
import {Component, Input} from "@angular/core";
import {DnsQueryRo} from "../../../common/model/dns-query-ro.model";
/**
* This is a generic dns query panel component for previewing dns results
*/
@Component({
selector: 'dns-query-panel',
templateUrl: './dns-query-panel.component.html',
styleUrls: ['./dns-query-panel.component.css']
})
export class DnsQueryPanelComponent {
@Input() dnsQeury: DnsQueryRo = null;
constructor() {
}
get dnsQueryNotResolved(): boolean {
return this.dnsQeury
&& (this.dnsQeury?.dnsEntries === null
|| this.dnsQeury?.dnsEntries.length === 0);
}
}
<div id="dns-tool-panel">
<form [formGroup]="dnsToolsForm">
<data-panel title="DNS lookup"
[showTitle]="true"
text="Enter the DNS data to create DNS query"
[labelColumnContent]="dnsLookupData"
>
<dns-query-panel *ngFor="let dnsquery of result"
[dnsQeury]="dnsquery"
/>
</data-panel>
<ng-template #dnsLookupData>
<div class="panel">
<mat-form-field class="smp-data-panel-field">
<mat-label>Resource Identifier</mat-label>
<input matInput name="ResourceIdentifier"
formControlName="resourceIdentifier"
id="resource-identifier-id">
</mat-form-field>
<mat-form-field class="smp-data-panel-field">
<mat-label>Resource scheme</mat-label>
<input matInput name="ResourceScheme"
formControlName="resourceScheme"
id="resource-scheme-id">
</mat-form-field>
<mat-form-field class="smp-data-panel-field">
<mat-label>Top domain</mat-label>
<input matInput name="DNS top Domain"
formControlName=dnsTopDomain
id="dns-top-domain-id">
</mat-form-field>
<button mat-raised-button color="primary" id="btn-generate_id"
[disabled]="dnsToolsForm.invalid"
[style]="'width:250px'"
(click)="generateLookupQuery()"
>
<mat-icon>input</mat-icon>
<span>Generate lookup query</span>
</button>
</div>
</ng-template>
</form>
</div>
import {Component} from "@angular/core";
import {DnsToolsService} from "./dns-tools.service";
import {DnsQueryRo} from "../../common/model/dns-query-ro.model";
import {FormBuilder, FormGroup, Validators} from "@angular/forms";
import {GlobalLookups} from "../../common/global-lookups";
@Component({
templateUrl: './dns-tools.component.html',
})
export class DnsToolsComponent {
displayedColumns: string[] = ['dnsqueryColumn'];
dnsToolsForm: FormGroup;
private _result: DnsQueryRo[];
constructor(private dnsToolsService: DnsToolsService,
private lookups: GlobalLookups,
private formBuilder: FormBuilder) {
this.dnsToolsForm = formBuilder.group({
// common values
'resourceIdentifier': ['', Validators.required],
'resourceScheme': [''],
'dnsTopDomain': [''],
});
}
get result(): DnsQueryRo[] {
return this._result;
}
generateLookupQuery() {
console.log('submit');
this.dnsToolsService.executeDnsLookup(
this.dnsToolsForm.get('dnsTopDomain').value,
this.dnsToolsForm.get('resourceIdentifier').value,
this.dnsToolsForm.get('resourceScheme').value
).subscribe((res: DnsQueryRo[]) => {
this._result = res;
})
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment