ctfd

package
v0.0.17 Latest Latest
Warning

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

Go to latest
Published: Jun 12, 2022 License: MIT Imports: 15 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// Constants for max file sizes (1mb, 5mb, 25mb, 100mb, 0)
	NoFileSizeLimit    = 0
	OneMB              = 1000000
	FiveMB             = 5000000
	TwentyFiveMB       = 25000000
	OneHundredMB       = 100000000
	TwoHhundredFiftyMB = 250000000
)

Variables

This section is empty.

Functions

func CleanDescription added in v0.0.15

func CleanDescription(description string) string

Clean the description of a CTF event, removing \r\n and limiting the length of the description

func IsCTFEventActive added in v0.0.15

func IsCTFEventActive(event Event) bool

IsCTFEventActive returns true if the CTF event is active based on the start and finish times

Types

type CTFTeam added in v0.0.15

type CTFTeam struct {
	ID           int      `json:"id"`
	Academic     bool     `json:"academic"`
	PrimaryAlias string   `json:"primary_alias"`
	Name         string   `json:"name"`
	Country      string   `json:"country"`
	Aliases      []string `json:"aliases"`
	Rating       map[string]struct {
		RatingPlace     int     `json:"rating_place"`
		OrganizerPoints float64 `json:"organizer_points"`
		RatingPoints    float64 `json:"rating_points"`
		CountryPlace    int     `json:"country_place"`
	} `json:"rating"`
}

Struct for API Endpoint ctftime.org/api/v1/teams/

type Challenge

type Challenge struct {
	ID             int64  `json:"id"`
	Name           string `json:"name"`
	Description    string `json:"description"`
	ConnectionInfo string `json:"connection_info"`
	// NextID       int64  `json:"next_id"`
	Attempts    int64  `json:"attempts"`
	MaxAttempts int64  `json:"max_attempts"`
	Value       int64  `json:"value"`
	Category    string `json:"category"`
	Type        string `json:"type"`
	TypeData    struct {
		ID        string `json:"id"`
		Name      string `json:"name"`
		Templates struct {
			Create string `json:"create"`
			Update string `json:"update"`
			View   string `json:"view"`
		} `json:"templates"`
		Scripts struct {
			Create string `json:"create"`
			Update string `json:"update"`
			View   string `json:"view"`
		} `json:"scripts"`
	} `json:"type_data"`
	State string `json:"state"`
	// Requirements []struct {
	// 	ID   int64  `json:"id"`
	// 	Name string `json:"name"`
	// } `json:"requirements"`
	Solves     int64         `json:"solves"`
	SolvedByMe bool          `json:"solved_by_me"`
	Files      []string      `json:"files"`
	Hints      []Hint        `json:"hints"`
	Tags       []interface{} `json:"tags"`
}

type ChallengeData

type ChallengeData struct {
	ID         int64  `json:"id"`
	Type       string `json:"type"`
	Name       string `json:"name"`
	Value      int64  `json:"value"`
	Solves     int64  `json:"solves"`
	SolvedByMe bool   `json:"solved_by_me"`
	Category   string `json:"category"`
}

type Client

type Client struct {
	Client      *http.Client
	BaseURL     *url.URL
	Creds       *Credentials
	MaxFileSize int64
}

func NewClient

func NewClient(transport http.RoundTripper) *Client

NewClient constructs a new Client. If transport is nil, a default transport is used.

func (*Client) Authenticate

func (c *Client) Authenticate() error

Authenticate will attempt to authenticate the client with the provided username and password.

func (*Client) Challenge

func (c *Client) Challenge(id int64) (*Challenge, error)

Challenge returns a challenge by ID

func (*Client) Check

func (c *Client) Check() error

Check will check if the instance is a CTFd instance.

func (*Client) DownloadFiles

func (c *Client) DownloadFiles(id int64, outputPath string) error

DownloadFiles will download all the files of a challenge by ID and save them to the given directory

func (*Client) GetCTFEvent added in v0.0.15

func (c *Client) GetCTFEvent(id int) (Event, error)

Retrieve information about a specific CTF event on CTFTime

