web

package
v0.0.0-...-0388672 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 12, 2023 License: MIT Imports: 33 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func SetVersionInfo

func SetVersionInfo(revision, ctime string)

SetVersionInfo sets the server version information

func WrapAPIForError

func WrapAPIForError(f WebAPI) gin.HandlerFunc

WrapAPIForError is a wrapper around Gin handlers to reduce error handling code

Types

type APIEngine

type APIEngine storage.TaskFileEngine

func (APIEngine) MarshalJSON

func (s APIEngine) MarshalJSON() ([]byte, error)

type APIValidationErrors

type APIValidationErrors struct {
	Valid  bool     `json:"valid"`
	Errors []string `json:"validation_errors"`
}

APIValidationErrors describes errors that occurred in the validation of a request

type ActivityLogEntry

type ActivityLogEntry struct {
	OccuredAt  time.Time              `json:"occurred_at"`
	UserUUID   string                 `json:"user_id"`
	Username   string                 `json:"username"`
	StatusCode string                 `json:"status_code"`
	Type       storActivityTypeString `json:"type"`
	IPAddress  string                 `json:"ip_address"`
}

ActivityLogEntry should mimick storage.ActivityLogEntry

type ChangeTaskStatusRequest

type ChangeTaskStatusRequest struct {
	Status string `json:"state"`
}

type Config

type Config struct {
	Listener      listener     `yaml:"listener"`
	CORS          corsSettings `yaml:"cors"`
	UserInterface uiSettings   `yaml:"ui"`
}

Config describes the various options available to the API server

func (*Config) Validate

func (s *Config) Validate() error

Validate the API server configuration

type CreateTaskRequest

type CreateTaskRequest struct {
	TaskName          string                    `json:"task_name"`
	Engine            storage.WorkerCrackEngine `json:"engine"`
	FileID            string                    `json:"file_id"` // FileID is a reference to TaskFile via TaskFile.FileID
	CaseCode          *string                   `json:"case_code,omitempty"`
	AssignedToHost    *string                   `json:"assigned_host,omitempty"`
	AssignedToDevices *storage.CLDevices        `json:"assigned_devices,omitempty"`
	Comment           *string                   `json:"comment,omitempty"`
	EnginePayload     json.RawMessage           `json:"payload"` // The structure of EnginePayload differs based on Engine
	TaskDuration      int                       `json:"task_duration"`
	Priority          *storage.WorkerPriority   `json:"priority,omitempty"`
	AdditionalUsers   *[]string                 `json:"additional_users,omitempty"`
}

CreateTaskRequest defines the request for a new task creation event

type CreateTaskResponse

type CreateTaskResponse struct {
	TaskID    string             `json:"taskid"`
	CreatedAt time.Time          `json:"created_at"`
	Status    storage.TaskStatus `json:"status"`
}

CreateTaskResponse defines response on a successful task creation event

type CreateUserRequest

type CreateUserRequest struct {
	Username string `json:"username"`
	Password string `json:"password"`
	Email    string `json:"email"`
}

CreateUserRequest describes the payload sent by the user to create a new user

func (CreateUserRequest) Validate

func (s CreateUserRequest) Validate() error

Validate returns any errors that are associated with the user input of CreateUserRequest

type DeleteFileResponse

type DeleteFileResponse struct {
	Deleted bool   `json:"deleted"`
	FileID  string `json:"file_id"`
}

DeleteFileResponse is returned whenever the user deletes a file successfully

type EditUserRequest

type EditUserRequest struct {
	CurrentPassword *string `json:"current_password"`
	Password        *string `json:"new_password"`
	UserIsAdmin     *bool   `json:"user_is_admin"`
	Email           *string `json:"email"`
}

EditUserRequest must match `storage.UserModifyRequest`

type EditUserResponse

type EditUserResponse struct {
	Modified bool `json:"modified"`
	EditUserRequest
}

EditUserResponse is returned on a successful update

type EngineFileItem

type EngineFileItem struct {
	FileID          string    `json:"file_id"`
	FileName        string    `json:"filename"`
	FileSize        int64     `json:"file_sz"`
	Description     *string   `json:"description,omitempty"`
	UploadedAt      time.Time `json:"uploaded_at"`
	UploadedBy      string    `json:"uploaded_by"`
	LastUpdatedAt   time.Time `json:"last_modified"`
	FileType        FileType  `json:"file_type"`
	NumberOfEntries int64     `json:"num_entries"`
	SHA1Hash        string    `json:"sha1"`
}

EngineFileItem is returned to the user on a shared file listing should mimic storage.EngineFile

type EngineFileMetadataUpdateRequest

type EngineFileMetadataUpdateRequest struct {
	IsShared    *bool   `json:"shared,omitempty"`
	FileName    *string `json:"file_name,omitempty"`
	Description *string `json:"description,omitempty"`
}

EngineFileMetadataUpdateRequest defines the structure of the metadata update request of an engine file

type EntitlementResponseEntries

type EntitlementResponseEntries []EntitlementResponseEntry

type EntitlementResponseEntry

