Skip to content

Commit

Permalink
feature/add-custom-golangci-config (#6)
Browse files Browse the repository at this point in the history
* ci: add .golangci.toml
* refactor: code based off what was returned by various linters
  • Loading branch information
eljamo committed May 22, 2024
1 parent 0db3fb4 commit 90f5afa
Show file tree
Hide file tree
Showing 13 changed files with 404 additions and 241 deletions.
54 changes: 54 additions & 0 deletions .golangci.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
[run]
timeout = "300s"

[[output.formats]]
format = "colored-line-number"

[linters]
enable = [
# Default
"errcheck", # https://golangci-lint.run/usage/linters/#errcheck
"gosimple", # https://golangci-lint.run/usage/linters/#gosimple
"govet", # https://golangci-lint.run/usage/linters/#govet
"ineffassign", # https://golangci-lint.run/usage/linters/#ineffassign
"staticcheck", # https://golangci-lint.run/usage/linters/#staticcheck
"unused", # https://golangci-lint.run/usage/linters/#unused

# Custom
"errchkjson", # https://golangci-lint.run/usage/linters/#errchkjson
"gci", # https://golangci-lint.run/usage/linters/#gci
"gocritic", # https://golangci-lint.run/usage/linters/#gocritic
"gocognit", # https://golangci-lint.run/usage/linters/#gocognit
"goconst", # https://golangci-lint.run/usage/linters/#goconst
"gocyclo", # https://golangci-lint.run/usage/linters/#gocyclo
"gofumpt", # https://golangci-lint.run/usage/linters/#gofumpt
"goimports", # https://golangci-lint.run/usage/linters/#goimports
"maintidx", # https://golangci-lint.run/usage/linters/#maintidx
"misspell", # https://golangci-lint.run/usage/linters/#misspell
"mnd", # https://golangci-lint.run/usage/linters/#mnd
"nakedret", # https://golangci-lint.run/usage/linters/#nakedret
"prealloc", # https://golangci-lint.run/usage/linters/#prealloc
"revive", # https://golangci-lint.run/usage/linters/#revive
"thelper", # https://golangci-lint.run/usage/linters/#thelper
"tparallel", # tparallel detects inappropriate usage of t.Parallel() method in your Go test codes.
"usestdlibvars", # https://golangci-lint.run/usage/linters/#usestdlibvars
"unconvert", # https://golangci-lint.run/usage/linters/#unconvert
"unparam", # https://golangci-lint.run/usage/linters/#unparam
"wrapcheck", # https://golangci-lint.run/usage/linters/#wrapcheck
]

[issues]
exclude-use-default = false

[[linters-settings.revive.rules]]
name = "package-comments"
disabled = true

[linters-settings.wrapcheck]
ignorePackageGlobs = ["github.com/eljamo/libpass/*"]

[linters-settings.gocyclo]
min-complexity = 15

[linters-settings.gocognit]
min-complexity = 15
8 changes: 7 additions & 1 deletion asset/asset.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"embed"
"encoding/json"
"fmt"
"log"
"os"
"path"
"strings"
Expand All @@ -14,6 +15,7 @@ import (

//go:embed preset/* word_list/*
var files embed.FS

var fileMap = map[string]map[string]string{
option.ConfigKeyPreset: {
option.PresetAppleID: "appleid.json",
Expand Down Expand Up @@ -102,7 +104,11 @@ func readAndFilterWords(filePath string, minLen int, maxLen int, fs embed.FS) ([
if err != nil {
return nil, fmt.Errorf("failed to open embedded text file (%s): %w", filePath, err)
}
defer file.Close()
defer func() {
if err := file.Close(); err != nil {
log.Printf("failed to close file (%s): %v", filePath, err)
}
}()

var wl []string
scanner := bufio.NewScanner(file)
Expand Down
4 changes: 4 additions & 0 deletions asset/asset_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import (
var testFiles embed.FS

func TestKeyToFile(t *testing.T) {
t.Parallel()
tests := []struct {
key string
fileType string
Expand All @@ -39,6 +40,7 @@ func TestKeyToFile(t *testing.T) {
}

func TestLoadJSONFileData(t *testing.T) {
t.Parallel()
tests := []struct {
name string
filePath string
Expand Down Expand Up @@ -145,6 +147,7 @@ func TestReadAndFilterWords(t *testing.T) {
}

func TestLoadJSONFile(t *testing.T) {
t.Parallel()
tests := []struct {
name string
filePath string
Expand Down Expand Up @@ -201,6 +204,7 @@ func TestLoadJSONFile(t *testing.T) {
}

func TestGetJSONPreset(t *testing.T) {
t.Parallel()
tests := []struct {
name string
key string
Expand Down
35 changes: 24 additions & 11 deletions config/settings.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package config

import (
"encoding/json"
"fmt"

"github.com/eljamo/libpass/v7/config/option"
"github.com/eljamo/libpass/v7/internal/merger"
Expand Down Expand Up @@ -44,34 +45,46 @@ type Settings struct {
WordList string `key:"word_list" json:"word_list,omitempty"`
}

const (
defaultNumPasswords int = 3
defaultNumWords int = 3
defaultPaddingCharactersAfter int = 2
defaultPaddingCharactersBefore int = 2
defaultPaddingDigitsAfter int = 2
defaultPaddingDigitsBefore int = 2
defaultPadToLength int = 0
defaultWordLengthMax int = 8
defaultWordLengthMin int = 4
)

// DefaultSettings returns a new Settings struct with the default values set.
// This is used when no settings are given to the New function.
func DefaultSettings() *Settings {
return &Settings{
CaseTransform: option.CaseTransformRandom,
NumPasswords: 3,
NumWords: 3,
NumPasswords: defaultNumPasswords,
NumWords: defaultNumWords,
PaddingCharacter: option.PaddingCharacterRandom,
PaddingCharactersAfter: 2,
PaddingCharactersBefore: 2,
PaddingDigitsAfter: 2,
PaddingDigitsBefore: 2,
PaddingCharactersAfter: defaultPaddingCharactersAfter,
PaddingCharactersBefore: defaultPaddingCharactersBefore,
PaddingDigitsAfter: defaultPaddingDigitsAfter,
PaddingDigitsBefore: defaultPaddingDigitsBefore,
PaddingType: option.PaddingTypeFixed,
PadToLength: 0,
PadToLength: defaultPadToLength,
Preset: option.PresetDefault,
SeparatorAlphabet: option.DefaultSpecialCharacters,
SeparatorCharacter: option.SeparatorCharacterRandom,
SymbolAlphabet: option.DefaultSpecialCharacters,
WordLengthMax: 8,
WordLengthMin: 4,
WordLengthMax: defaultWordLengthMax,
WordLengthMin: defaultWordLengthMin,
WordList: option.WordListEN,
}
}

func mapToJSON(m map[string]any) ([]byte, error) {
mj, err := json.Marshal(m)
if err != nil {
return nil, err
return nil, fmt.Errorf("failed to marshal JSON: %w", err)
}

return mj, nil
Expand All @@ -85,7 +98,7 @@ func mergeMaps(ms ...map[string]any) ([]byte, error) {

func jsonToSettings(s *Settings, js []byte) error {
if err := json.Unmarshal(js, &s); err != nil {
return err
return fmt.Errorf("failed to unmarshal JSON: %w", err)
}

return nil
Expand Down
8 changes: 4 additions & 4 deletions service/padding.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,15 +68,15 @@ func (s *DefaultPaddingService) digits(slice []string) ([]string, error) {
paddedSlice := make([]string, 0, s.cfg.PaddingDigitsBefore+len(slice)+s.cfg.PaddingDigitsAfter)
rdb, err := s.generateRandomDigits(s.cfg.PaddingDigitsBefore)
if err != nil {
return nil, err
return nil, fmt.Errorf("failed to generate random digits before: %w", err)
}

paddedSlice = append(paddedSlice, rdb...)
paddedSlice = append(paddedSlice, slice...)

rda, err := s.generateRandomDigits(s.cfg.PaddingDigitsAfter)
if err != nil {
return nil, err
return nil, fmt.Errorf("failed to generate random digits after: %w", err)
}

paddedSlice = append(paddedSlice, rda...)
Expand Down Expand Up @@ -150,7 +150,7 @@ func (s *DefaultPaddingService) removeRandomEdgeSeparatorCharacter(slice []strin
func (s *DefaultPaddingService) symbols(pw string) (string, error) {
char, err := s.getPaddingCharacter()
if err != nil {
return "", err
return "", fmt.Errorf("failed to get padding character: %w", err)
}

switch s.cfg.PaddingType {
Expand All @@ -173,7 +173,7 @@ func (s *DefaultPaddingService) getPaddingCharacter() (string, error) {
if err != nil {
return "", err
}
return string(s.cfg.SymbolAlphabet[num]), nil
return s.cfg.SymbolAlphabet[num], nil
}

return s.cfg.PaddingCharacter, nil
Expand Down
Loading

0 comments on commit 90f5afa

Please sign in to comment.