mirror of
https://github.com/nabbar/golib.git
synced 2025-09-26 20:01:15 +08:00
- Fix some lint, style, error
- Pkg Error : change the register part to allow identify if a code is free or still defined - Pkg Error : apply change of register into all modules - Make some optimization
This commit is contained in:
446
.golangci.yml
Normal file
446
.golangci.yml
Normal file
@@ -0,0 +1,446 @@
|
||||
# This file contains all available configuration options
|
||||
# with their default values.
|
||||
|
||||
# options for analysis running
|
||||
run:
|
||||
# default concurrency is a available CPU number
|
||||
concurrency: 4
|
||||
|
||||
# timeout for analysis, e.g. 30s, 5m, default is 1m
|
||||
timeout: 30m
|
||||
|
||||
# exit code when at least one issue was found, default is 1
|
||||
issues-exit-code: 0
|
||||
|
||||
# include test files or not, default is true
|
||||
tests: true
|
||||
|
||||
# list of build tags, all linters use it. Default is empty list.
|
||||
build-tags: []
|
||||
|
||||
# which dirs to skip: issues from them won't be reported;
|
||||
# can use regexp here: generated.*, regexp is applied on full path;
|
||||
# default value is empty list, but default dirs are skipped independently
|
||||
# from this option's value (see skip-dirs-use-default).
|
||||
# "/" will be replaced by current OS file path separator to properly work
|
||||
# on Windows.
|
||||
skip-dirs:
|
||||
- vendor
|
||||
- test
|
||||
|
||||
# default is true. Enables skipping of directories:
|
||||
# vendor$, third_party$, testdata$, examples$, Godeps$, builtin$
|
||||
skip-dirs-use-default: true
|
||||
|
||||
# which files to skip: they will be analyzed, but issues from them
|
||||
# won't be reported. Default value is empty list, but there is
|
||||
# no need to include all autogenerated files, we confidently recognize
|
||||
# autogenerated files. If it's not please let us know.
|
||||
# "/" will be replaced by current OS file path separator to properly work
|
||||
# on Windows.
|
||||
skip-files:
|
||||
- ".*\\.my\\.go$"
|
||||
|
||||
# by default isn't set. If set we pass it to "go list -mod={option}". From "go help modules":
|
||||
# If invoked with -mod=readonly, the go command is disallowed from the implicit
|
||||
# automatic updating of go.mod described above. Instead, it fails when any changes
|
||||
# to go.mod are needed. This setting is most useful to check that go.mod does
|
||||
# not need updates, such as in a continuous integration and testing system.
|
||||
# If invoked with -mod=vendor, the go command assumes that the vendor
|
||||
# directory holds the correct copies of dependencies and ignores
|
||||
# the dependency descriptions in go.mod.
|
||||
#modules-download-mode: readonly|release|vendor
|
||||
|
||||
# Allow multiple parallel golangci-lint instances running.
|
||||
# If false (default) - golangci-lint acquires file lock on start.
|
||||
allow-parallel-runners: false
|
||||
|
||||
|
||||
# output configuration options
|
||||
output:
|
||||
# colored-line-number|line-number|json|tab|checkstyle|code-climate, default is "colored-line-number"
|
||||
format: colored-line-number
|
||||
|
||||
# print lines of code with issue, default is true
|
||||
print-issued-lines: true
|
||||
|
||||
# print linter name in the end of issue text, default is true
|
||||
print-linter-name: true
|
||||
|
||||
# make issues output unique by line, default is true
|
||||
uniq-by-line: true
|
||||
|
||||
# add a prefix to the output file references; default is no prefix
|
||||
path-prefix: ""
|
||||
|
||||
|
||||
# all available settings of specific linters
|
||||
linters-settings:
|
||||
dogsled:
|
||||
# checks assignments with too many blank identifiers; default is 2
|
||||
max-blank-identifiers: 2
|
||||
dupl:
|
||||
# tokens count to trigger issue, 150 by default
|
||||
threshold: 100
|
||||
errcheck:
|
||||
# report about not checking of errors in type assertions: `a := b.(MyStruct)`;
|
||||
# default is false: such cases aren't reported by default.
|
||||
check-type-assertions: false
|
||||
|
||||
# report about assignment of errors to blank identifier: `num, _ := strconv.Atoi(numStr)`;
|
||||
# default is false: such cases aren't reported by default.
|
||||
check-blank: false
|
||||
|
||||
# [deprecated] comma-separated list of pairs of the form pkg:regex
|
||||
# the regex is used to ignore names within pkg. (default "fmt:.*").
|
||||
# see https://github.com/kisielk/errcheck#the-deprecated-method for details
|
||||
ignore: fmt:.*,io/ioutil:^Read.*
|
||||
|
||||
# path to a file containing a list of functions to exclude from checking
|
||||
# see https://github.com/kisielk/errcheck#excluding-functions for details
|
||||
# exclude: /path/to/file.txt
|
||||
exhaustive:
|
||||
# indicates that switch statements are to be considered exhaustive if a
|
||||
# 'default' case is present, even if all enum members aren't listed in the
|
||||
# switch
|
||||
default-signifies-exhaustive: false
|
||||
funlen:
|
||||
lines: 1000
|
||||
statements: 100
|
||||
gocognit:
|
||||
# minimal code complexity to report, 30 by default (but we recommend 10-20)
|
||||
min-complexity: 50
|
||||
nestif:
|
||||
# minimal complexity of if statements to report, 5 by default
|
||||
min-complexity: 4
|
||||
goconst:
|
||||
# minimal length of string constant, 3 by default
|
||||
min-len: 3
|
||||
# minimal occurrences count to trigger, 3 by default
|
||||
min-occurrences: 3
|
||||
gocritic:
|
||||
# Which checks should be enabled; can't be combined with 'disabled-checks';
|
||||
# See https://go-critic.github.io/overview#checks-overview
|
||||
# To check which checks are enabled run `GL_DEBUG=gocritic golangci-lint run`
|
||||
# By default list of stable checks is used.
|
||||
# enabled-checks:
|
||||
# - rangeValCopy
|
||||
|
||||
# Which checks should be disabled; can't be combined with 'enabled-checks'; default is empty
|
||||
disabled-checks:
|
||||
- regexpMust
|
||||
|
||||
# Enable multiple checks by tags, run `GL_DEBUG=gocritic golangci-lint run` to see all tags and checks.
|
||||
# Empty list by default. See https://github.com/go-critic/go-critic#usage -> section "Tags".
|
||||
enabled-tags:
|
||||
- performance
|
||||
disabled-tags:
|
||||
- experimental
|
||||
|
||||
settings: # settings passed to gocritic
|
||||
captLocal: # must be valid enabled check name
|
||||
paramsOnly: true
|
||||
rangeValCopy:
|
||||
sizeThreshold: 32
|
||||
gocyclo:
|
||||
# minimal code complexity to report, 30 by default (but we recommend 10-20)
|
||||
min-complexity: 50
|
||||
godot:
|
||||
# check all top-level comments, not only declarations
|
||||
check-all: false
|
||||
godox:
|
||||
# report any comments starting with keywords, this is useful for TODO or FIXME comments that
|
||||
# might be left in the code accidentally and should be resolved before merging
|
||||
keywords: # default keywords are TODO, BUG, and FIXME, these can be overwritten by this setting
|
||||
- NOTE
|
||||
- OPTIMIZE # marks code that should be optimized before merging
|
||||
- HACK # marks hack-arounds that should be removed before merging
|
||||
gofmt:
|
||||
# simplify code: gofmt with `-s` option, true by default
|
||||
simplify: true
|
||||
goheader:
|
||||
values:
|
||||
const:
|
||||
# define here const type values in format k:v, for example:
|
||||
# YEAR: 2020
|
||||
# COMPANY: MY COMPANY
|
||||
regexp:
|
||||
# define here regexp type values, for example
|
||||
# AUTHOR: .*@mycompany\.com
|
||||
template:
|
||||
# put here copyright header template for source code files, for example:
|
||||
# {{ AUTHOR }} {{ COMPANY }} {{ YEAR }}
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at:
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
template-path:
|
||||
# also as alternative of directive 'template' you may put the path to file with the template source
|
||||
goimports:
|
||||
# put imports beginning with prefix after 3rd-party packages;
|
||||
# it's a comma-separated list of prefixes
|
||||
local-prefixes: github.com/org/project
|
||||
golint:
|
||||
# minimal confidence for issues, default is 0.8
|
||||
min-confidence: 0.8
|
||||
gomnd:
|
||||
settings:
|
||||
mnd:
|
||||
# the list of enabled checks, see https://github.com/tommy-muehle/go-mnd/#checks for description.
|
||||
checks: argument,case,condition,operation,return,assign
|
||||
gomodguard:
|
||||
allowed:
|
||||
modules: # List of allowed modules
|
||||
# - gopkg.in/yaml.v2
|
||||
domains: # List of allowed module domains
|
||||
# - golang.org
|
||||
blocked:
|
||||
modules: # List of blocked modules
|
||||
# - github.com/uudashr/go-module: # Blocked module
|
||||
# recommendations: # Recommended modules that should be used instead (Optional)
|
||||
# - golang.org/x/mod
|
||||
# reason: "`mod` is the official go.mod parser library." # Reason why the recommended module should be used (Optional)
|
||||
versions: # List of blocked module version constraints
|
||||
# - github.com/mitchellh/go-homedir: # Blocked module with version constraint
|
||||
# version: "< 1.1.0" # Version constraint, see https://github.com/Masterminds/semver#basic-comparisons
|
||||
# reason: "testing if blocked version constraint works." # Reason why the version constraint exists. (Optional)
|
||||
govet:
|
||||
# report about shadowed variables
|
||||
check-shadowing: true
|
||||
|
||||
# settings per analyzer
|
||||
settings:
|
||||
printf: # analyzer name, run `go tool vet help` to see all analyzers
|
||||
funcs: # run `go tool vet help printf` to see available settings for `printf` analyzer
|
||||
- (github.com/golangci/golangci-lint/pkg/logutils.Log).Infof
|
||||
- (github.com/golangci/golangci-lint/pkg/logutils.Log).Warnf
|
||||
- (github.com/golangci/golangci-lint/pkg/logutils.Log).Errorf
|
||||
- (github.com/golangci/golangci-lint/pkg/logutils.Log).Fatalf
|
||||
|
||||
# enable or disable analyzers by name
|
||||
enable:
|
||||
- atomicalign
|
||||
enable-all: false
|
||||
disable:
|
||||
- shadow
|
||||
disable-all: false
|
||||
depguard:
|
||||
list-type: blacklist
|
||||
include-go-root: false
|
||||
packages:
|
||||
# - github.com/sirupsen/logrus
|
||||
packages-with-error-message:
|
||||
# specify an error message to output when a blacklisted package is used
|
||||
# - github.com/sirupsen/logrus: "logging is allowed only by logutils.Log"
|
||||
lll:
|
||||
# max line length, lines longer will be reported. Default is 120.
|
||||
# '\t' is counted as 1 character by default, and can be changed with the tab-width option
|
||||
line-length: 240
|
||||
# tab width in spaces. Default to 1.
|
||||
tab-width: 1
|
||||
maligned:
|
||||
# print struct with more effective memory layout or not, false by default
|
||||
suggest-new: true
|
||||
misspell:
|
||||
# Correct spellings using locale preferences for US or UK.
|
||||
# Default is to use a neutral variety of English.
|
||||
# Setting locale to US will correct the British spelling of 'colour' to 'color'.
|
||||
locale: US
|
||||
ignore-words:
|
||||
- someword
|
||||
nakedret:
|
||||
# make an issue if func has more lines of code than this setting and it has naked returns; default is 30
|
||||
max-func-lines: 30
|
||||
prealloc:
|
||||
# XXX: we don't recommend using this linter before doing performance profiling.
|
||||
# For most programs usage of prealloc will be a premature optimization.
|
||||
|
||||
# Report preallocation suggestions only on simple loops that have no returns/breaks/continues/gotos in them.
|
||||
# True by default.
|
||||
simple: true
|
||||
range-loops: true # Report preallocation suggestions on range loops, true by default
|
||||
for-loops: false # Report preallocation suggestions on for loops, false by default
|
||||
nolintlint:
|
||||
# Enable to ensure that nolint directives are all used. Default is true.
|
||||
allow-unused: false
|
||||
# Disable to ensure that nolint directives don't have a leading space. Default is true.
|
||||
allow-leading-space: true
|
||||
# Exclude following linters from requiring an explanation. Default is [].
|
||||
allow-no-explanation: []
|
||||
# Enable to require an explanation of nonzero length after each nolint directive. Default is false.
|
||||
require-explanation: true
|
||||
# Enable to require nolint directives to mention the specific linter being suppressed. Default is false.
|
||||
require-specific: true
|
||||
rowserrcheck:
|
||||
packages:
|
||||
- github.com/jmoiron/sqlx
|
||||
testpackage:
|
||||
# regexp pattern to skip files
|
||||
skip-regexp: (export|internal)_test\.go
|
||||
unparam:
|
||||
# Inspect exported functions, default is false. Set to true if no external program/library imports your code.
|
||||
# XXX: if you enable this setting, unparam will report a lot of false-positives in text editors:
|
||||
# if it's called for subdir of a project it can't find external interfaces. All text editor integrations
|
||||
# with golangci-lint call it on a directory with the changed file.
|
||||
check-exported: false
|
||||
unused:
|
||||
# treat code as a program (not a library) and report unused exported identifiers; default is false.
|
||||
# XXX: if you enable this setting, unused will report a lot of false-positives in text editors:
|
||||
# if it's called for subdir of a project it can't find funcs usages. All text editor integrations
|
||||
# with golangci-lint call it on a directory with the changed file.
|
||||
check-exported: false
|
||||
whitespace:
|
||||
multi-if: false # Enforces newlines (or comments) after every multi-line if statement
|
||||
multi-func: false # Enforces newlines (or comments) after every multi-line function signature
|
||||
wsl:
|
||||
# If true append is only allowed to be cuddled if appending value is
|
||||
# matching variables, fields or types on line above. Default is true.
|
||||
strict-append: true
|
||||
# Allow calls and assignments to be cuddled as long as the lines have any
|
||||
# matching variables, fields or types. Default is true.
|
||||
allow-assign-and-call: true
|
||||
# Allow multiline assignments to be cuddled. Default is true.
|
||||
allow-multiline-assign: true
|
||||
# Allow declarations (var) to be cuddled.
|
||||
allow-cuddle-declarations: true
|
||||
# Allow trailing comments in ending of blocks
|
||||
allow-trailing-comment: false
|
||||
# Force newlines in end of case at this limit (0 = never).
|
||||
force-case-trailing-whitespace: 0
|
||||
# Force cuddling of err checks with err var assignment
|
||||
force-err-cuddling: false
|
||||
# Allow leading comments to be separated with empty liens
|
||||
allow-separated-leading-comment: false
|
||||
gofumpt:
|
||||
# Choose whether or not to use the extra rules that are disabled
|
||||
# by default
|
||||
extra-rules: false
|
||||
|
||||
# The custom section can be used to define linter plugins to be loaded at runtime. See README doc
|
||||
# for more info.
|
||||
#custom:
|
||||
# Each custom linter should have a unique name.
|
||||
#example:
|
||||
# The path to the plugin *.so. Can be absolute or local. Required for each custom linter
|
||||
#path: /path/to/example.so
|
||||
# The description of the linter. Optional, just for documentation purposes.
|
||||
#description: This is an example usage of a plugin linter.
|
||||
# Intended to point to the repo location of the linter. Optional, just for documentation purposes.
|
||||
#original-url: github.com/golangci/example-linter
|
||||
|
||||
linters:
|
||||
fast: false
|
||||
enable-all: true
|
||||
disable:
|
||||
- gochecknoinits
|
||||
- gochecknoglobals
|
||||
- wsl
|
||||
- golint
|
||||
- gocritic
|
||||
- stylecheck
|
||||
- whitespace
|
||||
|
||||
|
||||
issues:
|
||||
# List of regexps of issue texts to exclude, empty list by default.
|
||||
# But independently from this option we use default exclude patterns,
|
||||
# it can be disabled by `exclude-use-default: false`. To list all
|
||||
# excluded by default patterns execute `golangci-lint run --help`
|
||||
exclude:
|
||||
- .*test.*\.go
|
||||
|
||||
|
||||
# Excluding configuration per-path, per-linter, per-text and per-source
|
||||
exclude-rules:
|
||||
# Exclude some linters from running on tests files.
|
||||
- path: _test\.go
|
||||
linters:
|
||||
- gocyclo
|
||||
- errcheck
|
||||
- dupl
|
||||
- gosec
|
||||
|
||||
# Exclude known linters from partially hard-vendored code,
|
||||
# which is impossible to exclude via "nolint" comments.
|
||||
- path: internal/hmac/
|
||||
text: "weak cryptographic primitive"
|
||||
linters:
|
||||
- gosec
|
||||
|
||||
# Exclude some staticcheck messages
|
||||
- linters:
|
||||
- staticcheck
|
||||
text: "SA9003:"
|
||||
|
||||
# Exclude lll issues for long lines with go:generate
|
||||
- linters:
|
||||
- lll
|
||||
source: "^//go:generate "
|
||||
|
||||
# Independently from option `exclude` we use default exclude patterns,
|
||||
# it can be disabled by this option. To list all
|
||||
# excluded by default patterns execute `golangci-lint run --help`.
|
||||
# Default value for this option is true.
|
||||
exclude-use-default: false
|
||||
|
||||
# The default value is false. If set to true exclude and exclude-rules
|
||||
# regular expressions become case sensitive.
|
||||
exclude-case-sensitive: false
|
||||
|
||||
# The list of ids of default excludes to include or disable. By default it's empty.
|
||||
include:
|
||||
- EXC0002 # disable excluding of issues about comments from golint
|
||||
|
||||
# Maximum issues count per one linter. Set to 0 to disable. Default is 50.
|
||||
max-issues-per-linter: 0
|
||||
|
||||
# Maximum count of issues with the same text. Set to 0 to disable. Default is 3.
|
||||
max-same-issues: 0
|
||||
|
||||
# Show only new issues: if there are unstaged changes or untracked files,
|
||||
# only those changes are analyzed, else only changes in HEAD~ are analyzed.
|
||||
# It's a super-useful option for integration of golangci-lint into existing
|
||||
# large codebase. It's not practical to fix all existing issues at the moment
|
||||
# of integration: much better don't allow issues in new code.
|
||||
# Default is false.
|
||||
new: false
|
||||
|
||||
# Show only new issues created after git revision `REV`
|
||||
#new-from-rev: REV
|
||||
|
||||
# Show only new issues created in git patch with set file path.
|
||||
#new-from-patch: path/to/patch/file
|
||||
|
||||
severity:
|
||||
# Default value is empty string.
|
||||
# Set the default severity for issues. If severity rules are defined and the issues
|
||||
# do not match or no severity is provided to the rule this will be the default
|
||||
# severity applied. Severities should match the supported severity names of the
|
||||
# selected out format.
|
||||
# - Code climate: https://docs.codeclimate.com/docs/issues#issue-severity
|
||||
# - Checkstyle: https://checkstyle.sourceforge.io/property_types.html#severity
|
||||
# - Github: https://help.github.com/en/actions/reference/workflow-commands-for-github-actions#setting-an-error-message
|
||||
default-severity: error
|
||||
|
||||
# The default value is false.
|
||||
# If set to true severity-rules regular expressions become case sensitive.
|
||||
case-sensitive: false
|
||||
|
||||
# Default value is empty list.
|
||||
# When a list of severity rules are provided, severity information will be added to lint
|
||||
# issues. Severity rules have the same filtering capability as exclude rules except you
|
||||
# are allowed to specify one matcher per severity rule.
|
||||
# Only affects out formats that support setting severity information.
|
||||
rules:
|
||||
- linters:
|
||||
- dupl
|
||||
severity: info
|
@@ -34,8 +34,15 @@ const (
|
||||
IO_COPY
|
||||
)
|
||||
|
||||
var isCodeError = false
|
||||
|
||||
func IsCodeError() bool {
|
||||
return isCodeError
|
||||
}
|
||||
|
||||
func init() {
|
||||
errors.RegisterFctMessage(getMessage)
|
||||
isCodeError = errors.ExistInMapMessage(EMPTY_PARAMS)
|
||||
errors.RegisterIdFctMessage(EMPTY_PARAMS, getMessage)
|
||||
}
|
||||
|
||||
func getMessage(code errors.CodeError) (message string) {
|
||||
|
@@ -34,8 +34,15 @@ const (
|
||||
FILE_OPEN
|
||||
)
|
||||
|
||||
var isCodeError = false
|
||||
|
||||
func IsCodeError() bool {
|
||||
return isCodeError
|
||||
}
|
||||
|
||||
func init() {
|
||||
errors.RegisterFctMessage(getMessage)
|
||||
isCodeError = errors.ExistInMapMessage(EMPTY_PARAMS)
|
||||
errors.RegisterIdFctMessage(EMPTY_PARAMS, getMessage)
|
||||
}
|
||||
|
||||
func getMessage(code errors.CodeError) (message string) {
|
||||
|
@@ -35,8 +35,15 @@ const (
|
||||
IO_COPY
|
||||
)
|
||||
|
||||
var isCodeError = false
|
||||
|
||||
func IsCodeError() bool {
|
||||
return isCodeError
|
||||
}
|
||||
|
||||
func init() {
|
||||
errors.RegisterFctMessage(getMessage)
|
||||
isCodeError = errors.ExistInMapMessage(EMPTY_PARAMS)
|
||||
errors.RegisterIdFctMessage(EMPTY_PARAMS, getMessage)
|
||||
}
|
||||
|
||||
func getMessage(code errors.CodeError) (message string) {
|
||||
|
@@ -48,7 +48,9 @@ func GetFile(src *os.File, filenameContain, filenameRegex string) (dst *os.File,
|
||||
return nil, GZ_READER.ErrorParent(e)
|
||||
}
|
||||
|
||||
defer r.Close()
|
||||
defer func() {
|
||||
_ = r.Close()
|
||||
}()
|
||||
|
||||
// #nosec
|
||||
if t, e := iou.NewTempFile(); e != nil {
|
||||
|
@@ -35,8 +35,15 @@ const (
|
||||
IO_COPY
|
||||
)
|
||||
|
||||
var isCodeError = false
|
||||
|
||||
func IsCodeError() bool {
|
||||
return isCodeError
|
||||
}
|
||||
|
||||
func init() {
|
||||
errors.RegisterFctMessage(getMessage)
|
||||
isCodeError = errors.ExistInMapMessage(EMPTY_PARAMS)
|
||||
errors.RegisterIdFctMessage(EMPTY_PARAMS, getMessage)
|
||||
}
|
||||
|
||||
func getMessage(code errors.CodeError) (message string) {
|
||||
|
@@ -48,7 +48,6 @@ func GetFile(src *os.File, filenameContain, filenameRegex string) (dst *os.File,
|
||||
|
||||
for {
|
||||
h, e := r.Next()
|
||||
|
||||
if e != nil && e == io.EOF {
|
||||
return nil, nil
|
||||
} else if e != nil {
|
||||
|
@@ -37,8 +37,15 @@ const (
|
||||
ZIP_OPEN
|
||||
)
|
||||
|
||||
var isCodeError = false
|
||||
|
||||
func IsCodeError() bool {
|
||||
return isCodeError
|
||||
}
|
||||
|
||||
func init() {
|
||||
errors.RegisterFctMessage(getMessage)
|
||||
isCodeError = errors.ExistInMapMessage(EMPTY_PARAMS)
|
||||
errors.RegisterIdFctMessage(EMPTY_PARAMS, getMessage)
|
||||
}
|
||||
|
||||
func getMessage(code errors.CodeError) (message string) {
|
||||
|
@@ -37,8 +37,15 @@ const (
|
||||
CERT_PARSE_KEYPAIR
|
||||
)
|
||||
|
||||
var isCodeError = false
|
||||
|
||||
func IsCodeError() bool {
|
||||
return isCodeError
|
||||
}
|
||||
|
||||
func init() {
|
||||
errors.RegisterFctMessage(getMessage)
|
||||
isCodeError = errors.ExistInMapMessage(EMPTY_PARAMS)
|
||||
errors.RegisterIdFctMessage(EMPTY_PARAMS, getMessage)
|
||||
}
|
||||
|
||||
func getMessage(code errors.CodeError) (message string) {
|
||||
|
@@ -123,6 +123,13 @@ func (c colorType) Printf(format string, args ...interface{}) {
|
||||
c.Print(fmt.Sprintf(format, args...))
|
||||
}
|
||||
|
||||
func (c colorType) PrintfLn(format string, args ...interface{}) {
|
||||
func (c colorType) PrintLnf(format string, args ...interface{}) {
|
||||
c.Println(fmt.Sprintf(format, args...))
|
||||
}
|
||||
|
||||
// @TODO; removing function
|
||||
// deprecated
|
||||
// nolint: goprintffuncname
|
||||
func (c colorType) PrintfLn(format string, args ...interface{}) {
|
||||
c.PrintLnf(format, args...)
|
||||
}
|
||||
|
@@ -35,8 +35,15 @@ const (
|
||||
COLOR_BUFF_UNDEFINED
|
||||
)
|
||||
|
||||
var isCodeError = false
|
||||
|
||||
func IsCodeError() bool {
|
||||
return isCodeError
|
||||
}
|
||||
|
||||
func init() {
|
||||
errors.RegisterFctMessage(getMessage)
|
||||
isCodeError = errors.ExistInMapMessage(EMPTY_PARAMS)
|
||||
errors.RegisterIdFctMessage(EMPTY_PARAMS, getMessage)
|
||||
}
|
||||
|
||||
func getMessage(code errors.CodeError) (message string) {
|
||||
|
@@ -45,6 +45,13 @@ func PadRight(str string, len int, pad string) string {
|
||||
return str + padTimes(pad, len-utf8.RuneCountInString(str))
|
||||
}
|
||||
|
||||
func PrintTab(tablLevel int, format string, args ...interface{}) {
|
||||
func PrintTabf(tablLevel int, format string, args ...interface{}) {
|
||||
ColorPrint.Printf(strings.Repeat(" ", tablLevel)+format, args...)
|
||||
}
|
||||
|
||||
// @TODO : remove function
|
||||
// deprecated: replaced by PrintTabf
|
||||
// nolint: goprintffuncname
|
||||
func PrintTab(tablLevel int, format string, args ...interface{}) {
|
||||
PrintTabf(tablLevel, format, args...)
|
||||
}
|
||||
|
@@ -40,8 +40,15 @@ const (
|
||||
AES_DECRYPT
|
||||
)
|
||||
|
||||
var isCodeError = false
|
||||
|
||||
func IsCodeError() bool {
|
||||
return isCodeError
|
||||
}
|
||||
|
||||
func init() {
|
||||
errors.RegisterFctMessage(getMessage)
|
||||
isCodeError = errors.ExistInMapMessage(EMPTY_PARAMS)
|
||||
errors.RegisterIdFctMessage(EMPTY_PARAMS, getMessage)
|
||||
}
|
||||
|
||||
func getMessage(code errors.CodeError) (message string) {
|
||||
|
@@ -27,10 +27,11 @@
|
||||
package errors
|
||||
|
||||
import (
|
||||
"sort"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
var msgfct = make([]Message, 0)
|
||||
var idMsgFct = make(map[CodeError]Message)
|
||||
|
||||
type Message func(code CodeError) (message string)
|
||||
type CodeError uint16
|
||||
@@ -55,9 +56,8 @@ func (c CodeError) GetMessage() string {
|
||||
return UNK_MESSAGE
|
||||
}
|
||||
|
||||
for _, f := range msgfct {
|
||||
m := f(c)
|
||||
if m != "" {
|
||||
if f, ok := idMsgFct[findCodeErrorInMapMessage(c)]; ok {
|
||||
if m := f(c); m != "" {
|
||||
return m
|
||||
}
|
||||
}
|
||||
@@ -83,6 +83,62 @@ func (c CodeError) Iferror(e error) Error {
|
||||
return NewErrorIferror(c.GetUint16(), c.GetMessage(), e)
|
||||
}
|
||||
|
||||
func RegisterFctMessage(fct Message) {
|
||||
msgfct = append(msgfct, fct)
|
||||
func RegisterIdFctMessage(minCode CodeError, fct Message) {
|
||||
if idMsgFct == nil {
|
||||
idMsgFct = make(map[CodeError]Message)
|
||||
}
|
||||
|
||||
idMsgFct[minCode] = fct
|
||||
orderMapMessage()
|
||||
}
|
||||
|
||||
func ExistInMapMessage(code CodeError) bool {
|
||||
if f, ok := idMsgFct[findCodeErrorInMapMessage(code)]; ok {
|
||||
if m := f(code); m != "" {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
func getMapMessageKey() []CodeError {
|
||||
var (
|
||||
keys = make([]int, 0)
|
||||
res = make([]CodeError, 0)
|
||||
)
|
||||
|
||||
for k := range idMsgFct {
|
||||
keys = append(keys, int(k.GetUint16()))
|
||||
}
|
||||
|
||||
sort.Ints(keys)
|
||||
|
||||
for _, k := range keys {
|
||||
res = append(res, CodeError(k))
|
||||
}
|
||||
|
||||
return res
|
||||
}
|
||||
|
||||
func orderMapMessage() {
|
||||
var res = make(map[CodeError]Message)
|
||||
|
||||
for _, k := range getMapMessageKey() {
|
||||
res[k] = idMsgFct[k]
|
||||
}
|
||||
|
||||
idMsgFct = res
|
||||
}
|
||||
|
||||
func findCodeErrorInMapMessage(code CodeError) CodeError {
|
||||
var res CodeError = 0
|
||||
|
||||
for _, k := range getMapMessageKey() {
|
||||
if k <= code && k > res {
|
||||
res = k
|
||||
}
|
||||
}
|
||||
|
||||
return res
|
||||
}
|
||||
|
@@ -26,7 +26,7 @@
|
||||
|
||||
package errors
|
||||
|
||||
var modeError = ERROR_RETURN_Default
|
||||
var modeError = Default
|
||||
|
||||
func SetModeReturnError(mode ErrorMode) {
|
||||
modeError = mode
|
||||
@@ -39,34 +39,34 @@ func GetModeReturnError() ErrorMode {
|
||||
type ErrorMode uint8
|
||||
|
||||
const (
|
||||
ERROR_RETURN_Default ErrorMode = iota
|
||||
ERROR_RETURN_Code
|
||||
ERROR_RETURN_CodeFull
|
||||
ERROR_RETURN_CodeError
|
||||
ERROR_RETURN_CodeErrorFull
|
||||
ERROR_RETURN_CodeErrorTrace
|
||||
ERROR_RETURN_CodeErrorTraceFull
|
||||
ERROR_RETURN_StringError
|
||||
ERROR_RETURN_StringErrorFull
|
||||
Default ErrorMode = iota
|
||||
ErrorReturnCode
|
||||
ErrorReturnCodeFull
|
||||
ErrorReturnCodeError
|
||||
ErrorReturnCodeErrorFull
|
||||
ErrorReturnCodeErrorTrace
|
||||
ErrorReturnCodeErrorTraceFull
|
||||
ErrorReturnStringError
|
||||
ErrorReturnStringErrorFull
|
||||
)
|
||||
|
||||
func (m ErrorMode) String() string {
|
||||
switch m {
|
||||
case ERROR_RETURN_Code:
|
||||
case ErrorReturnCode:
|
||||
return "Code"
|
||||
case ERROR_RETURN_CodeFull:
|
||||
case ErrorReturnCodeFull:
|
||||
return "CodeFull"
|
||||
case ERROR_RETURN_CodeError:
|
||||
case ErrorReturnCodeError:
|
||||
return "CodeError"
|
||||
case ERROR_RETURN_CodeErrorFull:
|
||||
case ErrorReturnCodeErrorFull:
|
||||
return "CodeErrorFull"
|
||||
case ERROR_RETURN_CodeErrorTrace:
|
||||
case ErrorReturnCodeErrorTrace:
|
||||
return "CodeErrorTrace"
|
||||
case ERROR_RETURN_CodeErrorTraceFull:
|
||||
case ErrorReturnCodeErrorTraceFull:
|
||||
return "CodeErrorTraceFull"
|
||||
case ERROR_RETURN_StringError:
|
||||
case ErrorReturnStringError:
|
||||
return "StringError"
|
||||
case ERROR_RETURN_StringErrorFull:
|
||||
case ErrorReturnStringErrorFull:
|
||||
return "StringErrorFull"
|
||||
|
||||
default:
|
||||
@@ -76,21 +76,21 @@ func (m ErrorMode) String() string {
|
||||
|
||||
func (m ErrorMode) error(e *errors) string {
|
||||
switch m {
|
||||
case ERROR_RETURN_Code:
|
||||
case ErrorReturnCode:
|
||||
return e.Code()
|
||||
case ERROR_RETURN_CodeFull:
|
||||
case ErrorReturnCodeFull:
|
||||
return e.CodeFull("")
|
||||
case ERROR_RETURN_CodeError:
|
||||
case ErrorReturnCodeError:
|
||||
return e.CodeError("")
|
||||
case ERROR_RETURN_CodeErrorFull:
|
||||
case ErrorReturnCodeErrorFull:
|
||||
return e.CodeErrorFull("", "")
|
||||
case ERROR_RETURN_CodeErrorTrace:
|
||||
case ErrorReturnCodeErrorTrace:
|
||||
return e.CodeErrorTrace("")
|
||||
case ERROR_RETURN_CodeErrorTraceFull:
|
||||
case ErrorReturnCodeErrorTraceFull:
|
||||
return e.CodeErrorTraceFull("", "")
|
||||
case ERROR_RETURN_StringError:
|
||||
case ErrorReturnStringError:
|
||||
return e.StringError()
|
||||
case ERROR_RETURN_StringErrorFull:
|
||||
case ErrorReturnStringErrorFull:
|
||||
return e.StringErrorFull("")
|
||||
|
||||
default:
|
||||
|
@@ -71,7 +71,6 @@ func getClient(http2Transport bool, GlobalTimeout, DialTimeOut, DialKeepAlive, I
|
||||
Timeout: DialTimeOut,
|
||||
KeepAlive: DialKeepAlive,
|
||||
}).DialContext,
|
||||
MaxIdleConns: 100,
|
||||
IdleConnTimeout: IdleConnTimeout,
|
||||
TLSHandshakeTimeout: TLSHandshakeTimeout,
|
||||
ExpectContinueTimeout: ExpectContinueTimeout,
|
||||
|
@@ -39,8 +39,15 @@ const (
|
||||
HTTP2_CONFIGURE
|
||||
)
|
||||
|
||||
var isCodeError = false
|
||||
|
||||
func IsCodeError() bool {
|
||||
return isCodeError
|
||||
}
|
||||
|
||||
func init() {
|
||||
errors.RegisterFctMessage(getMessage)
|
||||
isCodeError = errors.ExistInMapMessage(EMPTY_PARAMS)
|
||||
errors.RegisterIdFctMessage(EMPTY_PARAMS, getMessage)
|
||||
}
|
||||
|
||||
func getMessage(code errors.CodeError) (message string) {
|
||||
|
@@ -85,7 +85,13 @@ func (obj *httpClient) Check() Error {
|
||||
return e
|
||||
}
|
||||
|
||||
_, e = obj.doRequest(req)
|
||||
var r *http.Response
|
||||
|
||||
r, e = obj.doRequest(req)
|
||||
|
||||
if r != nil && r.Body != nil {
|
||||
_ = r.Body.Close()
|
||||
}
|
||||
|
||||
return e
|
||||
}
|
||||
|
@@ -32,8 +32,15 @@ const (
|
||||
EMPTY_PARAMS errors.CodeError = iota + errors.MIN_PKG_Httpserver
|
||||
)
|
||||
|
||||
var isCodeError = false
|
||||
|
||||
func IsCodeError() bool {
|
||||
return isCodeError
|
||||
}
|
||||
|
||||
func init() {
|
||||
errors.RegisterFctMessage(getMessage)
|
||||
isCodeError = errors.ExistInMapMessage(EMPTY_PARAMS)
|
||||
errors.RegisterIdFctMessage(EMPTY_PARAMS, getMessage)
|
||||
}
|
||||
|
||||
func getMessage(code errors.CodeError) (message string) {
|
||||
|
@@ -246,7 +246,7 @@ func (srv *modelServer) Restart() {
|
||||
func (srv *modelServer) Shutdown() {
|
||||
InfoLevel.Logf("Shutdown Server '%s'...", srv.addr.Host)
|
||||
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
||||
ctx, cancel := context.WithTimeout(context.Background(), TIMEOUT_10_SEC)
|
||||
defer cancel()
|
||||
|
||||
if srv.srv == nil {
|
||||
|
@@ -37,8 +37,15 @@ const (
|
||||
IO_TEMP_FILE_REMOVE
|
||||
)
|
||||
|
||||
var isCodeError = false
|
||||
|
||||
func IsCodeError() bool {
|
||||
return isCodeError
|
||||
}
|
||||
|
||||
func init() {
|
||||
errors.RegisterFctMessage(getMessage)
|
||||
isCodeError = errors.ExistInMapMessage(EMPTY_PARAMS)
|
||||
errors.RegisterIdFctMessage(EMPTY_PARAMS, getMessage)
|
||||
}
|
||||
|
||||
func getMessage(code errors.CodeError) (message string) {
|
||||
|
@@ -39,35 +39,35 @@ func NewIOWrapper(ioInput interface{}) *IOWrapper {
|
||||
}
|
||||
}
|
||||
|
||||
func (I *IOWrapper) SetWrapper(read func(p []byte) []byte, write func(p []byte) []byte) {
|
||||
func (w *IOWrapper) SetWrapper(read func(p []byte) []byte, write func(p []byte) []byte) {
|
||||
if read != nil {
|
||||
I.read = read
|
||||
w.read = read
|
||||
}
|
||||
if write != nil {
|
||||
I.write = write
|
||||
w.write = write
|
||||
}
|
||||
}
|
||||
|
||||
func (I IOWrapper) Read(p []byte) (n int, err error) {
|
||||
if I.read != nil {
|
||||
return I.iow.(io.Reader).Read(I.read(p))
|
||||
func (w IOWrapper) Read(p []byte) (n int, err error) {
|
||||
if w.read != nil {
|
||||
return w.iow.(io.Reader).Read(w.read(p))
|
||||
}
|
||||
|
||||
return I.iow.(io.Reader).Read(p)
|
||||
return w.iow.(io.Reader).Read(p)
|
||||
}
|
||||
|
||||
func (I IOWrapper) Write(p []byte) (n int, err error) {
|
||||
if I.write != nil {
|
||||
return I.iow.(io.Writer).Write(I.write(p))
|
||||
func (w IOWrapper) Write(p []byte) (n int, err error) {
|
||||
if w.write != nil {
|
||||
return w.iow.(io.Writer).Write(w.write(p))
|
||||
}
|
||||
|
||||
return I.iow.(io.Writer).Write(p)
|
||||
return w.iow.(io.Writer).Write(p)
|
||||
}
|
||||
|
||||
func (I IOWrapper) Seek(offset int64, whence int) (int64, error) {
|
||||
return I.iow.(io.Seeker).Seek(offset, whence)
|
||||
func (w IOWrapper) Seek(offset int64, whence int) (int64, error) {
|
||||
return w.iow.(io.Seeker).Seek(offset, whence)
|
||||
}
|
||||
|
||||
func (I IOWrapper) Close() error {
|
||||
return I.iow.(io.Closer).Close()
|
||||
func (w IOWrapper) Close() error {
|
||||
return w.iow.(io.Closer).Close()
|
||||
}
|
||||
|
@@ -40,8 +40,15 @@ const (
|
||||
LDAP_USER_NOT_FOUND
|
||||
)
|
||||
|
||||
var isCodeError = false
|
||||
|
||||
func IsCodeError() bool {
|
||||
return isCodeError
|
||||
}
|
||||
|
||||
func init() {
|
||||
errors.RegisterFctMessage(getMessage)
|
||||
isCodeError = errors.ExistInMapMessage(EMPTY_PARAMS)
|
||||
errors.RegisterIdFctMessage(EMPTY_PARAMS, getMessage)
|
||||
}
|
||||
|
||||
func getMessage(code errors.CodeError) (message string) {
|
||||
|
@@ -218,7 +218,7 @@ func (level Level) Logf(format string, args ...interface{}) {
|
||||
// LogData Simple function to log directly the given message with given data with the attached log Level
|
||||
/*
|
||||
message a string message to be logged with the attached log Level
|
||||
data an interface of data to be logged with the message. (In Text format, the data will be json marshalled)
|
||||
data an interface of data to be logged with the message. (In Text format, the data will be json marshaled)
|
||||
*/
|
||||
func (level Level) LogData(message string, data interface{}) {
|
||||
level.logDetails(message, data, nil, nil)
|
||||
|
@@ -35,9 +35,10 @@ const (
|
||||
// If we have 93 chars, that means 7 bits code a letter index.
|
||||
// So 63 random bits can designate 63/7 = 9 different letter indices.
|
||||
// Let's use all those 10
|
||||
letterIdxBits = 7 // 6 bits to represent a letter index
|
||||
letterIdxMask = 1<<letterIdxBits - 1 // All 1-bits, as many as letterIdxBits
|
||||
letterIdxMax = 63 / letterIdxBits // # of letter indices fitting in 63 bits
|
||||
letterIdxBits = 7 // 6 bits to represent a letter index
|
||||
letterIdxMask = 1<<letterIdxBits - 1 // All 1-bits, as many as letterIdxBits
|
||||
letterIdxMax = 63 / letterIdxBits // # of letter indices fitting in 63 bits
|
||||
loopRandMaxLen = 10
|
||||
)
|
||||
|
||||
var src = rand.NewSource(time.Now().UnixNano())
|
||||
@@ -64,11 +65,13 @@ func randStringBytesMaskImprSrc(n int) string {
|
||||
return string(b)
|
||||
}
|
||||
|
||||
// Generate Generate a random string could be used as password.
|
||||
//The len is defined by given 'n' parameters
|
||||
func Generate(n int) string {
|
||||
if n > 10 {
|
||||
if n > loopRandMaxLen {
|
||||
var s = ""
|
||||
for i := n; i > 0; i -= 10 {
|
||||
s += randStringBytesMaskImprSrc(10)
|
||||
for i := n; i > 0; i -= loopRandMaxLen {
|
||||
s += randStringBytesMaskImprSrc(loopRandMaxLen)
|
||||
}
|
||||
return s[0 : n-1]
|
||||
}
|
||||
|
@@ -121,6 +121,7 @@ func (p progressBar) NewBarSimpleETA(name string) Bar {
|
||||
decor.Name(name, decor.WC{W: len(name) + 1, C: decor.DidentRight}),
|
||||
// replace ETA decorator with "done" message, OnComplete event
|
||||
decor.OnComplete(
|
||||
// nolint: gomnd
|
||||
decor.AverageETA(decor.ET_STYLE_GO, decor.WC{W: 4}), defaultMessageDone,
|
||||
),
|
||||
),
|
||||
@@ -142,6 +143,7 @@ func (p progressBar) NewBarSimpleCounter(name string, total int64) Bar {
|
||||
decor.CountersNoUnit("[%d / %d] ", decor.WCSyncWidth),
|
||||
// replace ETA decorator with "done" message, OnComplete event
|
||||
decor.OnComplete(
|
||||
// nolint: gomnd
|
||||
decor.AverageETA(decor.ET_STYLE_GO, decor.WC{W: 4}), defaultMessageDone,
|
||||
),
|
||||
),
|
||||
|
@@ -37,8 +37,15 @@ const (
|
||||
HEADER_AUTH_ERROR
|
||||
)
|
||||
|
||||
var isCodeError = false
|
||||
|
||||
func IsCodeError() bool {
|
||||
return isCodeError
|
||||
}
|
||||
|
||||
func init() {
|
||||
errors.RegisterFctMessage(getMessage)
|
||||
isCodeError = errors.ExistInMapMessage(EMPTY_PARAMS)
|
||||
errors.RegisterIdFctMessage(EMPTY_PARAMS, getMessage)
|
||||
}
|
||||
|
||||
func getMessage(code errors.CodeError) (message string) {
|
||||
|
@@ -34,8 +34,15 @@ const (
|
||||
WAITALL
|
||||
)
|
||||
|
||||
var isCodeError = false
|
||||
|
||||
func IsCodeError() bool {
|
||||
return isCodeError
|
||||
}
|
||||
|
||||
func init() {
|
||||
errors.RegisterFctMessage(getMessage)
|
||||
isCodeError = errors.ExistInMapMessage(EMPTY_PARAMS)
|
||||
errors.RegisterIdFctMessage(EMPTY_PARAMS, getMessage)
|
||||
}
|
||||
|
||||
func getMessage(code errors.CodeError) (message string) {
|
||||
|
@@ -142,6 +142,7 @@ func (n NETMode) string() string {
|
||||
}
|
||||
|
||||
// ParseDSN parses the DSN string to a Config
|
||||
// nolint: gocognit
|
||||
func newSMTPConfig(dsn string) (*smtpConfig, Error) {
|
||||
var (
|
||||
smtpcnf = &smtpConfig{
|
||||
@@ -413,31 +414,31 @@ func (s smtpClient) GetDsn() string {
|
||||
|
||||
// [username[:password]@]
|
||||
if len(s.cfg.User) > 0 {
|
||||
buf.WriteString(s.cfg.User)
|
||||
_, _ = buf.WriteString(s.cfg.User)
|
||||
if len(s.cfg.Pass) > 0 {
|
||||
buf.WriteByte(':')
|
||||
buf.WriteString(s.cfg.Pass)
|
||||
_ = buf.WriteByte(':')
|
||||
_, _ = buf.WriteString(s.cfg.Pass)
|
||||
}
|
||||
buf.WriteByte('@')
|
||||
_ = buf.WriteByte('@')
|
||||
}
|
||||
|
||||
// [protocol[(address)]]
|
||||
buf.WriteString(s.cfg.Net.string())
|
||||
_, _ = buf.WriteString(s.cfg.Net.string())
|
||||
|
||||
// [username[:password]@]
|
||||
if len(s.cfg.Host) > 0 {
|
||||
buf.WriteByte('(')
|
||||
buf.WriteString(s.cfg.Host)
|
||||
_ = buf.WriteByte('(')
|
||||
_, _ = buf.WriteString(s.cfg.Host)
|
||||
if s.cfg.Port > 0 {
|
||||
buf.WriteByte(':')
|
||||
buf.WriteString(fmt.Sprintf("%d", s.cfg.Port))
|
||||
_ = buf.WriteByte(':')
|
||||
_, _ = buf.WriteString(fmt.Sprintf("%d", s.cfg.Port))
|
||||
}
|
||||
buf.WriteByte(')')
|
||||
_ = buf.WriteByte(')')
|
||||
}
|
||||
|
||||
// /tlsmode
|
||||
buf.WriteByte('/')
|
||||
buf.WriteString(s.cfg.TLS.string())
|
||||
_ = buf.WriteByte('/')
|
||||
_, _ = buf.WriteString(s.cfg.TLS.string())
|
||||
|
||||
// [?param1=value1&...¶mN=valueN]
|
||||
var val = &url.Values{}
|
||||
@@ -452,8 +453,9 @@ func (s smtpClient) GetDsn() string {
|
||||
|
||||
params := val.Encode()
|
||||
|
||||
// nolint: gomnd
|
||||
if len(params) > 2 {
|
||||
buf.WriteString("?" + params)
|
||||
_, _ = buf.WriteString("?" + params)
|
||||
}
|
||||
|
||||
return buf.String()
|
||||
|
@@ -65,8 +65,15 @@ const (
|
||||
TEMPLATE_HTML2TEXT
|
||||
)
|
||||
|
||||
var isCodeError = false
|
||||
|
||||
func IsCodeError() bool {
|
||||
return isCodeError
|
||||
}
|
||||
|
||||
func init() {
|
||||
errors.RegisterFctMessage(getMessage)
|
||||
isCodeError = errors.ExistInMapMessage(EMPTY_PARAMS)
|
||||
errors.RegisterIdFctMessage(EMPTY_PARAMS, getMessage)
|
||||
}
|
||||
|
||||
func getMessage(code errors.CodeError) (message string) {
|
||||
|
@@ -260,7 +260,7 @@ func (i *ioData) AttachmentAddBody(m MailTemplate, ct ContentType) Error {
|
||||
b := make([]byte, base64.StdEncoding.EncodedLen(p.Len()))
|
||||
base64.StdEncoding.Encode(b, p.Bytes())
|
||||
p.Reset()
|
||||
p.Write(b)
|
||||
_, _ = p.Write(b)
|
||||
|
||||
if e = i.BoundaryPart(); e != nil {
|
||||
return e
|
||||
|
@@ -36,23 +36,24 @@ import (
|
||||
. "github.com/nabbar/golib/errors"
|
||||
)
|
||||
|
||||
type sendmail struct {
|
||||
to ListMailAddress
|
||||
cc ListMailAddress
|
||||
bcc ListMailAddress
|
||||
from MailAddress
|
||||
replyTo MailAddress
|
||||
const (
|
||||
ADDRESS_MIN_SIZE = 7
|
||||
)
|
||||
|
||||
subject string
|
||||
type sendmail struct {
|
||||
attachment []Attachment
|
||||
bcc ListMailAddress
|
||||
cc ListMailAddress
|
||||
from MailAddress
|
||||
messageId string
|
||||
mailer string
|
||||
msgHtml MailTemplate
|
||||
replyTo MailAddress
|
||||
subject string
|
||||
to ListMailAddress
|
||||
msgText *bytes.Buffer
|
||||
forceType ContentType
|
||||
attachment []Attachment
|
||||
|
||||
messageId string
|
||||
mailer string
|
||||
|
||||
testMode bool
|
||||
testMode bool
|
||||
}
|
||||
|
||||
func (s sendmail) GetToString() string {
|
||||
@@ -233,6 +234,7 @@ func (s sendmail) SendSMTP(cli SMTP) (err Error, buff *bytes.Buffer) {
|
||||
}
|
||||
}
|
||||
|
||||
// nolint: gocognit, gocyclo
|
||||
func (s sendmail) Send(cli *smtp.Client) (err Error, buff *bytes.Buffer) {
|
||||
var (
|
||||
iod IOData
|
||||
@@ -266,7 +268,7 @@ func (s sendmail) Send(cli *smtp.Client) (err Error, buff *bytes.Buffer) {
|
||||
return SMTP_CLIENT_EMPTY.Error(nil), nil
|
||||
}
|
||||
|
||||
if len(s.from.AddressOnly()) < 7 {
|
||||
if len(s.from.AddressOnly()) < ADDRESS_MIN_SIZE {
|
||||
return SMTP_CLIENT_FROM_EMPTY.Error(nil), nil
|
||||
}
|
||||
|
||||
@@ -359,10 +361,8 @@ func (s sendmail) Send(cli *smtp.Client) (err Error, buff *bytes.Buffer) {
|
||||
|
||||
if len(s.mailer) < 1 {
|
||||
return SMTP_CLIENT_MAILER_EMPTY.Error(nil), nil
|
||||
} else {
|
||||
if err = iod.Header("X-Mailer", s.mailer); err != nil {
|
||||
return
|
||||
}
|
||||
} else if err = iod.Header("X-Mailer", s.mailer); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if len(s.messageId) > 0 {
|
||||
@@ -422,7 +422,8 @@ func (s sendmail) Send(cli *smtp.Client) (err Error, buff *bytes.Buffer) {
|
||||
|
||||
err = iod.Send()
|
||||
buff = iod.GetBuffer()
|
||||
return
|
||||
|
||||
return err, buff
|
||||
}
|
||||
|
||||
type SendMail interface {
|
||||
|
@@ -36,8 +36,15 @@ const (
|
||||
FILE_NOT_FOUND
|
||||
)
|
||||
|
||||
var isCodeError = false
|
||||
|
||||
func IsCodeError() bool {
|
||||
return isCodeError
|
||||
}
|
||||
|
||||
func init() {
|
||||
errors.RegisterFctMessage(getMessage)
|
||||
isCodeError = errors.ExistInMapMessage(EMPTY_PARAMS)
|
||||
errors.RegisterIdFctMessage(EMPTY_PARAMS, getMessage)
|
||||
}
|
||||
|
||||
func getMessage(code errors.CodeError) (message string) {
|
||||
|
@@ -49,12 +49,12 @@ const (
|
||||
|
||||
type staticHandler struct {
|
||||
box packr.Box
|
||||
download []string
|
||||
prefix string
|
||||
head gin.HandlerFunc
|
||||
debug bool
|
||||
index bool
|
||||
prefix string
|
||||
download []string
|
||||
allDwnld bool
|
||||
head gin.HandlerFunc
|
||||
}
|
||||
|
||||
type Static interface {
|
||||
@@ -91,7 +91,7 @@ func NewStatic(hasIndex bool, prefix string, box packr.Box, Header gin.HandlerFu
|
||||
}
|
||||
}
|
||||
|
||||
func (s staticHandler) Register(register router.RegisterRouter) {
|
||||
func (s *staticHandler) Register(register router.RegisterRouter) {
|
||||
if s.prefix == "/" {
|
||||
for _, f := range s.box.List() {
|
||||
register(http.MethodGet, cleanJoinPath(s.prefix, f), s.Get)
|
||||
@@ -102,7 +102,7 @@ func (s staticHandler) Register(register router.RegisterRouter) {
|
||||
}
|
||||
}
|
||||
|
||||
func (s staticHandler) RegisterInGroup(group string, register router.RegisterRouterInGroup) {
|
||||
func (s *staticHandler) RegisterInGroup(group string, register router.RegisterRouterInGroup) {
|
||||
if s.prefix == "/" {
|
||||
for _, f := range s.box.List() {
|
||||
register(group, http.MethodGet, cleanJoinPath(s.prefix, f), s.head, s.Get)
|
||||
@@ -113,7 +113,7 @@ func (s staticHandler) RegisterInGroup(group string, register router.RegisterRou
|
||||
}
|
||||
}
|
||||
|
||||
func (s staticHandler) print() {
|
||||
func (s *staticHandler) print() {
|
||||
if s.debug {
|
||||
return
|
||||
}
|
||||
@@ -125,7 +125,7 @@ func (s staticHandler) print() {
|
||||
s.debug = true
|
||||
}
|
||||
|
||||
func (s staticHandler) Health() Error {
|
||||
func (s *staticHandler) Health() Error {
|
||||
s.print()
|
||||
|
||||
if len(s.box.List()) < 1 {
|
||||
@@ -139,15 +139,15 @@ func (s staticHandler) Health() Error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s staticHandler) Has(file string) bool {
|
||||
func (s *staticHandler) Has(file string) bool {
|
||||
return s.box.Has(file)
|
||||
}
|
||||
|
||||
func (s staticHandler) Find(file string) ([]byte, error) {
|
||||
func (s *staticHandler) Find(file string) ([]byte, error) {
|
||||
return s.box.Find(file)
|
||||
}
|
||||
|
||||
func (s staticHandler) Get(c *gin.Context) {
|
||||
func (s *staticHandler) Get(c *gin.Context) {
|
||||
partPath := strings.SplitN(c.Request.URL.Path, s.prefix, 2)
|
||||
requestPath := partPath[1]
|
||||
|
||||
@@ -191,7 +191,7 @@ func (s *staticHandler) SetDownloadAll() {
|
||||
s.allDwnld = true
|
||||
}
|
||||
|
||||
func (s staticHandler) IsDownload(file string) bool {
|
||||
func (s *staticHandler) IsDownload(file string) bool {
|
||||
for _, f := range s.download {
|
||||
if f == file {
|
||||
return true
|
||||
|
@@ -35,8 +35,15 @@ const (
|
||||
GOVERSION_CONTRAINT
|
||||
)
|
||||
|
||||
var isCodeError = false
|
||||
|
||||
func IsCodeError() bool {
|
||||
return isCodeError
|
||||
}
|
||||
|
||||
func init() {
|
||||
errors.RegisterFctMessage(getMessage)
|
||||
isCodeError = errors.ExistInMapMessage(EMPTY_PARAMS)
|
||||
errors.RegisterIdFctMessage(EMPTY_PARAMS, getMessage)
|
||||
}
|
||||
|
||||
func getMessage(code errors.CodeError) (message string) {
|
||||
|
@@ -42,6 +42,7 @@ const (
|
||||
License_SIL_Open_Font_1_1
|
||||
)
|
||||
|
||||
// nolint: gocritic
|
||||
func (lic license) GetBoilerPlate(Package, Description, Year, Author string) string {
|
||||
switch lic {
|
||||
case License_Apache_v2:
|
||||
@@ -74,13 +75,13 @@ func (lic license) GetBoilerPlate(Package, Description, Year, Author string) str
|
||||
func (lic license) GetLicense() string {
|
||||
switch lic {
|
||||
case License_Apache_v2:
|
||||
return licence_apache2()
|
||||
return license_apache2()
|
||||
case License_GNU_Affero_GPL_v3:
|
||||
return licence_agpl_v3()
|
||||
return license_agpl_v3()
|
||||
case License_GNU_GPL_v3:
|
||||
return licence_gpl_v3()
|
||||
return license_gpl_v3()
|
||||
case License_GNU_Lesser_GPL_v3:
|
||||
return licence_lgpl_v3()
|
||||
return license_lgpl_v3()
|
||||
case License_MIT:
|
||||
return license_mit()
|
||||
case License_Mozilla_PL_v2:
|
||||
@@ -88,7 +89,7 @@ func (lic license) GetLicense() string {
|
||||
case License_Unlicense:
|
||||
return boiler_Unlicence()
|
||||
case License_Creative_Common_Zero_v1:
|
||||
return licence_cc0_v1()
|
||||
return license_cc0_v1()
|
||||
case License_Creative_Common_Attribution_v4_int:
|
||||
return license_cc_by_4()
|
||||
case License_Creative_Common_Attribution_Share_Alike_v4_int:
|
||||
|
@@ -24,7 +24,7 @@ SOFTWARE.
|
||||
|
||||
package version
|
||||
|
||||
func licence_agpl_v3() string {
|
||||
func license_agpl_v3() string {
|
||||
return `
|
||||
GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
Version 3, 19 November 2007
|
||||
|
@@ -24,7 +24,7 @@ SOFTWARE.
|
||||
|
||||
package version
|
||||
|
||||
func licence_apache2() string {
|
||||
func license_apache2() string {
|
||||
return `
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
|
@@ -24,7 +24,7 @@ SOFTWARE.
|
||||
|
||||
package version
|
||||
|
||||
func licence_cc0_v1() string {
|
||||
func license_cc0_v1() string {
|
||||
return `
|
||||
CC0 1.0 Universal
|
||||
|
||||
|
@@ -24,7 +24,7 @@ SOFTWARE.
|
||||
|
||||
package version
|
||||
|
||||
func licence_gpl_v3() string {
|
||||
func license_gpl_v3() string {
|
||||
return `
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
@@ -24,7 +24,7 @@ SOFTWARE.
|
||||
|
||||
package version
|
||||
|
||||
func licence_lgpl_v3() string {
|
||||
func license_lgpl_v3() string {
|
||||
return `
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
Reference in New Issue
Block a user