Skip to content

Commit

Permalink
fix: HASSUYP-279: Nähtävilläolo aineisto ei lataudu (#1260)
Browse files Browse the repository at this point in the history
  • Loading branch information
hakalap authored Aug 15, 2024
1 parent 4a1db22 commit b440625
Show file tree
Hide file tree
Showing 9 changed files with 60 additions and 14 deletions.
4 changes: 4 additions & 0 deletions backend/src/HyvaksymisEsitys/s3Calls/persistFile.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import { CopyObjectCommand } from "@aws-sdk/client-s3";
import { config } from "../../config";
import { log } from "../../logger";
import { assertIsDefined } from "../../util/assertions";
import { NotFoundError } from "hassu-common/error";

/**
* Persistoi yksittäisen tiedoston, joka on tallennettu uploads-kansioon, annetun vaiheen alle ylläpito-bucketiin
Expand All @@ -29,6 +30,9 @@ export async function persistFile({
const { tiedosto, nimi, avain } = ladattuTiedosto;
assertIsDefined(tiedosto, "Tiedoston on oltava määritelty");
const sourceFileProperties = await getUploadedSourceFileInformation(tiedosto);
if (!sourceFileProperties) {
throw new NotFoundError(`Tiedostoa ${tiedosto} ei löydy`);
}
const targetPath = joinPath(getYllapitoPathForProjekti(oid), vaihePrefix, avain, adaptFileName(nimi));
try {
await getS3Client().send(
Expand Down
8 changes: 7 additions & 1 deletion backend/src/archive/projektiArchiveService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,18 @@ import { testProjektiDatabase } from "../database/testProjektiDatabase";
import { projektiSchedulerService } from "../sqsEvents/projektiSchedulerService";
import { omistajaDatabase } from "../database/omistajaDatabase";
import { muistuttajaDatabase } from "../database/muistuttajaDatabase";
import { log } from "../logger";

class ProjektiArchiveService {
async archiveProjekti(oid: string): Promise<string> {
await testProjektiDatabase.deleteProjektiByOid(oid);
await fileService.deleteProjekti(oid);
await projektiSchedulerService.deleteAllSchedules(oid);
try {
await projektiSchedulerService.deleteAllSchedules(oid);
} catch (e) {
// tämä saattaa epäonnistua development modessa koska arkistointia kutsutaan kahteen kertaan
log.error("Ajastuksien poisto epäonnistui");
}
await omistajaDatabase.deleteOmistajatByOid(oid);
await muistuttajaDatabase.deleteMuistuttajatByOid(oid);
return oid;
Expand Down
16 changes: 11 additions & 5 deletions backend/src/files/fileService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -149,10 +149,12 @@ export class FileService {
/**
* Moves a file from temporary upload location to a permanent location under a projekti
*/
async persistFileToProjekti(param: PersistFileProperties): Promise<string> {
async persistFileToProjekti(param: PersistFileProperties): Promise<string | undefined> {
const filePath = FileService.removePrefixFromFile(param.uploadedFileSource);
const sourceFileProperties = await getUploadedSourceFileInformation(filePath);

if (!sourceFileProperties) {
return;
}
const fileNameFromUpload = removeBucketFromPath(filePath);
const targetPath = `/${param.targetFilePathInProjekti}/${fileNameFromUpload}`;
const targetBucketPath = new ProjektiPaths(param.oid).yllapitoFullPath + targetPath;
Expand Down Expand Up @@ -707,7 +709,7 @@ export class FileService {
}
}

export async function getUploadedSourceFileInformation(uploadedFileSource: string): Promise<{ ContentType: string; CopySource: string }> {
export async function getUploadedSourceFileInformation(uploadedFileSource: string): Promise<{ ContentType: string; CopySource: string } | undefined> {
if (!config.uploadBucketName) {
throw new Error("config.uploadBucketName määrittelemättä");
}
Expand All @@ -724,8 +726,12 @@ export async function getUploadedSourceFileInformation(uploadedFileSource: strin
CopySource: encodeURIComponent(config.uploadBucketName + "/" + uploadedFileSource),
};
} catch (e) {
log.error(e);
throw new NotFoundError("Uploaded file " + uploadedFileSource + " not found.");
if (e instanceof NotFound) {
log.error("Uploaded file " + uploadedFileSource + " not found.");
} else {
log.error("Getting uploaded file " + uploadedFileSource + " failed", { error: e });
throw e;
}
}
}

Expand Down
7 changes: 5 additions & 2 deletions backend/src/files/persistFiles.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,17 @@ export async function persistLadattuTiedosto({
targetFilePathInProjekti: string;
asiakirjaTyyppi?: AsiakirjaTyyppi;
kieli?: Kieli;
}): Promise<LadattuTiedosto> {
const uploadedFile: string = await fileService.persistFileToProjekti({
}): Promise<LadattuTiedosto | undefined> {
const uploadedFile = await fileService.persistFileToProjekti({
uploadedFileSource: ladattuTiedosto.tiedosto,
oid,
targetFilePathInProjekti,
asiakirjaTyyppi,
kieli,
});
if (!uploadedFile) {
return;
}

const fileName = uploadedFile.split("/").pop();
assertIsDefined(fileName, "tiedostonimi pitäisi löytyä aina");
Expand Down
11 changes: 8 additions & 3 deletions backend/src/muistutus/muistutusHandler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -119,12 +119,17 @@ class MuistutusHandler {

return await Promise.all(
liitteet.map(
async (liite) =>
await fileService.persistFileToProjekti({
async (liite) => {
const tiedosto = await fileService.persistFileToProjekti({
uploadedFileSource: liite,
oid,
targetFilePathInProjekti: "muistutukset/" + muistutusId,
})
});
if (!tiedosto) {
throw new NotFoundError("Liitettä ei löydy");
}
return tiedosto;
}
)
);
}
Expand Down
3 changes: 3 additions & 0 deletions backend/src/palaute/palauteHandlerJulkinen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@ class PalauteHandlerJulkinen {
oid,
targetFilePathInProjekti: "palautteet/" + palaute.id,
});
if (!liite) {
throw new NotFoundError("Liitettä ei löydy");
}
palaute.liite = liite;
await virusScanService.runScanOnFile(
config.yllapitoBucketName,
Expand Down
18 changes: 18 additions & 0 deletions backend/src/projekti/projektiHandler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -470,6 +470,9 @@ async function handleSuunnitteluSopimusFile(input: API.TallennaProjektiInput) {
oid: input.oid,
targetFilePathInProjekti: "suunnittelusopimus",
});
if (!input.suunnitteluSopimus.logo.SUOMI) {
throw new NotFoundError("Logoa ei löydy");
}
}

if (input.suunnitteluSopimus?.logo?.RUOTSI) {
Expand All @@ -478,6 +481,9 @@ async function handleSuunnitteluSopimusFile(input: API.TallennaProjektiInput) {
oid: input.oid,
targetFilePathInProjekti: "suunnittelusopimus",
});
if (!input.suunnitteluSopimus.logo.RUOTSI) {
throw new NotFoundError("Logoa ei löydy");
}
}
}

