Use mow.cli instead of flag
and some minor changes I dont wanna seperate with git add -p
This commit is contained in:
@@ -2,7 +2,6 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
@@ -12,57 +11,66 @@ import (
|
||||
"syscall"
|
||||
|
||||
"git.marceltransier.de/lsf"
|
||||
cli "github.com/jawher/mow.cli"
|
||||
"github.com/pkg/errors"
|
||||
"golang.org/x/crypto/ssh/terminal"
|
||||
)
|
||||
|
||||
var (
|
||||
sessionCache string
|
||||
username string
|
||||
showGrades bool
|
||||
sessionCacheDir *string
|
||||
username *string
|
||||
)
|
||||
|
||||
func init() {
|
||||
homeDir, err := os.UserHomeDir()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
defaultCacheDir := path.Join(homeDir, ".cache/go-lsf/sessions")
|
||||
flag.StringVar(&sessionCache, "session-cache", defaultCacheDir, "path where the session tokens are located")
|
||||
flag.StringVar(&username, "username", "", "username to login with in lsf")
|
||||
flag.BoolVar(&showGrades, "noten", false, "list grades")
|
||||
flag.Parse()
|
||||
|
||||
err = os.MkdirAll(sessionCache, os.ModePerm)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
var s *lsf.Session
|
||||
|
||||
func main() {
|
||||
if len(username) == 0 {
|
||||
var err error
|
||||
username, err = readUsername()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
s, err := session(username)
|
||||
cacheDir, err := os.UserCacheDir()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
defaultSessionCacheDir := path.Join(cacheDir, "go-lsf/sessions")
|
||||
|
||||
if showGrades {
|
||||
app := cli.App("lsf", "LSF Shutthe Fuckup")
|
||||
|
||||
sessionCacheDir = app.StringOpt("c session-cache-dir", defaultSessionCacheDir, "path to where the session tokens are cached")
|
||||
username = app.StringOpt("u username", "", "username to login with")
|
||||
|
||||
app.Command("grades", "view your grades", cmdGrades)
|
||||
//app.Command("events", "show your personalized events", cmdEvents)
|
||||
//app.Command("reports", "download reports", cmdReports)
|
||||
//app.Command("courses", "show courses", cmdCourses)
|
||||
|
||||
app.Run(os.Args)
|
||||
}
|
||||
|
||||
func cmdGrades(cmd *cli.Cmd) {
|
||||
cmd.Before = sessionNeeded
|
||||
cmd.Action = func() {
|
||||
noten, err := s.Noten()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
fmt.Println("Noten:")
|
||||
for _, note := range noten {
|
||||
fmt.Println(note)
|
||||
noten.Print()
|
||||
}
|
||||
}
|
||||
|
||||
func sessionNeeded() {
|
||||
err := os.MkdirAll(*sessionCacheDir, os.ModePerm)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
if len(*username) == 0 {
|
||||
var err error
|
||||
*username, err = readUsername()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
s, err = session(*username)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func readUsername() (string, error) {
|
||||
@@ -88,7 +96,8 @@ func readPassword() (string, error) {
|
||||
}
|
||||
|
||||
func session(username string) (*lsf.Session, error) {
|
||||
sessionPath := path.Join(sessionCache, username)
|
||||
|
||||
sessionPath := path.Join(*sessionCacheDir, username)
|
||||
sessionFile, err := os.Open(sessionPath)
|
||||
if err != nil {
|
||||
pErr, ok := err.(*os.PathError)
|
||||
@@ -135,7 +144,7 @@ func login(username string) (*lsf.Session, error) {
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
sessionPath := path.Join(sessionCache, username)
|
||||
sessionPath := path.Join(*sessionCacheDir, username)
|
||||
err = ioutil.WriteFile(sessionPath, []byte(s.SID), 0666)
|
||||
if err != nil {
|
||||
log.Println(errors.Wrap(err, "could not cache session id"))
|
||||
|
Reference in New Issue
Block a user