Updating sanitize links to work with my new figure shortcode
parent
6de48499ce
commit
703608a1fe
@ -1,3 +1,6 @@
|
|||||||
FROM alpine
|
FROM alpine
|
||||||
|
|
||||||
|
RUN apk update
|
||||||
|
RUN apk add sed
|
||||||
|
|
||||||
COPY sanitize-links /bin/sanitize-links
|
COPY sanitize-links /bin/sanitize-links
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
|
|
||||||
# Grab the "note name", e.g. `$BLOGDIR/contents/notes/demo-post/` yields 'demo-post'
|
# Grab the "note name", e.g. `$BLOGDIR/contents/notes/demo-post/` yields 'demo-post'
|
||||||
|
echo "scanning $1 for attachments"
|
||||||
noteName=$(echo $1|awk -F'/' '{print $(NF-1)}')
|
noteName=$(echo $1|awk -F'/' '{print $(NF-1)}')
|
||||||
sed -i "s#Resources/attachments#notes/$noteName#" $1
|
sed -E 's/\[\[Resources\/attachments\/(.*?)\]\]/\1/gm;t;d' -i $1
|
||||||
|
@ -0,0 +1,19 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"regexp"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
// StripAttachmentLinks finds links to the Resources/attachmenst folder
|
||||||
|
// and replaces them with the filename. it'll only do this
|
||||||
|
// when the line has `{{< figure`
|
||||||
|
func StripAttachmentLinks(s string) string {
|
||||||
|
if !strings.Contains(s, "{{< figure") {
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
var re = regexp.MustCompile(`(?m)\[\[Resources\/attachments\/(.*?)\]\]`)
|
||||||
|
var substitution = `"$1"`
|
||||||
|
|
||||||
|
return re.ReplaceAllString(s, substitution)
|
||||||
|
}
|
@ -0,0 +1,99 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
// "bufio"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
type CopyOp struct {
|
||||||
|
Bytes int64
|
||||||
|
Original, Backup *os.File
|
||||||
|
}
|
||||||
|
|
||||||
|
func copy(src, dst string) (CopyOp, error) {
|
||||||
|
var co CopyOp
|
||||||
|
sourceFileStat, err := os.Stat(src)
|
||||||
|
if err != nil {
|
||||||
|
return co, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if !sourceFileStat.Mode().IsRegular() {
|
||||||
|
return co, fmt.Errorf("%s is not a regular file", src)
|
||||||
|
}
|
||||||
|
|
||||||
|
source, err := os.Open(src)
|
||||||
|
if err != nil {
|
||||||
|
return co, err
|
||||||
|
}
|
||||||
|
co.Original = source
|
||||||
|
defer source.Close()
|
||||||
|
|
||||||
|
destination, err := os.Create(dst)
|
||||||
|
if err != nil {
|
||||||
|
return co, err
|
||||||
|
}
|
||||||
|
defer destination.Close()
|
||||||
|
co.Backup = destination
|
||||||
|
|
||||||
|
nBytes, err := io.Copy(destination, source)
|
||||||
|
co.Bytes = nBytes
|
||||||
|
return co, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func restoreBackup(fn string) error {
|
||||||
|
err := os.Remove(fn)
|
||||||
|
if err != nil {
|
||||||
|
// removing the original has failed.
|
||||||
|
return fmt.Errorf("error removing modified file[%s] : %w", fn, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// copy the backup back to the original
|
||||||
|
_, err = copy(fn+".bak", fn)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("error copying backup into original location[%s]: %w", fn, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// remove the backup
|
||||||
|
err = os.Remove(fn + ".bak")
|
||||||
|
if err != nil {
|
||||||
|
// removing the backup has failed.
|
||||||
|
return fmt.Errorf("error removing backup file[%s] : %w", fn+".bak", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update modifies the contents of a file in-place.
|
||||||
|
func Update(fn string, newContents io.Reader) error {
|
||||||
|
// create a backup copy
|
||||||
|
copyOp, err := copy(fn, fn+".bak")
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("error backing up file[%s]: %w", fn, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// truncate the original
|
||||||
|
err = os.Truncate(fn, 0)
|
||||||
|
if err != nil {
|
||||||
|
err := restoreBackup(fn)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("error restoring backup: %w", err)
|
||||||
|
}
|
||||||
|
return fmt.Errorf("error truncating original file[%s]: %w", fn, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// copy new contents into original
|
||||||
|
_, err = io.Copy(copyOp.Original, newContents)
|
||||||
|
if err != nil {
|
||||||
|
// the copy has failed. we need to remove the original
|
||||||
|
err := restoreBackup(fn)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("error restoring backup: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return fmt.Errorf("error writing new contents to file[%s] : %w", fn, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
Loading…
Reference in New Issue