Files
CanvasArchiver/README.md
Joren 07fade16d3 feat: interactive auth method selection with API token validation
- Add GetToken() as unified auth entry point with method selection
- Prompt [1] OAuth / [2] API token on first launch, save choice
- Validate API tokens against /api/v1/users/self before saving
- Check saved API token validity on reuse; fallback to re-prompt on failure
- Add HTTP status check to GetCourseInfo and GetEnrolledCourses
- Remove --api flag, auth method is now persistent and interactive
2026-06-19 21:17:00 +02:00

2.5 KiB

Canvas Archiver

A command-line tool to archive Canvas LMS course content, including files, modules, and Panopto video recordings.

Prerequisites

  • Go 1.21 or higher
  • yt-dlp installed and in PATH

Installation

git clone git.directme.in/Joren/CanvasArchiver
cd CanvasArchiver
go build -o canvasarchiver ./cmd/canvasarchiver

Usage

  1. Run the archiver:

    ./canvasarchiver
    

    Or for files-only mode (all files flat, no videos):

    ./canvasarchiver -fo
    

    Or for videos-only mode (all Panopto videos flat, no files):

    ./canvasarchiver -vo
    
  2. On first run, you'll be prompted to choose an authentication method:

    • [1] Login via browser (OAuth): Visit the provided URL, authorize, and paste the code
    • [2] Use Canvas API token: Enter a manually generated API token (e.g. 12230~...)

    The choice is saved and reused on subsequent runs.

  3. Enter your Course ID when prompted (or use -me to download all enrolled courses)

  4. The tool will download:

    • Regular course files (to Course Files/)
    • Module content (to Modules/)
    • Panopto recordings (to Recordings/)

    In -vo mode, only videos are downloaded — all into the course root directory (no subdirectories).

Flags

Flag Description
-fo Files only — download all files flat into one directory; skips videos and module structure
-vo Videos only — scan recordings and all module video items, download everything flat into one directory; skips regular files
-me Download all enrolled courses
-n Prefix modules with order numbers [1], [2], etc.

Configuration

The following constants can be modified in internal/config/config.go:

  • BaseURL: Canvas instance URL
  • ClientID: OAuth client ID
  • ClientSecret: OAuth client secret
  • PanoptoID: Panopto external tool ID

Authentication

Credentials are stored in credentials.json after the first successful authentication. The chosen method is remembered for subsequent runs — OAuth refresh tokens are automatically refreshed, and API tokens are validated before saving.

Notes

  • Files are organized to match Canvas structure
  • SubHeaders in modules create nested folder structures
  • Videos are downloaded with their original titles
  • Existing files are skipped to avoid re-downloading

License

This project is for educational purposes. Ensure you have permission to download course content.