mirror of
https://codeberg.org/flpolyaplus/aplus.git
synced 2024-11-23 18:00:29 -05:00
use the Canvas API to get A+ tool ID and URL
Was previously hardcoded.
This commit is contained in:
parent
b966951c47
commit
23226c46a1
@ -2,7 +2,7 @@
|
||||
|
||||
This is an cli utility initially created for students at Florida Polytechnic University to submit their aplus codes.
|
||||
In time, we intend to generalize this utility to all universities.
|
||||
In the meantime however, any students from other universities wishing to use the utility may change the base_link and external_tools_code (you see this in the URL when you navigate to Aplus attendance within your course) variables.
|
||||
In the meantime however, any students from other universities wishing to use the utility may change the instance_url (the main URL you see before the / when you use Canvas) variables.
|
||||
|
||||
## Usage
|
||||
|
||||
|
7
aplus.go
7
aplus.go
@ -7,6 +7,7 @@ import (
|
||||
"io"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"os"
|
||||
"strings"
|
||||
)
|
||||
|
||||
@ -60,6 +61,12 @@ func submit_code(course_code int, attendance_code string) {
|
||||
}
|
||||
|
||||
func launch_aplus(course_code int) string {
|
||||
err := init_aplus_toolid(course_code)
|
||||
if err != nil {
|
||||
fmt.Println("Failed to get A+ base URL and tool ID")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
aplus_link := fmt.Sprintf("%s/courses/%d/external_tools/sessionless_launch?id=%d&access_token=%s",
|
||||
base_link, course_code, external_tools_code, token)
|
||||
aplus := get_aplus(token, aplus_link, client)
|
||||
|
32
canvas.go
32
canvas.go
@ -2,20 +2,21 @@ package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"net/http/cookiejar"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"golang.org/x/net/publicsuffix"
|
||||
)
|
||||
|
||||
func initialize() {
|
||||
base_link = "https://floridapolytechnic.instructure.com/api/v1"
|
||||
base_aplus_link = "https://floridapoly.aplusattendance.com/canvas"
|
||||
instance_url := "https://floridapolytechnic.instructure.com"
|
||||
base_link = instance_url + "/api/v1"
|
||||
token = os.Getenv("CANVAS_API_KEY")
|
||||
external_tools_code = 913
|
||||
jar, _ := cookiejar.New(&cookiejar.Options{
|
||||
PublicSuffixList: publicsuffix.List,
|
||||
})
|
||||
@ -49,6 +50,31 @@ func get_courses(token string, link string, client http.Client) []CanvasCourse {
|
||||
return canvas_courses
|
||||
}
|
||||
|
||||
func init_aplus_toolid(course_id int) error {
|
||||
link := fmt.Sprintf("%s/courses/%d/external_tools?access_token=%s&search_term=aplus&include_parents=true", base_link, course_id, token)
|
||||
resp, err := client.Get(link)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
body, _ := io.ReadAll(resp.Body)
|
||||
|
||||
var external_tools []ExternalTool
|
||||
err = json.Unmarshal(body, &external_tools)
|
||||
if err != nil && !strings.Contains(string(body), "\"unauthorized\"") {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, tool := range external_tools {
|
||||
if strings.Contains(tool.URL, ".aplusattendance.com/") && base_aplus_link == "" {
|
||||
base_aplus_link = tool.URL
|
||||
external_tools_code = tool.ID
|
||||
}
|
||||
}
|
||||
|
||||
return errors.New("Could not find A+ link and tool ID")
|
||||
}
|
||||
|
||||
func list_all_courses() {
|
||||
all_courses := fmt.Sprintf("%s/courses?access_token=%s&per_page=100", base_link, token)
|
||||
|
||||
|
2
main.go
2
main.go
@ -9,9 +9,7 @@ import (
|
||||
)
|
||||
|
||||
var base_link string
|
||||
var base_aplus_link string
|
||||
var token string
|
||||
var external_tools_code int
|
||||
var client http.Client
|
||||
|
||||
func main() {
|
||||
|
@ -54,3 +54,9 @@ type Enrollment struct {
|
||||
EnrollmentState string `json:"enrollment_state"`
|
||||
LimitPrivilegesToCourseSection bool `json:"limit_privileges_to_course_section"`
|
||||
}
|
||||
|
||||
type ExternalTool struct {
|
||||
ID int `json:"id"`
|
||||
URL string `json:"url"`
|
||||
Status string `json:"status"`
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user