333e784ce92277b039df5ae28b1eb2a20de84f96
The Canvas app authenticates ExternalUrl items via: GET session_token?return_to=<module_item_redirect>?display=borderless → GET session_url → OAuth2 confirm → POST /login/oauth2/accept → Panopto Login.aspx?code= → CookieCheck.aspx (sets Panopto cookies) Our previous code used sessionless_launch (the course-level Panopto tool) for direct Panopto links, which gave wrong/incomplete Panopto cookies. Added DownloadExternalPanoptoURL() that replicates the exact app flow. Falls back to DownloadVideo if no Panopto cookies are obtained. Both List.aspx (folder playlists) and Viewer.aspx (single videos) are handled with the correct yt-dlp flags and output templates.
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
-
Run the archiver:
./canvasarchiverOr for files-only mode:
./canvasarchiver -fo -
On first run, you'll be prompted to authenticate:
- Visit the provided OAuth URL
- Authorize the application
- Copy the authorization code back to the terminal
-
Enter your Course ID when prompted (or use
-meto download all enrolled courses) -
The tool will download:
- Regular course files (to
Course Files/) - Module content (to
Modules/) - Panopto recordings (to
Recordings/)
- Regular course files (to
Flags
| Flag | Description |
|---|---|
-fo |
Files only mode - download all files to a single directory without module structure |
-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 URLClientID: OAuth client IDClientSecret: OAuth client secretPanoptoID: Panopto external tool ID
Authentication
Credentials are stored in credentials.json after the first successful login. The refresh token is automatically used for subsequent runs.
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.
Description
Languages
Go
97.8%
Makefile
2.2%