mirror of
https://github.com/mealie-recipes/mealie.git
synced 2025-08-04 04:55:21 +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",
|
orderDirection: string | null = "asc",
|
||||||
) {
|
) {
|
||||||
const api = useUserApi();
|
const api = useUserApi();
|
||||||
|
|
||||||
async function refreshGroupRecipeActions() {
|
async function refreshGroupRecipeActions() {
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
const { data } = await api.groupRecipeActions.getAll(1, -1, { orderBy, orderDirection });
|
const { data } = await api.groupRecipeActions.getAll(1, -1, { orderBy, orderDirection });
|
||||||
|
@ -46,8 +45,40 @@ export const useGroupRecipeActions = function (
|
||||||
return groupRecipeActions.value;
|
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 */
|
/* 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
|
return url
|
||||||
.replace("${url}", window.location.href)
|
.replace("${url}", window.location.href)
|
||||||
.replace("${id}", recipe.id || "")
|
.replace("${id}", recipe.id || "")
|
||||||
|
@ -56,10 +87,11 @@ export const useGroupRecipeActions = function (
|
||||||
};
|
};
|
||||||
|
|
||||||
async function execute(action: GroupRecipeActionOut, recipe: Recipe): Promise<void | RequestResponse<unknown>> {
|
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) {
|
switch (action.actionType) {
|
||||||
case "link":
|
case "link":
|
||||||
|
|
||||||
window.open(url, "_blank")?.focus();
|
window.open(url, "_blank")?.focus();
|
||||||
return;
|
return;
|
||||||
case "post":
|
case "post":
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue