Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v5.2.0
with:
go-version: '1.22.10'
go-version: '1.21'
- name: Build
run: go version && go mod tidy && go build -v ./...
run: go version && go build -v ./...

build-windows:
name: Build Ferrum on windows
Expand All @@ -27,9 +27,9 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v5.2.0
with:
go-version: '1.22.10'
go-version: '1.21'
- name: Build
run: go version && go mod tidy && go build -v ./...
run: go version && go build -v ./...

all-tests-linux:
name: Run all tests on linux
Expand All @@ -39,7 +39,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v5.2.0
with:
go-version: '1.22.10'
go-version: '1.21'
- name: Set up Redis Stack server
run: docker compose up -d redis
- name: Get Redis logs
Expand Down Expand Up @@ -70,9 +70,9 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v5.2.0
with:
go-version: '1.22.10'
go-version: '1.21'
- name: Run golangci-lint
uses: golangci/golangci-lint-action@v6.1.0
with:
version: v1.50.1
args: --timeout 3m --config .golangci.yaml
args: --timeout 3m --config .golangci.yaml
75 changes: 75 additions & 0 deletions .golangci.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
run:
# timeout for analysis, e.g. 30s, 5m, default is 1m
timeout: 30m

modules-download-mode: readonly

go: '1.22'

output:
# colored-line-number|line-number|json|tab|checkstyle|code-climate|junit-xml|github-actions
# default is "colored-line-number"
formats: code-climate

linters:
enable-all: false
disable:
- exhaustruct
- gofumpt
- testpackage
- depguard
- tagliatelle
- ireturn
- varnamelen
- wrapcheck

linters-settings:
stylecheck:
# Select the Go version to target. The default is '1.13'.
# https://staticcheck.io/docs/options#checks
checks: [ "all", "-ST1000" ]
funlen:
lines: 100
gci:
sections:
- standard
- default
- prefix(gitlab.sima-land.ru/sl/it/dev-dep/web-services/ad-data-operator)
gocyclo:
min-complexity: 5
varnamelen:
ignore-names:
- id
ignore-decls:
- ok bool
wrapcheck:
ignorePackageGlobs:
- google.golang.org/grpc/status
- github.com/pkg/errors
- golang.org/x/sync/errgroup
gosec:
excludes:
- G204

