Files
CanvasArchiver/cmd/canvasarchiver/main.go
2026-03-11 17:37:18 +01:00

51 lines
1.2 KiB
Go

package main
import (
"flag"
"fmt"
"net/http"
"os"
"git.directme.in/Joren/CanvasArchiver/internal/auth"
"git.directme.in/Joren/CanvasArchiver/internal/canvas"
"git.directme.in/Joren/CanvasArchiver/internal/panopto"
"git.directme.in/Joren/CanvasArchiver/internal/utils"
)
func main() {
filesOnly := flag.Bool("fo", false, "Files only mode - download all files to a single directory without module structure")
flag.Parse()
httpClient := &http.Client{}
authenticator := auth.NewAuthenticator(httpClient)
accessToken, err := authenticator.GetAccessToken()
if err != nil {
fmt.Printf("Authentication failed: %v\n", err)
return
}
var courseID string
fmt.Print("Enter Course ID: ")
fmt.Scanln(&courseID)
canvasClient := canvas.NewClient(httpClient, accessToken, courseID, *filesOnly)
if err := canvasClient.GetCourseInfo(); err != nil {
fmt.Printf("Error: %v\n", err)
return
}
courseRoot := utils.Sanitize(canvasClient.CourseName)
fmt.Printf("[+] Target Course: %s\n", canvasClient.CourseName)
os.MkdirAll(courseRoot, 0o755)
canvasClient.DownloadCourseFiles(courseRoot)
canvasClient.DownloadModules(courseRoot)
if !*filesOnly {
panopto.DownloadMainRecordings(httpClient, accessToken, courseID, courseRoot)
}
}