Skip to content
Snippets Groups Projects
Select Git revision
  • f154a60da264ff60d9d9686cb9ac88f7ea59e538
  • live_exam_os_ubuntu default protected
2 results

utils.go

Blame
  • utils.go 2.11 KiB
    package utils
    
    import (
    	"os"
    	"io"
    	"fmt"
    	"bytes"
    	"errors"
    	"net/mail"
    	"archive/tar"
    	"path/filepath"
    	"compress/gzip"
    	"github.com/google/uuid"
    )
    
    func Print(a ...any) {
    	os.Stdout.WriteString(fmt.Sprint(a ...))
    }
    
    func Println(a ...any) {
    	Print(a...)
    	Print("\n")
    }
    
    func PrintErr(a ...any) {
    	os.Stderr.WriteString(fmt.Sprint(a ...))
    }
    
    func PrintlnErr(a ...any) {
    	PrintErr(a...)
    	PrintErr("\n")
    }
    
    // Returns true if the specified file exists, false otherwise.
    func FileExists(filename string) bool {
    	info, err := os.Stat(filename)
    	if os.IsNotExist(err) {
    	   return false
    	}
    	return !info.IsDir()
    }
    
    // Creates a tar.gz archive of dir and all its files and subdirectories.
    // Source code slightly modified from: https://gist.github.com/mimoo/25fc9716e0f1353791f5908f94d6e726
    func TarGzDir(dir, archive string) error {
    	var buf bytes.Buffer
    
    	gzWriter := gzip.NewWriter(&buf)
    	tarWriter := tar.NewWriter(gzWriter)
    
    	// Walks through every file in the directory
    	filepath.Walk(dir, func(file string, fi os.FileInfo, err error) error {
    		header, err := tar.FileInfoHeader(fi, file)
    		if err != nil {
    			return err
    		}
    
    		header.Name = filepath.ToSlash(file)
    
    		if err := tarWriter.WriteHeader(header); err != nil {
    			return err
    		}
    		// if not a dir, write file content
    		if !fi.IsDir() {
    			data, err := os.Open(file)
    			if err != nil {
    				return err
    			}
    			if _, err := io.Copy(tarWriter, data); err != nil {
    				return err
    			}
    		}
    		return nil
    	})
    
    	if err := tarWriter.Close(); err != nil {
    		return err
    	}
    	if err := gzWriter.Close(); err != nil {
    		return err
    	}
    
    	fileToWrite, err := os.OpenFile(archive, os.O_CREATE|os.O_RDWR, os.FileMode(0750))
    	if err != nil {
    		return err
    	}
    	if _, err := io.Copy(fileToWrite, &buf); err != nil {
    		return err
    	}
    
    	return nil
    }
    
    func GetRandomTempFilename() (string, error) {
    	tempDir := os.TempDir()
    	uuid, err := uuid.NewRandom()
    	if err != nil {
    		return "", errors.New("Failed creating random UUID: "+err.Error())
    	}
    	randName := "temp_"+uuid.String()
    	return filepath.Join(tempDir, randName), nil
    }
    
    func IsEmail(email string) bool {
        _, err := mail.ParseAddress(email)
    	return err == nil
    }