type EntitlementResponseEntry struct {
	UserUUID        string    `json:"user_id"`
	EntitledID      string    `json:"-"`
	GrantedAccessAt time.Time `json:"granted_access_on"`
}

type FileType

type FileType storage.EngineFileType

func (FileType) MarshalJSON

func (s FileType) MarshalJSON() ([]byte, error)

type HashcatEnginePayload

type HashcatEnginePayload struct {
	HashType               string          `json:"hash_type"`
	AttackMode             string          `json:"attack_mode"`
	Masks                  *EngineFileItem `json:"masks,omitempty"`
	DictionaryFile         *EngineFileItem `json:"dictionary_file,omitempty"`
	ManglingRuleFile       *EngineFileItem `json:"mangling_file,omitempty"`
	DisableOptimizedEngine bool            `json:"disable_optimizations"`
}

HashcatEnginePayload defines the structure of task.EnginePayload for jobs created for the hashcat engine

type HashcatTaskPayload

type HashcatTaskPayload shared.HashcatUserOptions

HashcatTaskPayload defines the structure of a Task request which should be executed in a worker with the hashcat engine

type LoginRequest

type LoginRequest struct {
	Username string `json:"username"`
	Password string `json:"password"`
	IsAPI    bool   `json:"api_only"`
}

LoginRequest defines the structure of a login request

type ModifyTaskRequest

type ModifyTaskRequest struct {
	AssignedToHost    *string             `json:"assigned_host,omitempty"`
	AssignedToDevices *storage.CLDevices  `json:"assigned_devices,omitempty"`
	Status            *storage.TaskStatus `json:"task_status,omitempty"`
	TaskDuration      *int                `json:"task_duration,omitempty"`
}

type PasswordListResponse

type PasswordListResponse struct {
	Data  []PasswordResponseItem `json:"data"`
	Count int                    `json:"count"`
}

type PasswordResponseItem

type PasswordResponseItem struct {
	Hash      string    `json:"hash"`
	Value     string    `json:"value"`
	CrackedAt time.Time `json:"cracked_at"`
}

type RealtimeServer

type RealtimeServer struct {
	// contains filtered or unexported fields
}

func NewRealtimeServer

func NewRealtimeServer(wmgr *workmgr.WorkerManager, stor storage.Backend) *RealtimeServer

func (*RealtimeServer) ServeStream

func (s *RealtimeServer) ServeStream(c *gin.Context)

func (*RealtimeServer) Stop

func (s *RealtimeServer) Stop()

Stop the Realtime Server by disconnecting all active clients

type Server

type Server struct {
	*http.Server
	// contains filtered or unexported fields
}

func NewServer

NewServer creates an HTTP API server

func (*Server) Address

func (s *Server) Address() string

Address returns the ip and port on which this server is listening on

func (*Server) Start

func (s *Server) Start() error

Start the API server and block

func (*Server) Stop

func (s *Server) Stop() error

Stop the HTTP server gracefully

type ServerVersionInfo

type ServerVersionInfo struct {
	Workers           []WorkerVersionInfo `json:"workers"`
	ServerVersion     string              `json:"version"`
	ServerCompileTime string              `json:"compiled_at"`
}

type TaskCrackEngineFancy

type TaskCrackEngineFancy storage.WorkerCrackEngine

func (TaskCrackEngineFancy) MarshalJSON

func (s TaskCrackEngineFancy) MarshalJSON() ([]byte, error)

type TaskFileItem

type TaskFileItem struct {
	FileID            string    `json:"file_id"`
	UploadedAt        time.Time `json:"uploaded_at"`
	UploadedBy        string    `json:"uploaded_by"`
	UploadedByUUID    string    `json:"uploaded_by_uuid"`
	FileSize          int64     `json:"file_size"`
	FileName          string    `json:"filename"`
	SHA1Hash          string    `json:"sha1"`
	ForEngine         APIEngine `json:"use_in_engine"`
	NumberOfPasswords int       `json:"num_passwords"`
	NumberOfSalts     int       `json:"num_salts"`
}

TaskFileItem describes a file that is used for tasks

type TaskFileLintError

type TaskFileLintError struct {
	Errors  []string `json:"errors"`
	Message string   `json:"msg"`
}

type TaskInfoResponseItem

type TaskInfoResponseItem struct {
	TaskID            string               `json:"task_id"`
	TaskName          string               `json:"task_name"`
	CaseCode          *string              `json:"case_code,omitempty"`
	Comment           *string              `json:"comment,omitempty"`
	AssignedToHost    string               `json:"assigned_host,omitempty"`
	AssignedToDevices *storage.CLDevices   `json:"assigned_devices,omitempty"`
	Status            storage.TaskStatus   `json:"status"`
	CreatedBy         string               `json:"created_by"`
	CreatedByUUID     string               `json:"created_by_uuid"`
	CreatedAt         time.Time            `json:"created_at"`
	Engine            TaskCrackEngineFancy `json:"engine"`
	FileID            string               `json:"-"` // FileID is a reference to TaskFile via TaskFile.FileID
	Priority          TaskPriorityFancy    `json:"priority"`
	EnginePayload     interface{}          `json:"engine_options"`
	TaskDuration      int                  `json:"task_duration"`
	FileInfo          *TaskFileItem        `json:"password_file"`
	Error             *string              `json:"error,omitempty"`
}

