mirror of
https://github.com/mealie-recipes/mealie.git
synced 2025-07-24 15:49:42 +02:00
add expiring share links to url recipe actions
This commit is contained in:
parent
d26e29d1c5
commit
928a9184bd
1 changed files with 35 additions and 3 deletions
|
@ -34,7 +34,6 @@ export const useGroupRecipeActions = function (
|
|||
orderDirection: string | null = "asc",
|
||||
) {
|
||||
const api = useUserApi();
|
||||
|
||||
async function refreshGroupRecipeActions() {
|
||||
loading.value = true;
|
||||
const { data } = await api.groupRecipeActions.getAll(1, -1, { orderBy, orderDirection });
|
||||
|
@ -46,8 +45,40 @@ export const useGroupRecipeActions = function (
|
|||
return groupRecipeActions.value;
|
||||
});
|
||||
|
||||
function parseRecipeActionUrl(url: string, recipe: Recipe): string {
|
||||
function getTokenLink(token: string, groupSlug: string) {
|
||||
return `${window.location.origin}/g/${groupSlug}/shared/r/${token}`;
|
||||
}
|
||||
|
||||
async function parseRecipeActionUrl(url: string, recipe: Recipe): Promise<string> {
|
||||
/* eslint-disable no-template-curly-in-string */
|
||||
const shareLinkRegex = /\$\{share-link-expires-seconds-[0-9]+\}/g;
|
||||
const group = (await api.groups.getOne(recipe.groupId || "")).data;
|
||||
|
||||
|
||||
const shareLinkStringMatches = url.matchAll(shareLinkRegex);
|
||||
if (shareLinkStringMatches) {
|
||||
const shareLinkSet = new Set<string>();
|
||||
for (const match of shareLinkStringMatches) {
|
||||
shareLinkSet.add(match[0]);
|
||||
}
|
||||
const shareLinkStrings = Array.from(shareLinkSet.values());
|
||||
|
||||
for (let i = 0; i < shareLinkStrings.length; i++) {
|
||||
const shareLinkString = shareLinkStrings[i];
|
||||
const seconds = parseInt(shareLinkString.split("-")[4]);
|
||||
const expires = new Date();
|
||||
expires.setSeconds(expires.getSeconds() + seconds);
|
||||
|
||||
const shareLink = await api.recipes.share.createOne({
|
||||
recipeId: recipe.id || "",
|
||||
expiresAt: expires.toISOString(),
|
||||
});
|
||||
|
||||
const groupSlug = group?.slug || "";
|
||||
url = url.replace(shareLinkString, getTokenLink(shareLink.data?.id || "", groupSlug));
|
||||
}
|
||||
}
|
||||
|
||||
return url
|
||||
.replace("${url}", window.location.href)
|
||||
.replace("${id}", recipe.id || "")
|
||||
|
@ -56,10 +87,11 @@ export const useGroupRecipeActions = function (
|
|||
};
|
||||
|
||||
async function execute(action: GroupRecipeActionOut, recipe: Recipe): Promise<void | RequestResponse<unknown>> {
|
||||
const url = parseRecipeActionUrl(action.url, recipe);
|
||||
const url = await parseRecipeActionUrl(action.url, recipe);
|
||||
|
||||
switch (action.actionType) {
|
||||
case "link":
|
||||
|
||||
window.open(url, "_blank")?.focus();
|
||||
return;
|
||||
case "post":
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue