-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathwebsites.service.ts
108 lines (94 loc) · 3.73 KB
/
websites.service.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { DateRange } from '@angular/material/datepicker';
import { Observable, firstValueFrom, map } from 'rxjs';
import { environment } from '../../../environments/environment';
import { ResourceService } from '../../services/resources/resource.service';
import { Page } from '../../shared/types/page.type';
import { Website } from '../../shared/types/websites/website.type';
import { filtersToParams } from '../../utils/filters-to-params';
@Injectable({
providedIn: 'root',
})
export class WebsitesService implements ResourceService<Website> {
constructor(private http: HttpClient) {}
public getPage(
page: number,
pageSize: number,
filters: any = undefined,
firstSeenDateRange: DateRange<Date> = new DateRange<Date>(null, null)
): Observable<Page<Website>> {
let params = filtersToParams(filters);
params = params.append('page', page);
params = params.append('pageSize', pageSize);
if (firstSeenDateRange.start) params = params.append('firstSeenStartDate', firstSeenDateRange.start.getTime());
if (firstSeenDateRange.end) params = params.append('firstSeenEndDate', firstSeenDateRange.end.getTime());
return this.http.get<Page<Omit<Website, 'url'>>>(`${environment.fmUrl}/websites`, { params }).pipe(
map((page: Page<Omit<Website, 'url'>>) => {
const websitePage: Page<Website> = {
totalRecords: page.totalRecords,
items: [],
};
for (const website of page.items) {
websitePage.items.push({
url: this.buildUrl(
website.domain ? website.domain.name : '',
website.host.ip,
website.port.port,
website.path,
website.ssl
),
...website,
});
}
return websitePage;
})
);
}
public async tagWebsite(websiteId: string, tagId: string, isTagged: boolean) {
return await firstValueFrom(
this.http.put(`${environment.fmUrl}/websites/${websiteId}/tags`, { tagId: tagId, isTagged: isTagged })
);
}
public getWebsite(websiteId: string): Observable<Website> {
return (<Observable<Omit<Website, 'url'>>>this.http.get(`${environment.fmUrl}/websites/${websiteId}`)).pipe(
map((website) => {
return {
url: this.buildUrl(
website.domain ? website.domain.name : '',
website.host.ip,
website.port.port,
website.path,
website.ssl
),
...website,
sitemap: website.sitemap.sort(),
};
})
);
}
public async delete(websiteId: string) {
return await firstValueFrom(this.http.delete(`${environment.fmUrl}/websites/${websiteId}`));
}
public async deleteMany(websiteIds: string[]) {
return await firstValueFrom(
this.http.delete(`${environment.fmUrl}/websites/`, { body: { websiteIds: websiteIds } })
);
}
public async block(websiteIds: string[], block: boolean) {
return await firstValueFrom(this.http.patch(`${environment.fmUrl}/websites/`, { websiteIds: websiteIds, block }));
}
private buildUrl(domain: string, ip: string, port: number, path: string, ssl: boolean): string {
let url = ssl ? 'https://' : 'http://';
url += domain ? domain : ip;
url += port === 80 || port === 443 ? '' : ':' + port.toString();
url += path;
return url;
}
public async merge(mergeInto: string, mergeFrom: string[]) {
return await firstValueFrom(this.http.patch(`${environment.fmUrl}/websites/merge`, { mergeInto, mergeFrom }));
}
public async unmerge(unmerge: string[]) {
return await firstValueFrom(this.http.patch(`${environment.fmUrl}/websites/unmerge`, { unmerge }));
}
}