Expand Down Expand Up @@ -505,6 +511,9 @@ async function persistFiles<T extends Record<string, LadattuTiedosto | null>, K
asiakirjaTyyppi: asiakirjaTyypit[i],
kieli: kielet[i],
});
if (!palautus[key]) {
throw new NotFoundError("Tiedostoa ei löydy");
}
break;
case API.LadattuTiedostoTila.ODOTTAA_POISTOA:
await deleteFile({
Expand Down Expand Up @@ -560,6 +569,9 @@ async function handleVuorovaikutusSaamePDF(dbProjekti: DBProjekti) {
asiakirjaTyyppi: API.AsiakirjaTyyppi.YLEISOTILAISUUS_KUTSU,
kieli: API.Kieli.POHJOISSAAME,
});
if (!dbProjekti.vuorovaikutusKierros.vuorovaikutusSaamePDFt[kieli]) {
throw new NotFoundError("Tiedostoa ei löydy");
}
break;
case API.LadattuTiedostoTila.ODOTTAA_POISTOA:
await deleteFile({
Expand Down Expand Up @@ -675,6 +687,9 @@ async function handleEuLogoFiles(input: API.TallennaProjektiInput) {
oid: input.oid,
targetFilePathInProjekti: "euLogot/FI",
});
if (!input.euRahoitusLogot.SUOMI) {
throw new NotFoundError("Logoa ei löydy");
}
}

if (input.euRahoitusLogot?.RUOTSI) {
Expand All @@ -683,6 +698,9 @@ async function handleEuLogoFiles(input: API.TallennaProjektiInput) {
oid: input.oid,
targetFilePathInProjekti: "euLogot/SV",
});
if (!input.euRahoitusLogot.RUOTSI) {
throw new NotFoundError("Logoa ei löydy");
}
}
}

Expand Down
5 changes: 3 additions & 2 deletions backend/src/tiedostot/ProjektiTiedostoManager/util.ts
Original file line number Diff line number Diff line change
Expand Up @@ -98,15 +98,16 @@ export async function handleTiedostot(oid: string, tiedostot: LadattuTiedosto[]
}
);
await Promise.all(poistettavat.map((tiedosto) => deleteFile({ oid, tiedosto })));
const persistoidutTiedostot = await Promise.all(
// ignoorataan virheelliset latausviittaukset jotta ei aiheuta projektin lukitusta 4 päiväksi kun sanoman käsittely ei onnistu
const persistoidutTiedostot = (await Promise.all(
persistoitavat.map((tiedosto) =>
persistLadattuTiedosto({
oid,
ladattuTiedosto: tiedosto,
targetFilePathInProjekti: paths.yllapitoPath,
})
)
);
)).filter(t => t !== undefined);
tiedostot.push(...valmiit.concat(persistoidutTiedostot).sort((a, b) => (a.jarjestys ?? 0) - (b.jarjestys ?? 0)));
if (poistettavat.length || persistoitavat.length) {
return true;
Expand Down
2 changes: 1 addition & 1 deletion backend/src/user/signedCookie.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ export async function createSignedCookies(): Promise<string[]> {
Resource: `*`,
Condition: {
DateLessThan: {
"AWS:EpochTime": Math.floor(new Date().getTime() / 1000) + 3600,
"AWS:EpochTime": Math.floor(new Date().getTime() / 1000) + (3600 * 8),
},
},
},
Expand Down

0 comments on commit b440625

Please sign in to comment.