Skip to content

Commit

Permalink
Rewrite using standardisation and unified methods.
Browse files Browse the repository at this point in the history
  • Loading branch information
vault-thirteen committed Sep 23, 2024
1 parent 101aeb1 commit 98c3bb3
Show file tree
Hide file tree
Showing 29 changed files with 819 additions and 1,034 deletions.
242 changes: 14 additions & 228 deletions cmd/hasher/calculate.go
Original file line number Diff line number Diff line change
@@ -1,271 +1,57 @@
package main

import (
"encoding/hex"
"fmt"
"os"
"path/filepath"
"strconv"
"strings"

cla "github.com/vault-thirteen/Hasher/pkg/Models/CommandLineArguments"
ht "github.com/vault-thirteen/Hasher/pkg/Models/HashType"
h "github.com/vault-thirteen/Hasher/pkg/Models/Hashing"
ot "github.com/vault-thirteen/Hasher/pkg/Models/ObjectType"
"github.com/vault-thirteen/Hasher/pkg/hash"
sc "github.com/vault-thirteen/Hasher/pkg/strconv"
c "github.com/vault-thirteen/Hasher/pkg/Models/common"
)

func calculateHash(args *cla.CommandLineArguments) (err error) {
switch args.ObjectType().ID() {
case ot.IdFile:
case ot.Id_File:
return calculateHashOfFile(args)
case ot.IdFolder:
case ot.Id_Folder:
return calculateHashOfFolder(args)
default:
return fmt.Errorf(ot.ErrUnknown, args.ObjectType())
return c.ErrorA1(ot.ErrUnknownObjectType, args.ObjectType())
}
}

func calculateHashOfFile(args *cla.CommandLineArguments) (err error) {
switch args.HashType().ID() {
case ht.IdCRC32:
return calculateFileHashCRC32(args)
case ht.IdMD5:
return calculateFileHashMD5(args)
case ht.IdSHA256:
return calculateFileHashSHA256(args)
case ht.IdFileSize:
return calculateFileHashFileSize(args)
case ht.IdFileExistence:
return calculateFileHashFileExistence(args)
default:
return fmt.Errorf(ht.ErrUnknown, args.HashType())
}
}

func calculateFileHashCRC32(args *cla.CommandLineArguments) (err error) {
var sum uint32
sum, err = hash.GetFileHashCRC32(args.ObjectPath())
if err != nil {
return err
}

printHashLine(strings.ToUpper(strconv.FormatUint(uint64(sum), 16)), filepath.Base(args.ObjectPath()))
return nil
}

func calculateFileHashMD5(args *cla.CommandLineArguments) (err error) {
var sum []byte
sum, err = hash.GetFileHashMD5(args.ObjectPath())
if err != nil {
return err
}

printHashLine(strings.ToUpper(hex.EncodeToString(sum[:])), filepath.Base(args.ObjectPath()))
return nil
}
file := args.ObjectPath()

func calculateFileHashSHA256(args *cla.CommandLineArguments) (err error) {
var sum []byte
sum, err = hash.GetFileHashSHA256(args.ObjectPath())
var hasher *h.Hashing
hasher, err = h.NewHashing(args.HashType().ID())
if err != nil {
return err
}

printHashLine(strings.ToUpper(hex.EncodeToString(sum[:])), filepath.Base(args.ObjectPath()))
return nil
}

func calculateFileHashFileSize(args *cla.CommandLineArguments) (err error) {
var sum int64
sum, err = hash.GetFileHashFileSize(args.ObjectPath())
var result *h.HashingResult
result, err = hasher.Calculate(file)
if err != nil {
return err
}

printHashLine(strconv.FormatInt(sum, 10), filepath.Base(args.ObjectPath()))
return nil
}

