chore: Various codestyle fixes

This commit is contained in:
jamesread 2025-07-12 23:44:24 +01:00
parent 260477e5e8
commit b16ce074ea
12 changed files with 78 additions and 43 deletions

View File

@ -32,7 +32,7 @@ func SetupEntityFileWatchers(cfg *config.Config) {
configDir = configDirVar
}
for entityIndex, _ := range cfg.Entities { // #337 - iterate by key, not by value
for entityIndex := range cfg.Entities { // #337 - iterate by key, not by value
ef := cfg.Entities[entityIndex]
p := ef.File
@ -73,12 +73,12 @@ func loadEntityFileJson(filename string, entityname string) {
return
}
data := make([]map[string]interface{}, 0)
data := make([]map[string]any, 0)
decoder := json.NewDecoder(bytes.NewReader(jfile))
for decoder.More() {
d := make(map[string]interface{})
d := make(map[string]any)
err := decoder.Decode(&d)
@ -106,7 +106,7 @@ func loadEntityFileYaml(filename string, entityname string) {
return
}
data := make([]map[string]interface{}, 1)
data := make([]map[string]any, 1)
err = yaml.Unmarshal(yfile, &data)
@ -117,7 +117,7 @@ func loadEntityFileYaml(filename string, entityname string) {
updateSvFromFile(entityname, data)
}
func updateSvFromFile(entityname string, data []map[string]interface{}) {
func updateSvFromFile(entityname string, data []map[string]any) {
log.Debugf("updateSvFromFile: %+v", data)
count := len(data)
@ -137,23 +137,23 @@ func updateSvFromFile(entityname string, data []map[string]interface{}) {
}
}
func serializeValueToSv(prefix string, value interface{}) {
if m, ok := value.(map[string]interface{}); ok { // if value is a map we need to flatten it
func serializeValueToSv(prefix string, value any) {
if m, ok := value.(map[string]any); ok { // if value is a map we need to flatten it
serializeMapToSv(prefix, m)
} else if s, ok := value.([]interface{}); ok { // if value is a slice we need to flatten it
} else if s, ok := value.([]any); ok { // if value is a slice we need to flatten it
serializeSliceToSv(prefix, s)
} else {
sv.Set(prefix, fmt.Sprintf("%v", value))
}
}
func serializeMapToSv(prefix string, m map[string]interface{}) {
func serializeMapToSv(prefix string, m map[string]any) {
for k, v := range m {
serializeValueToSv(prefix+"."+k, v)
}
}
func serializeSliceToSv(prefix string, s []interface{}) {
func serializeSliceToSv(prefix string, s []any) {
sv.Set(prefix+".count", fmt.Sprintf("%v", len(s)))
for i, v := range s {

View File

@ -5,7 +5,6 @@ import (
sv "github.com/OliveTin/OliveTin/internal/stringvariables"
log "github.com/sirupsen/logrus"
"errors"
"fmt"
"net/mail"
"net/url"
@ -34,7 +33,7 @@ func parseCommandForReplacements(shellCommand string, values map[string]string)
argValue, argProvided := values[argName]
if !argProvided {
return "", errors.New("Required arg not provided: " + argName)
return "", fmt.Errorf("required arg not provided: %v", argName)
}
shellCommand = strings.ReplaceAll(shellCommand, match[0], argValue)
@ -107,7 +106,7 @@ func typecheckActionArgument(name string, value string, action *config.Action) e
arg := action.FindArg(name)
if arg == nil {
return errors.New("Action arg not defined: " + name)
return fmt.Errorf("action arg not defined: %v", name)
}
if value == "" {
@ -145,7 +144,7 @@ func TypeSafetyCheck(name string, value string, argumentType string) error {
func typecheckNull(arg *config.ActionArgument) error {
if arg.RejectNull {
return errors.New("Null values are not allowed")
return fmt.Errorf("null values are not allowed")
}
return nil
@ -162,7 +161,7 @@ func typecheckChoice(value string, arg *config.ActionArgument) error {
}
}
return errors.New("argument value is not one of the predefined choices")
return fmt.Errorf("argument value is not one of the predefined choices")
}
func typecheckChoiceEntity(value string, arg *config.ActionArgument) error {
@ -176,7 +175,7 @@ func typecheckChoiceEntity(value string, arg *config.ActionArgument) error {
}
}
return errors.New("argument value cannot be found in entities")
return fmt.Errorf("argument value cannot be found in entities")
}
func typeSafetyCheckEmail(value string) error {
@ -211,7 +210,7 @@ func typeSafetyCheckRegex(name string, value string, argumentType string) error
pattern, found = typecheckRegex[argumentType]
if !found {
return errors.New("argument type not implemented " + argumentType)
return fmt.Errorf("argument type not implemented %v", argumentType)
}
}
@ -225,7 +224,7 @@ func typeSafetyCheckRegex(name string, value string, argumentType string) error
"pattern": pattern,
}).Warn("Arg type check safety failure")
return errors.New(fmt.Sprintf("invalid argument %v, doesn't match %v", name, argumentType))
return fmt.Errorf("invalid argument %v, doesn't match %v", name, argumentType)
}
return nil

View File

@ -570,7 +570,14 @@ func stepExec(req *ExecutionRequest) bool {
}).Warnf("Action timed out")
// The context timeout should kill the process, but let's make sure.
req.executor.Kill(req.logEntry)
err := req.executor.Kill(req.logEntry)
if err != nil {
log.WithFields(log.Fields{
"actionTitle": req.logEntry.ActionTitle,
}).Warnf("could not kill process: %v", err)
}
req.logEntry.TimedOut = true
req.logEntry.Output += "OliveTin::timeout - this action timed out after " + fmt.Sprintf("%v", req.Action.Timeout) + " seconds. If you need more time for this action, set a longer timeout. See https://docs.olivetin.app/timeout.html for more help."
}

View File

@ -12,7 +12,7 @@ import (
"google.golang.org/grpc/metadata"
"google.golang.org/grpc/status"
"errors"
"fmt"
"net"
acl "github.com/OliveTin/OliveTin/internal/acl"
@ -154,7 +154,7 @@ func (api *oliveTinAPI) StartActionAndWait(ctx ctx.Context, req *apiv1.StartActi
LogEntry: internalLogEntryToPb(internalLogEntry),
}, nil
} else {
return nil, errors.New("Execution not found!")
return nil, fmt.Errorf("execution not found")
}
}

View File

@ -5,6 +5,7 @@ import (
"github.com/grpc-ecosystem/grpc-gateway/v2/runtime"
log "github.com/sirupsen/logrus"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
"google.golang.org/grpc/metadata"
"google.golang.org/protobuf/encoding/protojson"
"google.golang.org/protobuf/reflect/protoreflect"
@ -190,7 +191,11 @@ func newMux() *runtime.ServeMux {
ctx := context.Background()
opts := []grpc.DialOption{grpc.WithInsecure()}
opts := []grpc.DialOption{
grpc.WithTransportCredentials(
insecure.NewCredentials(),
),
}
err := apiv1.RegisterOliveTinApiServiceHandlerFromEndpoint(ctx, mux, cfg.ListenAddressGrpcActions, opts)

View File

@ -93,7 +93,11 @@ func testJwkValidation(t *testing.T, expire int64, expectCode int) {
fmt.Println(string(body))
}
srv.Shutdown(context.TODO())
err = srv.Shutdown(context.TODO())
if err != nil {
t.Fatalf("Server shutdown error: %+v", err)
}
}
func TestJWTSignatureVerificationSucceeds(t *testing.T) {
@ -114,7 +118,7 @@ func TestJWTHeader(t *testing.T) {
cfg.AuthJwtClaimUsername = "sub"
cfg.AuthJwtClaimUserGroup = "olivetinGroup"
cfg.AuthJwtHeader = "Authorization"
SetGlobalRestConfig(cfg) // ugly, setting global var, we should pass configs as params to modules... :/
SetGlobalRestConfig(cfg) // Ugly, setting global var, we should pass configs as params to modules... :/
token := jwt.New(jwt.SigningMethodRS256)

View File

@ -76,11 +76,11 @@ func completeProviderConfig(providerName string, providerConfig *config.OAuth2Pr
}
}
func getOAuth2Config(cfg *config.Config, providerName string) (*oauth2.Config, error) {
func getOAuth2Config(providerName string) (*oauth2.Config, error) {
config, ok := registeredProviders[providerName]
if !ok {
return nil, fmt.Errorf("Provider not found in config: %v", providerName)
return nil, fmt.Errorf("provider not found in config: %v", providerName)
}
return config, nil
@ -118,7 +118,7 @@ func handleOAuthLogin(w http.ResponseWriter, r *http.Request) {
}
providerName := r.URL.Query().Get("provider")
provider, err := getOAuth2Config(cfg, providerName)
provider, err := getOAuth2Config(providerName)
if err != nil {
log.Errorf("Failed to get provider config: %v %v", providerName, err)
@ -273,11 +273,17 @@ type UserInfo struct {
Usergroup string
}
//gocyclo:ignore
func getUserInfo(client *http.Client, provider *config.OAuth2Provider) *UserInfo {
ret := &UserInfo{}
res, err := client.Get(provider.WhoamiUrl)
if err != nil {
log.Errorf("Failed to get user data: %v", err)
return ret
}
if res.StatusCode != http.StatusOK {
log.Errorf("Failed to get user data: %v", res.StatusCode)
return ret
@ -287,7 +293,12 @@ func getUserInfo(client *http.Client, provider *config.OAuth2Provider) *UserInfo
contents, err := io.ReadAll(res.Body)
var userData map[string]interface{}
if err != nil {
log.Errorf("Failed to read user data: %v", err)
return ret
}
var userData map[string]any
err = json.Unmarshal([]byte(contents), &userData)
@ -303,7 +314,7 @@ func getUserInfo(client *http.Client, provider *config.OAuth2Provider) *UserInfo
return ret
}
func getDataField(data map[string]interface{}, field string) string {
func getDataField(data map[string]any, field string) string {
if field == "" {
return ""
}

View File

@ -94,7 +94,7 @@ func generateThemeCss(w http.ResponseWriter, r *http.Request) {
customThemeCssRead = true
if _, err := os.Stat(themeCssFilename); err == nil {
customThemeCss, err = os.ReadFile(themeCssFilename)
customThemeCss, _ = os.ReadFile(themeCssFilename)
} else {
log.Debugf("Theme CSS not read: %v", err)
customThemeCss = []byte("/* not found */")

View File

@ -12,11 +12,7 @@ import (
"time"
)
var calendar map[*config.Action][]*time.Timer
func Schedule(cfg *config.Config, ex *executor.Executor) {
calendar = make(map[*config.Action][]*time.Timer)
for _, action := range cfg.Actions {
if action.ExecOnCalendarFile != "" {
x := func(filename string) {
@ -100,7 +96,6 @@ func sleepUntil(ctx context.Context, instant time.Time, action *config.Action, c
}
func exec(instant time.Time, action *config.Action, cfg *config.Config, ex *executor.Executor) {
// calendar[action] = append(calendar[action], timer)
log.WithFields(log.Fields{
"instant": instant,
"actionTitle": action.Title,

View File

@ -66,7 +66,7 @@ func Set(key string, value string) {
func RemoveKeysThatStartWith(search string) {
rwmutex.Lock()
for k, _ := range contents {
for k := range contents {
if strings.HasPrefix(k, search) {
delete(contents, k)
}

View File

@ -33,10 +33,15 @@ func StartUpdateChecker(cfg *config.Config) {
// 1st: Every 24h - very spammy.
// 2nd: Every 7d - (168 hours - much more reasonable, but it checks in at the same time/day each week.
// Current: Every 100h is not so spammy, and has the advantage that the checkin time "shifts" hours.
s.AddFunc("@every 100h", func() {
_, err := s.AddFunc("@every 100h", func() {
actualCheckForUpdate()
})
if err != nil {
log.Errorf("update check cron job failed to start: %v", err)
return
}
go actualCheckForUpdate() // On startup
go s.Start()
@ -48,7 +53,7 @@ func parseVersion(input []byte) string {
err := json.Unmarshal(input, &versionMap)
if err != nil {
log.Errorf("Update check unmarshal failure: %v", err)
log.Errorf("update check unmarshal failure: %v", err)
return "none"
} else {
log.Infof("Update check remote version: %+v, latest version: %+v", versionMap.Latest, installationinfo.Build.Version)
@ -95,7 +100,12 @@ func doRequest() string {
versionMap, _ := io.ReadAll(resp.Body)
defer resp.Body.Close()
err = resp.Body.Close()
if err != nil {
log.Errorf("Update check failed to close body %v", err)
return "none"
}
return parseVersion(versionMap)
}

View File

@ -118,7 +118,11 @@ func broadcast(pbmsg protoreflect.ProtoMessage) {
sendmutex.Lock()
for _, client := range clients {
client.conn.WriteMessage(ws.TextMessage, hackyMessage)
err := client.conn.WriteMessage(ws.TextMessage, hackyMessage)
if err != nil {
log.Warnf("websocket send error: %v", err)
}
}
sendmutex.Unlock()
}