mirror of
https://github.com/WowUp/WowUp.git
synced 2026-04-23 23:37:11 -04:00
Add per provider addon id validation
This commit is contained in:
@@ -26,6 +26,7 @@ export interface AddonProvider {
|
||||
getById(addonId: string, clientType: WowClientType): Observable<AddonSearchResult>;
|
||||
|
||||
isValidAddonUri(addonUri: URL): boolean;
|
||||
isValidAddonId(addonId: string): boolean;
|
||||
|
||||
onPostInstall(addon: Addon): void;
|
||||
|
||||
|
||||
@@ -342,6 +342,10 @@ export class CurseAddonProvider implements AddonProvider {
|
||||
return addonUri.host && addonUri.host.endsWith("curseforge.com") && addonUri.pathname.startsWith("/wow/addons");
|
||||
}
|
||||
|
||||
isValidAddonId(addonId: string): boolean {
|
||||
return !!addonId && !isNaN(parseInt(addonId, 10));
|
||||
}
|
||||
|
||||
onPostInstall(addon: Addon): void {
|
||||
throw new Error("Method not implemented.");
|
||||
}
|
||||
|
||||
@@ -148,6 +148,10 @@ export class GitHubAddonProvider implements AddonProvider {
|
||||
return addonUri.host && addonUri.host.endsWith("github.com");
|
||||
}
|
||||
|
||||
public isValidAddonId(addonId: string): boolean {
|
||||
return addonId.indexOf("/") !== -1;
|
||||
}
|
||||
|
||||
public onPostInstall(addon: Addon): void {}
|
||||
|
||||
public async scan(
|
||||
|
||||
@@ -108,6 +108,10 @@ export class TukUiAddonProvider implements AddonProvider {
|
||||
return false;
|
||||
}
|
||||
|
||||
isValidAddonId(addonId: string): boolean {
|
||||
return !!addonId && !isNaN(parseInt(addonId, 10));
|
||||
}
|
||||
|
||||
onPostInstall(addon: Addon): void {}
|
||||
|
||||
async scan(
|
||||
|
||||
@@ -88,17 +88,21 @@ export class WowInterfaceAddonProvider implements AddonProvider {
|
||||
throw new Error("Method not implemented.");
|
||||
}
|
||||
|
||||
getById(addonId: string, clientType: WowClientType): Observable<AddonSearchResult> {
|
||||
public getById(addonId: string, clientType: WowClientType): Observable<AddonSearchResult> {
|
||||
return from(this._circuitBreaker.fire(addonId)).pipe(
|
||||
map((result) => (result ? this.toAddonSearchResult(result, "") : undefined))
|
||||
);
|
||||
}
|
||||
|
||||
isValidAddonUri(addonUri: URL): boolean {
|
||||
public isValidAddonUri(addonUri: URL): boolean {
|
||||
return addonUri.host && addonUri.host.endsWith("wowinterface.com");
|
||||
}
|
||||
|
||||
onPostInstall(addon: Addon): void {
|
||||
public isValidAddonId(addonId: string): boolean {
|
||||
return !!addonId && !isNaN(parseInt(addonId, 10));
|
||||
}
|
||||
|
||||
public onPostInstall(addon: Addon): void {
|
||||
throw new Error("Method not implemented.");
|
||||
}
|
||||
|
||||
|
||||
@@ -67,6 +67,10 @@ export class WowUpAddonProvider implements AddonProvider {
|
||||
return false;
|
||||
}
|
||||
|
||||
isValidAddonId(addonId: string): boolean {
|
||||
return true;
|
||||
}
|
||||
|
||||
onPostInstall(addon: Addon): void {
|
||||
throw new Error("Method not implemented.");
|
||||
}
|
||||
|
||||
@@ -217,7 +217,7 @@ export class AddonService {
|
||||
addonId,
|
||||
onUpdate,
|
||||
completion,
|
||||
originalAddon: originalAddon ? { ...originalAddon } : undefined
|
||||
originalAddon: originalAddon ? { ...originalAddon } : undefined,
|
||||
});
|
||||
|
||||
return promise;
|
||||
@@ -306,8 +306,9 @@ export class AddonService {
|
||||
|
||||
this._addonStorage.set(addon.id, addon);
|
||||
|
||||
const actionLabel = `${getEnumName(WowClientType, addon.clientType)}|${addon.providerName}|${addon.externalId}|${addon.name
|
||||
}`;
|
||||
const actionLabel = `${getEnumName(WowClientType, addon.clientType)}|${addon.providerName}|${addon.externalId}|${
|
||||
addon.name
|
||||
}`;
|
||||
this._analyticsService.trackAction("install-addon", {
|
||||
clientType: getEnumName(WowClientType, addon.clientType),
|
||||
provider: addon.providerName,
|
||||
@@ -647,21 +648,21 @@ export class AddonService {
|
||||
}
|
||||
|
||||
const externalIds: AddonExternalId[] = [];
|
||||
if (toc.wowInterfaceId) {
|
||||
if (this.getProvider(ADDON_PROVIDER_WOWINTERFACE).isValidAddonId(toc.wowInterfaceId)) {
|
||||
externalIds.push({
|
||||
id: toc.wowInterfaceId,
|
||||
providerName: ADDON_PROVIDER_WOWINTERFACE,
|
||||
});
|
||||
}
|
||||
|
||||
if (toc.tukUiProjectId) {
|
||||
if (this.getProvider(ADDON_PROVIDER_TUKUI).isValidAddonId(toc.tukUiProjectId)) {
|
||||
externalIds.push({
|
||||
id: toc.tukUiProjectId,
|
||||
providerName: ADDON_PROVIDER_TUKUI,
|
||||
});
|
||||
}
|
||||
|
||||
if (toc.curseProjectId) {
|
||||
if (this.getProvider(ADDON_PROVIDER_CURSEFORGE).isValidAddonId(toc.curseProjectId)) {
|
||||
externalIds.push({
|
||||
id: toc.curseProjectId,
|
||||
providerName: ADDON_PROVIDER_CURSEFORGE,
|
||||
@@ -672,7 +673,7 @@ export class AddonService {
|
||||
if (!this.containsOwnExternalId(addon, externalIds)) {
|
||||
externalIds.push({
|
||||
id: addon.externalId,
|
||||
providerName: addon.providerName
|
||||
providerName: addon.providerName,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -701,14 +702,19 @@ export class AddonService {
|
||||
return;
|
||||
}
|
||||
|
||||
oldAddon.externalIds.forEach(oldExtId => {
|
||||
const match = newAddon.externalIds.find(newExtId => newExtId.id === oldExtId.id && newExtId.providerName === oldExtId.providerName);
|
||||
oldAddon.externalIds.forEach((oldExtId) => {
|
||||
const match = newAddon.externalIds.find(
|
||||
(newExtId) => newExtId.id === oldExtId.id && newExtId.providerName === oldExtId.providerName
|
||||
);
|
||||
if (match) {
|
||||
return;
|
||||
}
|
||||
console.log(`Reconciling external id: ${oldExtId.providerName}|${oldExtId.id}`);
|
||||
newAddon.externalIds.push({ ...oldExtId });
|
||||
})
|
||||
});
|
||||
|
||||
// Remove external ids that are not valid that we may have saved previously
|
||||
_.remove(newAddon.externalIds, (extId) => !this.getProvider(extId.providerName).isValidAddonId(extId.providerName));
|
||||
|
||||
this.saveAddon(newAddon);
|
||||
}
|
||||
@@ -761,7 +767,7 @@ export class AddonService {
|
||||
|
||||
public containsOwnExternalId(addon: Addon, array?: AddonExternalId[]): boolean {
|
||||
const arr = array || addon.externalIds;
|
||||
const result = arr && !!arr.find(ext => ext.id === addon.externalId && ext.providerName === addon.providerName);
|
||||
const result = arr && !!arr.find((ext) => ext.id === addon.externalId && ext.providerName === addon.providerName);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user