func calculateFileHashFileExistence(args *cla.CommandLineArguments) (err error) {
var sum bool
sum, err = hash.GetFileHashFileExistence(args.ObjectPath())
if err != nil {
return err
}

printHashLine(sc.FormatBooleanAsNumber(sum), filepath.Base(args.ObjectPath()))
c.PrintHashLine(result.ToString(), filepath.Base(file))
return nil
}

func calculateHashOfFolder(args *cla.CommandLineArguments) (err error) {
switch args.HashType().ID() {
case ht.IdCRC32:
return calculateFolderHashCRC32(args)
case ht.IdMD5:
return calculateFolderHashMD5(args)
case ht.IdSHA256:
return calculateFolderHashSHA256(args)
case ht.IdFileSize:
return calculateFolderHashFileSize(args)
case ht.IdFileExistence:
return calculateFolderHashFileExistence(args)
default:
return fmt.Errorf(ht.ErrUnknown, args.HashType())
}
}

func calculateFolderHashCRC32(args *cla.CommandLineArguments) (err error) {
basePath := args.ObjectPath()

err = filepath.Walk(basePath, crc32DirWalker)
var hasher *h.Hashing
hasher, err = h.NewHashing(args.HashType().ID())
if err != nil {
return err
}

return nil
}

func crc32DirWalker(path string, fi os.FileInfo, err error) error {
err = filepath.Walk(basePath, hasher.WalkerFn)
if err != nil {
return err
}

if fi.IsDir() {
return nil
}

var sum uint32
sum, err = hash.GetFileHashCRC32(path)
if err != nil {
return err
}

printHashLine(strings.ToUpper(strconv.FormatUint(uint64(sum), 16)), path)

return nil
}

func calculateFolderHashMD5(args *cla.CommandLineArguments) (err error) {
basePath := args.ObjectPath()

err = filepath.Walk(basePath, md5DirWalker)
if err != nil {
return err
}

return nil
}

func md5DirWalker(path string, fi os.FileInfo, err error) error {
if err != nil {
return err
}

if fi.IsDir() {
return nil
}

var sum []byte
sum, err = hash.GetFileHashMD5(path)
if err != nil {
return err
}

printHashLine(strings.ToUpper(hex.EncodeToString(sum[:])), path)

return nil
}

func calculateFolderHashSHA256(args *cla.CommandLineArguments) (err error) {
basePath := args.ObjectPath()

err = filepath.Walk(basePath, sha256DirWalker)
if err != nil {
return err
}

return nil
}

func calculateFolderHashFileSize(args *cla.CommandLineArguments) (err error) {
basePath := args.ObjectPath()

err = filepath.Walk(basePath, fileSizeDirWalker)
if err != nil {
return err
}

return nil
}

func calculateFolderHashFileExistence(args *cla.CommandLineArguments) (err error) {
basePath := args.ObjectPath()

err = filepath.Walk(basePath, fileExistenceDirWalker)
if err != nil {
return err
}

return nil
}

func sha256DirWalker(path string, fi os.FileInfo, err error) error {
if err != nil {
return err
}

if fi.IsDir() {
return nil
}

var sum []byte
sum, err = hash.GetFileHashSHA256(path)
if err != nil {
return err
}

printHashLine(strings.ToUpper(hex.EncodeToString(sum[:])), path)

return nil
}

func fileSizeDirWalker(path string, fi os.FileInfo, err error) error {
if err != nil {
return err
}

if fi.IsDir() {
return nil
}

var sum int64
sum, err = hash.GetFileHashFileSize(path)
if err != nil {
return err
}

printHashLine(strconv.FormatInt(sum, 10), path)

return nil
}

func fileExistenceDirWalker(path string, fi os.FileInfo, err error) error {
if err != nil {
return err
}

if fi.IsDir() {
return nil
}

var sum bool
sum, err = hash.GetFileHashFileExistence(path)
if err != nil {
return err
}

printHashLine(sc.FormatBooleanAsNumber(sum), path)

return nil
}
Loading

0 comments on commit 98c3bb3

Please sign in to comment.