- Added support for
git subrepo
instead of onlygit subtree
- Added the
--create
switch toctf challenge mirror
to create local copies of challenges that exist on a remote CTFd instance
ctf challenge {push, pull}
will now push / pull all challenges instead of the challenge in the current working directory.
- Use
--load
switch as part of docker build to support alternate build drivers
- Before uploading files to CTFd, ctfcli will check for CTFd's SHA1 hash of the previously uploaded file and skip uploading if it is the same
- Support using remote Docker images instead of having to build and push local images
- Added
ctf challenge mirror
command to pull changes from the remote CTFd instance into the local project
- Properly include challenge.yml when generating a challenge from a template
- No longer require a ctfcli project to run all
ctf challenge
(e.g.new
,format
,lint
)
- ctfcli has been separated into two main modules
cli
andcore
. Thecore
module now packages logic previously found insideutils
, wrapped into classes. - The classes in the
core
module will only print out warnings instead of interrupting the whole process. Everything else will throw exceptions which can be caught and handled however desired cli
andcore
internal modules have type hints- Improved error messages
- Unit tests have been added for the entire
core
module - ctfcli will now ask to initialize a new project if one does not exist
- Added
--hidden
toctf challenge install
which will deploy the challenge / challenges in a hidden state regardless of theirchallenge.yml
value. - Added
ctf challenge edit <name>
andctf challenge edit <name> --dockerfile
to open challenge.yml or Dockerfile for that challenge - Added aliases under
ctf templates
andctf plugins
fordir
(path
) and forview
(show
) - Progress bars for
ctf challenge deploy
/ctf challenge install
/ctf challenge sync
ctf challenge deploy
will now deploy ALL deployable challenges if a specific challenge is not specified- For the SSH and Registry deployments, to facilitate this behaviour the challenge name will be automatically appended. So the host should be for example:
registry://registry.example.com/example-project
and the challenge name will be appended for a full location.
- For the SSH and Registry deployments, to facilitate this behaviour the challenge name will be automatically appended. So the host should be for example:
ctf challenge deploy
will now also automatically login to the registry with Cloud and Registry deployments.- For cloud deployments the instance url must be ctfd assigned (e.g. example.ctfd.io) - this is because to log-in to the registry we require a username like
[email protected]
. The deployment will use the access token as the password. - For registry deployment it will look for the
username
andpassword
keys inside a[registry]
section in the project config file.
- For cloud deployments the instance url must be ctfd assigned (e.g. example.ctfd.io) - this is because to log-in to the registry we require a username like
- ctfcli will read a
LOGLEVEL
environment variable to enable DEBUG logging has been added
- When syncing a challenge to a remote instance, state specified in challenge.yml will now be ignored to prevent accidental challenge leaking
- The CLI will now exit with a 0 if everything went right, and 1 if something went wrong.
- With
install
/sync
/deploy
- exit code will be 1 if ANY of the challenges failed toinstall
/sync
/deploy
.
- With
- Built using poetry and
pyproject.toml
python-fire
has been updated to 0.5.0
- Removed the
ctf challenge finalize
command
- Add env variable
CTFCLI_PLUGIN_DIR
to override the default plugin dir for development. - Add
--directory
argument toctfcli challenge add
- Can also be called as
ctf challenge add [email protected]:repo.git directory
- Useful for grouping challenges into separate directories like:
web/challenge1
.
- Can also be called as
connection_info
specified in challenge.yml will be used instead of details generated by a deploy handler
- Bump PyYAML version to 6.0.1
- Add cloud deploy for hosted CTFd instances
- Add the
protocol
field in the challenge.yml spec - Further define what other deployment methods should provide & return
- Add the ability to add HTTP cookies to ctfcli requests via the config file
- Allow ignoring category during challenge sync
- Added a restart policy and container name to services deployed via ssh
- Added
--yaml-path
toctf challenge add
to specify a specificchallenge.yml
path that will be added to the .ctf config
- Fixed issue in
ctf templates list
where not all templates would be listed - Bumped version of dependencies to support Python 3.11
- Bumped
cookiecutter
to 2.1.1 - Bumped
requests
to 2.28.1 - Bumped
colorama
to 0.4.6
- Bumped
- Add support for pages in event repos
- Add the
ctf pages install
command that looks for markdown and html files with frontmatter in a special pages folder
- Add the
- Add
healthcheck
key inchallenge.yml
to specify a healthcheck script- Add
ctf challenge healthcheck [challenge_name]
- Add
- Add
ssl_verify
in the.ctf/config
file to support SSL verification disabling.ssl_verify
can betrue
orfalse
or a string (specifying the trusted SSL certificates) - Adds a
--no-git
option toctf init
to skip git repo creation in event folder
- Allow empty string in CTFd URL and CTFd access token values for
ctf init
ctf init
will not attempt to create git repos when the event folder is in a git repo alreadyctf init <folder>
can now be used to create the event folder instead of creating the folder beforehand
- Fix issue in
ctf challenge add
where challenges weren't being added to.ctf/config
- Fix issue where plugins couldnt be installed if only pip3 was available
ctf challenge add/update/restore
will now use git subtrees when working with git repos instead of direct cloningctf challenge push [challenge]
can now be used to push local changes to the upstream challenge repo- Added challenge topics from CTFd 3.4 to the challenge.yml spec
- Added challenge topics from CTFd 3.4 to the challenge
sync
andinstall
commands - Added challenge connection_info from CTFd 3.4 to the challenge.yml spec
- Added challenge connection_info from CTFd 3.4 to the challenge
sync
andinstall
commands
- Added an
extra
field in challenge specification to support different CTFd challenge types- This adds support for dynamic value challenges in CTFd > 3.3.0 (Must have commit df27d0e7a9e336b86165d41920aa176db4ff0e06).
- Improved
ctf challenge lint
to catch some common mistakes in a challenge - Added an
--ignore
flag toctf challenge install
andctf challenge sync
to disable installation of certain challenge properties (e.g. flags, tags, hints, etc).- Usage:
ctf challenge install challenge.yml --ignore=flags,tags
- Usage:
ctf challenge install --ignore=flags,tags
- Usage:
ctf challenge sync challenge.yml --ignore=flags,tags
- Usage:
ctf challenge sync --ignore=flags,tags
- Usage:
- Automatic releases from Github to PyPI
- Fix web challenge template for serve.sh
- Changed all Alpine images in Dockerfiles to use Debian
- Add examples or more complicated flag creation examples to challenge specification
- Added the following commands:
ctf templates install [repo] ctf templates uninstall [folder] ctf templates dir ctf templates list ctf challenge templates
- Modified
ctf challenge new
to accept and search through installed third-party templates - Added a parameter to
ctf challenge update
to allow updating a single challenge - Added a login system for the default web template
- Added a blank challenge template
- Moved challenge template writeups into their own dedicated folder
- Fixed an issue when using CTFd in a subdirectory
- Properly default the challenge state to visible during sync
- Added
state
parameter to control whether a challenge is visible or not - Make the
ctf challenge restore
command be able to take arguments to only restore one challenge - Add an
ctf challenge update
command to get the latest version of challenges
- Fix the sync and install commands to properly install challenge files relative to the
challenge.yml
path - Update dependencies in the web challenge template
ctfcli
will now load all challenges regardless of visibility when using an admin token. Requires CTFd v2.5.0
ctf init
now saves the CTFdaccess_token
properly
- Initial release of ctfcli
ctf init
commandsctf challenge
commandsctf config
commandsctf plugins
commands- README and basic example on plugins
- Nothing
- Removed initial stub release from source control
- Initial stub release of ctfcli
- Nothing
- Nothing