audit-go/README.md
Christian Schaible (EXT) 6b5bc6dfe2 Merged PR 757276: feat: Validate topic names and update dependencies
Validates solace topic names to prevent issues when processing messages in the auditlog-appender.
Updates dependencies and build tools.

Security-concept-update-needed: false.

JIRA Work Item: STACKITALO-220
2025-03-31 12:32:16 +00:00

103 lines
3.5 KiB
Markdown

## audit-go
The audit-go library is the core library for validation and sending of audit events.
### API Documentation
The api documentation can be found
[here](https://developers.stackit.schwarz/domains/core-platform/audit-log/sdk/overview/).
### Supported data types for routing
The following data types are currently supported for routing.
| ObjectType | Routable to customer | Description |
|--------------|----------------------|----------------------|
| system | no | The STACKIT system |
| project | yes | STACKIT project |
| organization | yes | STACKIT organization |
| folder | yes | STACKIT folder |
### Additional API implementations
There's already an implementation draft of the api for the new dynamically routing
audit log solution. As the implementation of the system has not officially been
started yet, it's only a draft with integration tests.
The API code is private to not confuse users or loose data until the new system
is ready to be used.
The code can be found in the [api_routable.go](./api_routable.go) and
[api_routable_test.go](./api_routable_test.go) files.
### Development
#### Go
The current minimum toolchain version is **go1.23**.
The toolchain version can be set as environment variable (either manually in the terminal
or in the ~/.basrc or ~/.zshrc):
```shell
export GOTOOLCHAIN=go1.23.0
```
#### Linter
The linter *golangci-lint* can either be installed via package manager (e.g. brew) or
by running the following command in the terminal:
```shell
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v2.0.2
```
#### Schema Generation
Go structs are generated from Protobuf schema by using [Buf](https://buf.build) and some plugins.
The buf plugins are referenced in the *proto/buf.gen.yaml* file and are expected
to be installed locally.
The schema generator also generates code to validate constraints specified
in the schema.
Buf and the required plugins can either be installed via package manager (e.g. brew)
or manually by running:
```shell
go install github.com/bufbuild/buf/cmd/buf@v1.50.1 #Pipeline: bufVersion
go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.36.6 #Pipeline: protobufVersion, go.mod: buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go
go install github.com/envoyproxy/protoc-gen-validate@v1.2.1 #Pipeline: protobufValidateVersion, go.mod: google.golang.org/protobuf
```
Please check that the versions above match the versions in the *go.mod* file
and the *.azuredevops/build-pipeline.yml* file.
Then the schema can be generated:
```bash
cd proto
buf generate
```
#### Build
The library can be built by executing the following commands:
```bash
go mod download && go mod tidy && go get ./... && go fmt ./... && go vet ./... && golangci-lint run && go build ./... && go test ./...
```
##### Testcontainers
To run the tests **Docker** is needed as [Testcontainers](https://testcontainers.com/)
is used to run integration tests using a solace docker container.
#### Register buf validation schema in IntelliJ / Goland
The schema files use `Buf` protobuf extensions for validation of constraints.
To register the schema in IntelliJ / Goland clone the repo and add the import path:
```bash
git clone https://github.com/bufbuild/protovalidate.git
```
IntelliJ/Goland > Settings > Languages & Frameworks > Protocol Buffers > Import Paths > +
(Add Path) > …/protovalidate/proto/protovalidate