TaskInfoResponseItem defines the response for all the information possible about a given task

type TaskListingResponse

type TaskListingResponse struct {
	Data  []TaskListingResponseItem `json:"data"`
	Count int                       `json:"count"`
}

type TaskListingResponseItem

type TaskListingResponseItem struct {
	TaskID         string             `json:"task_id"`
	TaskName       string             `json:"task_name"`
	CaseCode       string             `json:"case_code"`
	Status         storage.TaskStatus `json:"status"`
	CreatedAt      time.Time          `json:"created_at"`
	CreatedBy      string             `json:"created_by"`
	PasswordsTotal int                `json:"passwords_total"`
	CrackedTotal   int                `json:"cracked_total"`
}

TaskListingResponseItem includes the "bare minimum" information about a task for listing purposes

type TaskPriorityFancy

type TaskPriorityFancy storage.WorkerPriority

func (TaskPriorityFancy) MarshalJSON

func (s TaskPriorityFancy) MarshalJSON() ([]byte, error)

type UploadEngineFileResponse

type UploadEngineFileResponse struct {
	FileID          string `json:"file_id"`
	FileSize        int64  `json:"file_sz"`
	NumberOfEntries int64  `json:"num_of_lines"`
	SHA1            string `json:"sha1"`
}

UploadEngineFileResponse is returned to the user on a successful shared file upload

type UploadedFileResponse

type UploadedFileResponse struct {
	SHA1       string    `json:"sha1"`
	FileUUID   string    `json:"file_uuid"`
	FileSize   int64     `json:"file_size"`
	UploadedAt time.Time `json:"uploaded_at"`
}

UploadedFileResponse is returned on a successful upload

type UserDetailedItem

type UserDetailedItem struct {
	UserUUID     string    `json:"user_uuid"`
	Username     string    `json:"username"`
	Password     string    `json:"-"`
	Enabled      *bool     `json:"enabled,omitempty"`
	EmailAddress string    `json:"email_address"`
	IsSuperUser  bool      `json:"is_admin"`
	CreatedAt    time.Time `json:"created_at"`
}

UserDetailedItem returns all information about a user, minus sensitive information. This should mimick storage.User

type UserListingItem

type UserListingItem struct {
	UserUUID  string    `json:"user_uuid"`
	Username  string    `json:"username"`
	CreatedAt time.Time `json:"created_at"`
}

UserListingItem is an item returned in a user listing API and should mimick storage.User

type WebAPI

type WebAPI func(c *gin.Context) *WebAPIError

WebAPI defines the type of most gocrack API's.

type WebAPIError

type WebAPIError struct {
	StatusCode            int
	UserError             string
	CanErrorBeShownToUser bool
	Err                   error
}

func (WebAPIError) Error

func (e WebAPIError) Error() string

func (*WebAPIError) MarshalJSON

func (e *WebAPIError) MarshalJSON() ([]byte, error)

MarshalJSON builds a JSON version of WebAPIError and modifies the error message based on the struct

type WorkerDevice

type WorkerDevice struct {
	ID     int              `json:"id"`
	Name   string           `json:"name"`
	Type   WorkerDeviceType `json:"type"`
	IsBusy bool             `json:"-"`
}

WorkerDevice contains information about a device attached to a worker. Note: this should mirror shared.Device

type WorkerDeviceType

type WorkerDeviceType struct {
	opencl.DeviceType
}

WorkerDeviceType is the type of hardware device this is. GPU, CPU, FPGA, etc.

func (*WorkerDeviceType) MarshalJSON

func (s *WorkerDeviceType) MarshalJSON() ([]byte, error)

MarshalJSON returns a JSON string of the Device Type

type WorkerItem

type WorkerItem struct {
	Hostname    string          `json:"hostname"`
	LastCheckin time.Time       `json:"last_seen"`
	Devices     []WorkerDevice  `json:"devices"`
	Processes   []WorkerProcess `json:"running_tasks"`
}

WorkerItem describes a connected worker to the system

type WorkerProcess

type WorkerProcess struct {
	TaskID       string `json:"task_id"`
	PID          int    `json:"pid"`
	MemoryUsage  uint64 `json:"memory_usage"`
	RunningFor   string `json:"running_for"`
	UsingDevices []int  `json:"using_devices"`
	CreatedBy    string `json:"created_by"`
}

WorkerProcess describes a cracking process and basic metadata about it

type WorkerResponse

type WorkerResponse []WorkerItem

WorkerResponse contains a list of workers along with information about them

type WorkerVersionInfo

type WorkerVersionInfo struct {
	Hostname      string               `json:"hostname"`
	WorkerVersion string               `json:"version"`
	Engines       shared.EngineVersion `json:"engines"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL