Skip to content

Commit

Permalink
refractors to services
Browse files Browse the repository at this point in the history
  • Loading branch information
jaspermayone committed Aug 19, 2024
1 parent 543f410 commit 43d4c44
Show file tree
Hide file tree
Showing 13 changed files with 571 additions and 539 deletions.
21 changes: 11 additions & 10 deletions src/functions/domain.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,16 +25,17 @@ export async function domainCheck(domain: string) {
const tsStart = Date.now();
metrics.increment("functions.domainCheck");

let walshyData = await walshyService.check(domain);
let ipQualityScoreData = await ipQualityScoreService.domainCheck(domain);
let googleSafebrowsingData = await googleSafebrowsingService.check(domain);
let sinkingYahtsData = await sinkingYahtsService.check(domain);
let virusTotalData = await virusTotalService.check(domain);
let phishermanData = await phishermanService.check(domain);
let phishObserverData = await phishObserverService.check(domain);
let urlScanData = await urlScanService.check(domain);
let securitytrailsData = await securityTrailsService.check(domain);
let phishreportData = await phishReportService.check(domain);
let walshyData = await walshyService.domain.check(domain);
let ipQualityScoreData = await ipQualityScoreService.domain.check(domain);
let googleSafebrowsingData =
await googleSafebrowsingService.domain.check(domain);
let sinkingYahtsData = await sinkingYahtsService.domain.check(domain);
let virusTotalData = await virusTotalService.domain.check(domain);
let phishermanData = await phishermanService.domain.check(domain);
let phishObserverData = await phishObserverService.domain.check(domain);
let urlScanData = await urlScanService.domain.check(domain);
let securitytrailsData = await securityTrailsService.domain.check(domain);
let phishreportData = await phishReportService.domain.check(domain);

let dbDomain = await prisma.domain.findFirst({
where: {
Expand Down
2 changes: 1 addition & 1 deletion src/routes/email.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ router.get("/check/:email", async (req, res) => {
return res.status(400).json({ message: "Invalid email provided." });
}

const result = await ipQualityScoreService.emailCheck(email);
const result = await ipQualityScoreService.email.check(email);
res.status(200).json(result);
});

Expand Down
82 changes: 42 additions & 40 deletions src/services/GoogleSafebrowsing.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,51 +9,53 @@ import { APIs } from "../types/enums";
* A service that provides access to the Google Safebrowsing for checking and reporting domains.
*/
export class GoogleSafebrowsingService {
/**
* Asynchronously checks a given domain against the google safebrowsing service for any known bad domains.
*
* @param {string} domain - The domain name to be checked.
* @returns
*/
async check(domain: string) {
metrics.increment("domain.check.api.google_safebrowsing");
domain = {
/**
* Asynchronously checks a given domain against the Google Safebrowsing service for any known bad domains.
*
* @param {string} domain - The domain name to be checked.
* @returns
*/
check: async (domain: string) => {
metrics.increment("services.googleSafebrowsing.domain.check");

const response = await axios.post(
`https://safebrowsing.googleapis.com/v4/threatMatches:find?key=${process
.env.GOOGLE_API_KEY!}`,
{
client: {
clientId: `phish.directory`,
clientVersion: `${process.env.npm_package_version!}`,
},
threatInfo: {
threatTypes: ["MALWARE", "SOCIAL_ENGINEERING", "UNWANTED_SOFTWARE"],
platformTypes: ["ANY_PLATFORM"],
threatEntryTypes: ["URL"],
threatEntries: [
{
url: domain,
},
],
const response = await axios.post(
`https://safebrowsing.googleapis.com/v4/threatMatches:find?key=${process
.env.GOOGLE_API_KEY!}`,
{
client: {
clientId: `phish.directory`,
clientVersion: `${process.env.npm_package_version!}`,
},
threatInfo: {
threatTypes: ["MALWARE", "SOCIAL_ENGINEERING", "UNWANTED_SOFTWARE"],
platformTypes: ["ANY_PLATFORM"],
threatEntryTypes: ["URL"],
threatEntries: [
{
url: domain,
},
],
},
},
},
);
);

const data = response.data;
const dbDomain = await getDbDomain(domain);
const data = response.data;
const dbDomain = await getDbDomain(domain);

await prisma.rawAPIData.create({
data: {
sourceAPI: "SafeBrowsing",
domain: {
connect: {
id: dbDomain.id,
await prisma.rawAPIData.create({
data: {
sourceAPI: "SafeBrowsing",
domain: {
connect: {
id: dbDomain.id,
},
},
data: data,
},
data: data,
},
});
});

return data;
}
return data;
},
};
}
120 changes: 66 additions & 54 deletions src/services/IpQualityScore.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,70 +8,82 @@ import { getDbDomain } from "../functions/db/getDbDomain";
* A service that provides access to the IpQualityScore service for checking and reporting domains.
*/
export class IpQualityScoreService {
/**
* Asynchronously checks a given domain against the IpQualityScore service for any known bad domains.
*
* @param {string} domain - The domain name to be checked.
* @returns
*/
async domainCheck(domain: string) {
metrics.increment("domain.check.api.ipqualityscore");
domain = {
/**
* Asynchronously checks a given domain against the IpQualityScore service for any known bad domains.
*
* @param {string} domain - The domain name to be checked.
* @returns
*/
check: async (domain: string) => {
metrics.increment("services.ipqualityscore.domain.check");

const response = await axios.get(
`https://ipqualityscore.com/api/json/url/${process.env
.IPQS_API_KEY!}/${domain}`,
{
// todo: extract headers to a seperate place to avoid duplication
headers: {
Referer: "https://phish.directory",
"User-Agent": "[email protected]",
"X-Identity": "[email protected]",
const response = await axios.get(
`https://ipqualityscore.com/api/json/url/${process.env
.IPQS_API_KEY!}/${domain}`,
{
// todo: extract headers to a seperate place to avoid duplication
headers: {
Referer: "https://phish.directory",
"User-Agent": "[email protected]",
"X-Identity": "[email protected]",
},
},
},
);
);

const data = response.data;
const dbDomain = await getDbDomain(domain);
const data = response.data;
const dbDomain = await getDbDomain(domain);

await prisma.rawAPIData.create({
data: {
sourceAPI: "IpQualityScore",
domain: {
connect: {
id: dbDomain.id,
await prisma.rawAPIData.create({
data: {
sourceAPI: "IpQualityScore",
domain: {
connect: {
id: dbDomain.id,
},
},
data: data,
},
data: data,
},
});
});

return data;
},
};

return data;
}
email = {
/**
* Asynchronously checks a given email against the IpQualityScore service for any known bad emails.
*
* @param {string} email - The email address to be checked.
* @returns
*/
check: async (email: string) => {
metrics.increment("services.ipqualityscore.email.check");

async emailCheck(email: string) {
let response = await axios.get(
`https://ipqualityscore.com/api/json/email/${process.env
.IPQS_API_KEY!}/${email}`,
{
headers: {
Referer: "https://phish.directory",
"User-Agent": "[email protected]",
"X-Identity": "[email protected]",
let response = await axios.get(
`https://ipqualityscore.com/api/json/email/${process.env
.IPQS_API_KEY!}/${email}`,
{
headers: {
Referer: "https://phish.directory",
"User-Agent": "internal-server@phish.directory",
"X-Identity": "[email protected]",
},
},
},
);
);

let data = response.data;
let data = response.data;

let keyData = {
valid: data.valid,
disposable: data.disposable,
dns_valid: data.dns_valid,
honeypot: data.honeypot,
deliverability: data.deliverability,
fraud_score: data.fraud_score,
};
let keyData = {
valid: data.valid,
disposable: data.disposable,
dns_valid: data.dns_valid,
honeypot: data.honeypot,
deliverability: data.deliverability,
fraud_score: data.fraud_score,
};

return keyData;
}
return keyData;
},
};
}
Loading

0 comments on commit 43d4c44

Please sign in to comment.