issues:
exclude-rules:
- path: _test\.go
linters:
- containedctx
- gocyclo
- cyclop
- funlen
- goerr113
- varnamelen
- staticcheck
- maintidx
- lll
- paralleltest
- dupl
- typecheck
- wsl
- path: main\.go
linters:
- gochecknoglobals
- lll
- funlen
29 changes: 17 additions & 12 deletions api/admin/cli/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,10 @@ import (
"encoding/json"
"flag"
"fmt"
"github.com/wissance/Ferrum/managers"
"log"

"github.com/wissance/Ferrum/managers"

"github.com/wissance/Ferrum/api/admin/cli/operations"
"github.com/wissance/Ferrum/config"
"github.com/wissance/Ferrum/data"
Expand All @@ -19,12 +20,12 @@ import (
const defaultConfig = "./config_w_redis.json"

var (
argConfigFile = flag.String("config", defaultConfig, "")
argOperation = flag.String("operation", "", "")
argResource = flag.String("resource", "", "")
argResourceId = flag.String("resource_id", "", "")
argParams = flag.String("params", "", "This is the name of the realm for operations on client or user resources")
argValue = flag.String("value", "", "Json object")
argConfigFile = flag.String("config", defaultConfig, "Application config for working with a persistent data store")
argOperation = flag.String("operation", "", "One of the available operations read|create|update|delete or user specific change/reset password")
argResource = flag.String("resource", "", "\"realm\", \"client\" or \"user\" or maybe other in future")
argResourceId = flag.String("resource_id", "", "resource object identifier, id required for the update|delete or read operation")
argParams = flag.String("params", "", "Name of a realm for operations on client or user resources")
argValue = flag.String("value", "", "Json encoded resource itself")
)

func main() {
Expand Down Expand Up @@ -109,10 +110,10 @@ func main() {
case operations.ClientResource:
var clientNew data.Client
if unmarshalErr := json.Unmarshal(value, &clientNew); unmarshalErr != nil {
log.Fatalf(sf.Format("json.Unmarshal failed: {0}", unmarshalErr.Error()))
log.Fatal(sf.Format("json.Unmarshal failed: {0}", unmarshalErr.Error()))
}
if createErr := manager.CreateClient(params, clientNew); createErr != nil {
log.Fatalf(sf.Format("CreateClient failed: {0}", createErr.Error()))
log.Fatal(sf.Format("CreateClient failed: {0}", createErr.Error()))
}
log.Print(sf.Format("Client: \"{0}\" successfully created", clientNew.Name))

Expand All @@ -121,7 +122,11 @@ func main() {
if err := json.Unmarshal(value, &userNew); err != nil {
log.Fatalf("json.Unmarshal failed: %s", err)
}
user := data.CreateUser(userNew)
realm, err := manager.GetRealm(params)
if err != nil {
log.Fatalf("GetRealm failed: %s", err)
}
user := data.CreateUser(userNew, realm.Encoder)
if err := manager.CreateUser(params, user); err != nil {
log.Fatalf("CreateUser failed: %s", err)
}
Expand Down Expand Up @@ -202,7 +207,7 @@ func main() {
if err := json.Unmarshal(value, &newUser); err != nil {
log.Fatalf("json.Unmarshal failed: %s", err)
}
user := data.CreateUser(newUser)
user := data.CreateUser(newUser, nil)
if err := manager.UpdateUser(params, resourceId, user); err != nil {
log.Fatalf("UpdateUser failed: %s", err)
}
Expand Down Expand Up @@ -242,7 +247,7 @@ func main() {
}
// TODO(SIA) Moving password verification to another location
if len(value) < 8 {
log.Fatalf("Password length must be greater than 8")
log.Fatalf("Password length must be greater than 7")
}
password := string(value)
passwordManager := manager.(PasswordManager)
Expand Down
16 changes: 8 additions & 8 deletions api/admin/cli/operations/operations.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,18 @@ type ResourceType string

const (
RealmResource ResourceType = "realm"
ClientResource = "client"
UserResource = "user"
UserFederationConfigResource = "user_federation"
ClientResource ResourceType = "client"
UserResource ResourceType = "user"
UserFederationConfigResource ResourceType = "user_federation"
)

type OperationType string

const (
GetOperation OperationType = "get"
CreateOperation = "create"
DeleteOperation = "delete"
UpdateOperation = "update"
ChangePassword = "change_password"
ResetPassword = "reset_password"
CreateOperation OperationType = "create"
DeleteOperation OperationType = "delete"
UpdateOperation OperationType = "update"
ChangePassword OperationType = "change_password"
ResetPassword OperationType = "reset_password"
)
6 changes: 3 additions & 3 deletions api/rest/web_api_handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ func (wCtx *WebApiContext) IssueNewToken(respWriter http.ResponseWriter, request
issueTokens := false
// 0. Check whether we deal with issuing a new token or refresh previous one
isRefresh := isTokenRefreshRequest(&tokenGenerationData)
if isRefresh == true {
if isRefresh {
// 1-2. Validate refresh token and check is it fresh enough
session := (*wCtx.Security).GetSessionByRefreshToken(realm, &tokenGenerationData.RefreshToken)
if session == nil {
Expand Down Expand Up @@ -192,7 +192,7 @@ func (wCtx *WebApiContext) GetUserInfo(respWriter http.ResponseWriter, request *
realm := vars[globals.RealmPathVar]
if !Validate(realm) {
wCtx.Logger.Debug(sf.Format("Get UserInfo: is invalid realmName: '{0}'", realm))
status := http.StatusBadRequest
status = http.StatusBadRequest
result := dto.ErrorDetails{Msg: sf.Format(errors.InvalidRealm, realm)}
afterHandle(&respWriter, status, &result)
return
Expand Down Expand Up @@ -240,7 +240,6 @@ func (wCtx *WebApiContext) GetUserInfo(respWriter http.ResponseWriter, request *
result = dto.ErrorDetails{Msg: errors.InvalidTokenMsg, Description: errors.InvalidTokenDesc}
} else {
user, _ := (*wCtx.DataProvider).GetUserById(realmPtr.Name, session.UserId)
status = http.StatusOK
if user != nil {
result = user.GetUserInfo()
}
Expand Down Expand Up @@ -434,6 +433,7 @@ func isTokenRefreshRequest(tokenIssueData *dto.TokenGenerationData) bool {
}

// reserved for future use
// nolint unused
func getUserIP(r *http.Request) string {
IPAddress := r.Header.Get("X-Real-Ip")
if IPAddress == "" {
Expand Down
Loading
Loading