-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Rewrite using standardisation and unified methods.
- Loading branch information
1 parent
101aeb1
commit 98c3bb3
Showing
29 changed files
with
819 additions
and
1,034 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
} |
Oops, something went wrong.