func (*Client) GetCTFEvents added in v0.0.15

func (c *Client) GetCTFEvents() ([]Event, error)

Retrieve information about all CTF events on CTFTime

func (*Client) GetCTFTeam added in v0.0.15

func (c *Client) GetCTFTeam(id int) (CTFTeam, error)

Get information about a specific team on CTFTime

func (*Client) GetDescription

func (c *Client) GetDescription(challenge *Challenge, challengePath string) error

GetDescription retrieves a challenge and returns a writeup template of the challenge

func (*Client) GetTopTeams added in v0.0.15

func (c *Client) GetTopTeams() ([]TopTeam, error)

Get the top teams on CTFTime

func (*Client) ListChallenges

func (c *Client) ListChallenges() ([]ChallengeData, error)

ListChallenges returns a list of challenges

func (*Client) ScoreboardTop added in v0.0.2

func (c *Client) ScoreboardTop(count int64) (TopTeamData, error)

ScoreboardTop returns the top teams on the scoreboard

type Credentials added in v0.0.2

type Credentials struct {
	Username string
	Password string
}

type Event added in v0.0.15

type Event struct {
	CreatedAt time.Time
	UpdatedAt time.Time
	DeletedAt time.Time

	Hidden bool

	ID            uint64    `json:"id"`
	CTFID         int       `json:"ctf_id"`
	Title         string    `json:"title"`
	Description   string    `json:"description"`
	URL           string    `json:"url"`
	URLIsCTFD     bool      `json:"url_is_ctfd"`
	Weight        float64   `json:"weight"`
	Onsite        bool      `json:"onsite"`
	Location      string    `json:"location"`
	Restrictions  string    `json:"restrictions"`
	Format        string    `json:"format"`
	FormatID      int       `json:"format_id"`
	Participants  int       `json:"participants"`
	CTFTimeURL    string    `json:"ctftime_url"`
	LiveFeed      string    `json:"live_feed"`
	IsVotableNow  bool      `json:"is_votable_now"`
	PublicVotable bool      `json:"public_votable"`
	Start         time.Time `json:"start"`
	Finish        time.Time `json:"finish"`
}

Struct for API Endpoint ctftime.org/api/v1/events/

func CleanCTFEvents added in v0.0.15

func CleanCTFEvents(events []Event) ([]Event, error)

CleanCTFEvents will clean the CTF events, removing any events that are not "Open", are on-site, are not of jeopardy style or that have finished

type Hint

type Hint struct {
	ID      int64  `json:"id"`
	Cost    int64  `json:"cost"`
	Content string `json:"content"`
}

type Solves added in v0.0.2

type Solves struct {
	ChallengeID interface{} `json:"challenge_id"`
	AccountID   int         `json:"account_id"`
	TeamID      int         `json:"team_id"`
	UserID      int         `json:"user_id"`
	Value       int         `json:"value"`
	Date        time.Time   `json:"date"`
}

type Team added in v0.0.2

type Team struct {
	ID     int      `json:"id"`
	Name   string   `json:"name"`
	Solves []Solves `json:"solves"`
}

type TopTeam added in v0.0.15

type TopTeam struct {
	TeamName string  `json:"team_name"`
	Points   float64 `json:"points"`
	TeamID   int     `json:"team_id"`
}

type TopTeamData added in v0.0.2

type TopTeamData struct {
	Num1  Team `json:"1"`
	Num2  Team `json:"2"`
	Num3  Team `json:"3"`
	Num4  Team `json:"4"`
	Num5  Team `json:"5"`
	Num6  Team `json:"6"`
	Num7  Team `json:"7"`
	Num8  Team `json:"8"`
	Num9  Team `json:"9"`
	Num10 Team `json:"10"`
}

func (*TopTeamData) GetTeam added in v0.0.2

func (d *TopTeamData) GetTeam(number int) (*Team, error)

GetTeam returns the team information for a given team ID !TODO: This needs to be refactored to allow for a list of any number of teams

type TopTeams added in v0.0.15

type TopTeams struct {
	Teams []TopTeam `json:"2022"`
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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