wip: reorganized to go pkg structure

This commit is contained in:
Michael Hohn
2024-05-15 15:57:27 -07:00
committed by =Michael Hohn
parent 198453ee90
commit 9750eeab20
27 changed files with 90 additions and 92 deletions

View File

@@ -9,13 +9,13 @@ import (
"log/slog"
"os"
"github.com/advanced-security/mrvacommander/config/mcc"
"github.com/advanced-security/mrvacommander/interfaces/mci"
"github.com/advanced-security/mrvacommander/lib/commander/lcmem"
"github.com/advanced-security/mrvacommander/lib/logger/llmem"
"github.com/advanced-security/mrvacommander/lib/queue/lqmem"
"github.com/advanced-security/mrvacommander/lib/runner/lrmem"
"github.com/advanced-security/mrvacommander/lib/storage/lsmem"
"mrvacommander/config/mcc"
"mrvacommander/pkg/agent"
"mrvacommander/pkg/logger"
"mrvacommander/pkg/queue"
"mrvacommander/pkg/server"
"mrvacommander/pkg/storage"
)
func main() {
@@ -68,16 +68,16 @@ func main() {
switch *mode {
case "standalone":
// Assemble single-process version
state := mci.State{
Commander: &lcmem.Commander{},
Logger: &llmem.Logger{},
Queue: &lqmem.Queue{},
Storage: &lsmem.Storage{CurrentID: config.Storage.StartingID},
Runner: &lrmem.Runner{},
state := server.State{
Commander: &server.CommanderSingle{},
Logger: &logger.LoggerSingle{},
Queue: &queue.QueueSingle{},
Storage: &storage.StorageSingle{CurrentID: config.Storage.StartingID},
Runner: &agent.RunnerSingle{},
}
main := &lcmem.Commander{}
main.Setup(state)
main.Run(state)
main := &server.CommanderSingle{}
main.Setup(&state)
main.Run()
case "container":
// Assemble cccontainer

2
go.mod
View File

@@ -1,4 +1,4 @@
module github.com/advanced-security/mrvacommander
module mrvacommander
go 1.22.0

View File

@@ -1,12 +0,0 @@
package mci
type Commander interface {
}
type State struct {
Commander Commander
Logger Logger
Queue Queue
Storage Storage
Runner Runner
}

View File

@@ -1,4 +0,0 @@
package mci
type Common struct {
}

View File

@@ -1,4 +0,0 @@
package llmem
type Logger struct {
}

View File

@@ -1,4 +0,0 @@
package lqmem
type Queue struct {
}

View File

@@ -1,4 +0,0 @@
package lrmem
type Runner struct {
}

4
pkg/agent/agent.go Normal file
View File

@@ -0,0 +1,4 @@
package agent
type RunnerSingle struct {
}

View File

@@ -1,4 +1,4 @@
package mci
package agent
type Runner interface {
}

4
pkg/common/interfaces.go Normal file
View File

@@ -0,0 +1,4 @@
package common
type Common interface {
}

View File

@@ -1,4 +1,4 @@
package mci
package logger
type Logger interface {
}

4
pkg/logger/types.go Normal file
View File

@@ -0,0 +1,4 @@
package logger
type LoggerSingle struct {
}

View File

@@ -1,4 +1,4 @@
package mci
package queue
type Queue interface {
}

4
pkg/queue/types.go Normal file
View File

@@ -0,0 +1,4 @@
package queue
type QueueSingle struct {
}

3
pkg/server/interfaces.go Normal file
View File

@@ -0,0 +1,3 @@
package server
type Commander interface{}

View File

@@ -1,5 +1,4 @@
// The in-memory implementation of the mrva commander library
package lcmem
package server
import (
"bytes"
@@ -14,8 +13,6 @@ import (
"strconv"
"strings"
"github.com/advanced-security/mrvacommander/interfaces/mci"
"github.com/advanced-security/mrvacommander/types/tcmdr"
"github.com/gorilla/mux"
"github.com/hohn/ghes-mirva-server/analyze"
"github.com/hohn/ghes-mirva-server/api"
@@ -23,14 +20,10 @@ import (
"github.com/hohn/ghes-mirva-server/store"
)
type Commander struct {
st mci.State // st points to this Commander instance. Circular, but needed.
func (c *CommanderSingle) Run() {
}
func (c *Commander) Run(st mci.State) {
}
func (c *Commander) Setup(st mci.State) {
func (c *CommanderSingle) Setup(st *State) {
r := mux.NewRouter()
c.st = st
@@ -66,7 +59,7 @@ func (c *Commander) Setup(st mci.State) {
log.Fatal(http.ListenAndServe(":8080", r))
}
func (c *Commander) StatusResponse(w http.ResponseWriter, js co.JobSpec, ji co.JobInfo, vaid int) {
func (c *CommanderSingle) StatusResponse(w http.ResponseWriter, js co.JobSpec, ji co.JobInfo, vaid int) {
slog.Debug("Submitting status response", "session", vaid)
all_scanned := []api.ScannedRepo{}
@@ -120,11 +113,11 @@ func (c *Commander) StatusResponse(w http.ResponseWriter, js co.JobSpec, ji co.J
w.Write(submitStatus)
}
func (c *Commander) RootHandler(w http.ResponseWriter, r *http.Request) {
func (c *CommanderSingle) RootHandler(w http.ResponseWriter, r *http.Request) {
slog.Info("Request on /")
}
func (c *Commander) MirvaStatus(w http.ResponseWriter, r *http.Request) {
func (c *CommanderSingle) MirvaStatus(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
slog.Info("mrva status request for ",
"owner", vars["owner"],
@@ -161,7 +154,7 @@ func (c *Commander) MirvaStatus(w http.ResponseWriter, r *http.Request) {
}
// Download artifacts
func (c *Commander) MirvaDownloadArtifact(w http.ResponseWriter, r *http.Request) {
func (c *CommanderSingle) MirvaDownloadArtifact(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
slog.Info("MRVA artifact download",
"controller_owner", vars["controller_owner"],
@@ -188,19 +181,19 @@ func (c *Commander) MirvaDownloadArtifact(w http.ResponseWriter, r *http.Request
}
func (c *Commander) MirvaDownloadServe(w http.ResponseWriter, r *http.Request) {
func (c *CommanderSingle) MirvaDownloadServe(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
slog.Info("File download request", "local_path", vars["local_path"])
analyze.FileDownload(w, vars["local_path"])
}
func (c *Commander) MirvaRequestID(w http.ResponseWriter, r *http.Request) {
func (c *CommanderSingle) MirvaRequestID(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
slog.Info("New mrva using repository_id=%v\n", vars["repository_id"])
}
func (c *Commander) MirvaRequest(w http.ResponseWriter, r *http.Request) {
func (c *CommanderSingle) MirvaRequest(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
slog.Info("New mrva run ", "owner", vars["owner"], "repo", vars["repo"])
// session := new(MirvaSession)
@@ -221,7 +214,7 @@ func (c *Commander) MirvaRequest(w http.ResponseWriter, r *http.Request) {
// session_start_analyses()
// TODO into Commander (here)
si := tcmdr.SessionInfo{
si := SessionInfo{
ID: session_id,
Owner: session_owner,
ControllerRepo: session_controller_repo,
@@ -244,11 +237,11 @@ func (c *Commander) MirvaRequest(w http.ResponseWriter, r *http.Request) {
// session_save()
}
func (c *Commander) submit_response(s tcmdr.SessionInfo) {
func (c *CommanderSingle) submit_response(s SessionInfo) {
// TODO
}
func (c *Commander) collectRequestInfo(w http.ResponseWriter, r *http.Request, sessionId int) (string, []co.OwnerRepo, string, error) {
func (c *CommanderSingle) collectRequestInfo(w http.ResponseWriter, r *http.Request, sessionId int) (string, []co.OwnerRepo, string, error) {
slog.Debug("Collecting session info")
if r.Body == nil {
@@ -305,12 +298,12 @@ func (c *Commander) collectRequestInfo(w http.ResponseWriter, r *http.Request, s
}
// Try to extract a SubmitMsg from a json-encoded buffer
func TrySubmitMsg(buf []byte) (tcmdr.SubmitMsg, error) {
func TrySubmitMsg(buf []byte) (SubmitMsg, error) {
buf1 := make([]byte, len(buf))
copy(buf1, buf)
dec := json.NewDecoder(bytes.NewReader(buf1))
dec.DisallowUnknownFields()
var m tcmdr.SubmitMsg
var m SubmitMsg
err := dec.Decode(&m)
return m, err
}
@@ -340,7 +333,7 @@ func isBase64Gzip(val []byte) bool {
}
}
func (c *Commander) extract_tgz(qp string, sessionID int) (string, error) {
func (c *CommanderSingle) extract_tgz(qp string, sessionID int) (string, error) {
// These are decoded manually via
// base64 -d < foo1 | gunzip | tar t | head -20
// base64 decode the body

View File

@@ -1,7 +1,11 @@
package tcmdr
package server
import (
"github.com/advanced-security/mrvacommander/types/tsto"
"mrvacommander/pkg/agent"
"mrvacommander/pkg/logger"
"mrvacommander/pkg/queue"
"mrvacommander/pkg/storage"
co "github.com/hohn/ghes-mirva-server/common"
)
@@ -237,5 +241,17 @@ type SessionInfo struct {
NoCodeqlDBRepos []co.OwnerRepo
OverLimitRepos []co.OwnerRepo
AnalysisRepos *map[co.OwnerRepo]tsto.DBLocation
AnalysisRepos *map[co.OwnerRepo]storage.DBLocation
}
type CommanderSingle struct {
st *State
}
type State struct {
Commander Commander
Logger logger.Logger
Queue queue.Queue
Storage storage.Storage
Runner agent.Runner
}

View File

@@ -0,0 +1 @@
package storage

View File

@@ -1,4 +1,4 @@
package lsmem
package storage
import (
"errors"
@@ -9,20 +9,19 @@ import (
"path"
"path/filepath"
"github.com/advanced-security/mrvacommander/types/tsto"
co "github.com/hohn/ghes-mirva-server/common"
)
type Storage struct {
type StorageSingle struct {
CurrentID int
}
func (s *Storage) NextID() int {
func (s *StorageSingle) NextID() int {
s.CurrentID += 1
return s.CurrentID
}
func (s *Storage) SaveQueryPack(tgz []byte, sessionId int) (string, error) {
func (s *StorageSingle) SaveQueryPack(tgz []byte, sessionId int) (string, error) {
// Save the tar.gz body
cwd, err := os.Getwd()
if err != nil {
@@ -52,8 +51,8 @@ func (s *Storage) SaveQueryPack(tgz []byte, sessionId int) (string, error) {
// Determine for which repositories codeql databases are available.
//
// Those will be the analysis_repos. The rest will be skipped.
func (s *Storage) FindAvailableDBs(analysisReposRequested []co.OwnerRepo) (not_found_repos []co.OwnerRepo,
analysisRepos *map[co.OwnerRepo]tsto.DBLocation) {
func (s *StorageSingle) FindAvailableDBs(analysisReposRequested []co.OwnerRepo) (not_found_repos []co.OwnerRepo,
analysisRepos *map[co.OwnerRepo]DBLocation) {
slog.Debug("Looking for available CodeQL databases")
cwd, err := os.Getwd()
@@ -62,7 +61,7 @@ func (s *Storage) FindAvailableDBs(analysisReposRequested []co.OwnerRepo) (not_f
return
}
analysisRepos = &map[co.OwnerRepo]tsto.DBLocation{}
analysisRepos = &map[co.OwnerRepo]DBLocation{}
not_found_repos = []co.OwnerRepo{}
@@ -77,7 +76,7 @@ func (s *Storage) FindAvailableDBs(analysisReposRequested []co.OwnerRepo) (not_f
not_found_repos = append(not_found_repos, rep)
} else {
slog.Info("Found database for ", "owner/repo", rep, "path", dbPath)
(*analysisRepos)[rep] = tsto.DBLocation{Prefix: dbPrefix, File: dbName}
(*analysisRepos)[rep] = DBLocation{Prefix: dbPrefix, File: dbName}
}
}
return not_found_repos, analysisRepos

View File

@@ -1,7 +1,6 @@
package mci
package storage
import (
"github.com/advanced-security/mrvacommander/types/tsto"
co "github.com/hohn/ghes-mirva-server/common"
)
@@ -9,5 +8,10 @@ type Storage interface {
NextID() int
SaveQueryPack(tgz []byte, sessionID int) (storagePath string, error error)
FindAvailableDBs(analysisReposRequested []co.OwnerRepo) (not_found_repos []co.OwnerRepo,
analysisRepos *map[co.OwnerRepo]tsto.DBLocation)
analysisRepos *map[co.OwnerRepo]DBLocation)
}
type DBLocation struct {
Prefix string
File string
}

View File

View File

View File

View File

View File

@@ -1,6 +0,0 @@
package tsto
type DBLocation struct {
Prefix string
File string
}