Skip to content
Snippets Groups Projects
Select Git revision
  • main
  • ui-rewrite
2 results

env.go

Blame
  • page_upload.go 3.93 KiB
    package main
    
    import (
    	"crypto/rand"
    	"encoding/base64"
    	"encoding/json"
    	"fmt"
    	"git.kuschku.de/justjanne/imghost/shared"
    	"github.com/hibiken/asynq"
    	"io"
    	"mime/multipart"
    	"net/http"
    	"os"
    	"path/filepath"
    	"time"
    )
    
    type UploadData struct {
    	BaseUrl string
    	User    shared.UserInfo
    }
    
    func detectMimeType(path string) (string, error) {
    	file, err := os.Open(path)
    	if err != nil {
    		return "", err
    	}
    
    	buffer := make([]byte, 512)
    	_, err = file.Read(buffer)
    	if err != nil {
    		return "", err
    	}
    
    	return http.DetectContentType(buffer), nil
    }
    
    func generateId() (string, error) {
    	buffer := make([]byte, 4)
    	if _, err := rand.Read(buffer); err != nil {
    		return "", err
    	}
    
    	return base64.URLEncoding.WithPadding(base64.NoPadding).EncodeToString(buffer), nil
    }
    
    func writeBody(reader io.ReadCloser, path string) error {
    	out, err := os.Create(path)
    	if err != nil {
    		return err
    	}
    	defer out.Close()
    
    	_, err = io.Copy(out, reader)
    	if err != nil {
    		return err
    	}
    	return out.Close()
    }
    
    func createImage(config *shared.Config, body io.ReadCloser, fileHeader *multipart.FileHeader) (shared.Image, error) {
    	id, err := generateId()
    	if err != nil {
    		return shared.Image{}, err
    	}
    	path := filepath.Join(config.SourceFolder, id)
    
    	if err := writeBody(body, path); err != nil {
    		return shared.Image{}, err
    	}