mirror of
https://github.com/crunchy-labs/crunchy-cli.git
synced 2026-01-21 12:12:00 -06:00
Merge branch 'next/v3' into v3/feature/encrypted-credentials
This commit is contained in:
commit
a20c70cd2b
23 changed files with 762 additions and 162 deletions
|
|
@ -8,8 +8,8 @@ import (
|
|||
"compress/gzip"
|
||||
"context"
|
||||
"fmt"
|
||||
"github.com/ByteDream/crunchyroll-go/v2"
|
||||
"github.com/ByteDream/crunchyroll-go/v2/utils"
|
||||
"github.com/ByteDream/crunchyroll-go/v3"
|
||||
"github.com/ByteDream/crunchyroll-go/v3/utils"
|
||||
"github.com/grafov/m3u8"
|
||||
"github.com/spf13/cobra"
|
||||
"io"
|
||||
|
|
|
|||
|
|
@ -3,8 +3,8 @@ package cmd
|
|||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"github.com/ByteDream/crunchyroll-go/v2"
|
||||
"github.com/ByteDream/crunchyroll-go/v2/utils"
|
||||
"github.com/ByteDream/crunchyroll-go/v3"
|
||||
"github.com/ByteDream/crunchyroll-go/v3/utils"
|
||||
"github.com/grafov/m3u8"
|
||||
"github.com/spf13/cobra"
|
||||
"math"
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ import (
|
|||
"crypto/rand"
|
||||
"crypto/sha256"
|
||||
"fmt"
|
||||
"github.com/ByteDream/crunchyroll-go/v2"
|
||||
"github.com/ByteDream/crunchyroll-go/v3"
|
||||
"github.com/spf13/cobra"
|
||||
"io"
|
||||
"os"
|
||||
|
|
@ -19,6 +19,7 @@ var (
|
|||
loginEncryptFlag bool
|
||||
|
||||
loginSessionIDFlag bool
|
||||
loginEtpRtFlag bool
|
||||
)
|
||||
|
||||
var loginCmd = &cobra.Command{
|
||||
|
|
@ -29,6 +30,8 @@ var loginCmd = &cobra.Command{
|
|||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
if loginSessionIDFlag {
|
||||
return loginSessionID(args[0])
|
||||
} else if loginEtpRtFlag {
|
||||
return loginEtpRt(args[0])
|
||||
} else {
|
||||
return loginCredentials(args[0], args[1])
|
||||
}
|
||||
|
|
@ -49,6 +52,10 @@ func init() {
|
|||
"session-id",
|
||||
false,
|
||||
"Use a session id to login instead of username and password")
|
||||
loginCmd.Flags().BoolVar(&loginEtpRtFlag,
|
||||
"etp-rt",
|
||||
false,
|
||||
"Use a etp rt cookie to login instead of username and password")
|
||||
|
||||
rootCmd.AddCommand(loginCmd)
|
||||
}
|
||||
|
|
@ -129,6 +136,12 @@ func loginCredentials(user, password string) error {
|
|||
}
|
||||
}
|
||||
}
|
||||
<<<<<<< v3/feature/encrypted-credentials
|
||||
=======
|
||||
if err = os.WriteFile(filepath.Join(os.TempDir(), ".crunchy"), []byte(c.EtpRt), 0600); err != nil {
|
||||
return err
|
||||
}
|
||||
>>>>>>> next/v3
|
||||
|
||||
if !loginPersistentFlag {
|
||||
out.Info("Due to security reasons, you have to login again on the next reboot")
|
||||
|
|
@ -139,7 +152,38 @@ func loginCredentials(user, password string) error {
|
|||
|
||||
func loginSessionID(sessionID string) error {
|
||||
out.Debug("Logging in via session id")
|
||||
if _, err := crunchyroll.LoginWithSessionID(sessionID, systemLocale(false), client); err != nil {
|
||||
var c *crunchyroll.Crunchyroll
|
||||
var err error
|
||||
if c, err = crunchyroll.LoginWithSessionID(sessionID, systemLocale(false), client); err != nil {
|
||||
out.Err(err.Error())
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
if loginPersistentFlag {
|
||||
if configDir, err := os.UserConfigDir(); err != nil {
|
||||
return fmt.Errorf("could not save credentials persistent: %w", err)
|
||||
} else {
|
||||
os.MkdirAll(filepath.Join(configDir, "crunchyroll-go"), 0755)
|
||||
if err = os.WriteFile(filepath.Join(configDir, "crunchyroll-go", "crunchy"), []byte(c.EtpRt), 0600); err != nil {
|
||||
return err
|
||||
}
|
||||
out.Info("The login information will be stored permanently UNENCRYPTED on your drive (%s)", filepath.Join(configDir, "crunchyroll-go", "crunchy"))
|
||||
}
|
||||
}
|
||||
if err = os.WriteFile(filepath.Join(os.TempDir(), ".crunchy"), []byte(c.EtpRt), 0600); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if !loginPersistentFlag {
|
||||
out.Info("Due to security reasons, you have to login again on the next reboot")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func loginEtpRt(etpRt string) error {
|
||||
out.Debug("Logging in via etp rt")
|
||||
if _, err := crunchyroll.LoginWithEtpRt(etpRt, systemLocale(false), client); err != nil {
|
||||
out.Err(err.Error())
|
||||
os.Exit(1)
|
||||
}
|
||||
|
|
@ -150,13 +194,13 @@ func loginSessionID(sessionID string) error {
|
|||
return fmt.Errorf("could not save credentials persistent: %w", err)
|
||||
} else {
|
||||
os.MkdirAll(filepath.Join(configDir, "crunchyroll-go"), 0755)
|
||||
if err = os.WriteFile(filepath.Join(configDir, "crunchyroll-go", "crunchy"), []byte(sessionID), 0600); err != nil {
|
||||
if err = os.WriteFile(filepath.Join(configDir, "crunchyroll-go", "crunchy"), []byte(etpRt), 0600); err != nil {
|
||||
return err
|
||||
}
|
||||
out.Info("The login information will be stored permanently UNENCRYPTED on your drive (%s)", filepath.Join(configDir, "crunchyroll-go", "crunchy"))
|
||||
}
|
||||
}
|
||||
if err = os.WriteFile(filepath.Join(os.TempDir(), ".crunchy"), []byte(sessionID), 0600); err != nil {
|
||||
if err = os.WriteFile(filepath.Join(os.TempDir(), ".crunchy"), []byte(etpRt), 0600); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ package cmd
|
|||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"github.com/ByteDream/crunchyroll-go/v2"
|
||||
"github.com/ByteDream/crunchyroll-go/v3"
|
||||
"github.com/spf13/cobra"
|
||||
"net/http"
|
||||
"os"
|
||||
|
|
|
|||
|
|
@ -5,8 +5,8 @@ import (
|
|||
"crypto/cipher"
|
||||
"crypto/sha256"
|
||||
"fmt"
|
||||
"github.com/ByteDream/crunchyroll-go/v2"
|
||||
"github.com/ByteDream/crunchyroll-go/v2/utils"
|
||||
"github.com/ByteDream/crunchyroll-go/v3"
|
||||
"github.com/ByteDream/crunchyroll-go/v3/utils"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"os"
|
||||
|
|
@ -150,10 +150,10 @@ func loadCrunchy() {
|
|||
out.StopProgress("Failed to read login information: %v", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
if crunchy, err = crunchyroll.LoginWithSessionID(url.QueryEscape(string(body)), systemLocale(true), client); err != nil {
|
||||
out.Debug("Failed to login with temp session id: %w", err)
|
||||
if crunchy, err = crunchyroll.LoginWithEtpRt(url.QueryEscape(string(body)), systemLocale(true), client); err != nil {
|
||||
out.Debug("Failed to login with temp etp rt cookie: %v", err)
|
||||
} else {
|
||||
out.Debug("Logged in with session id %s. BLANK THIS LINE OUT IF YOU'RE ASKED TO POST THE DEBUG OUTPUT SOMEWHERE", body)
|
||||
out.Debug("Logged in with etp rt cookie %s. BLANK THIS LINE OUT IF YOU'RE ASKED TO POST THE DEBUG OUTPUT SOMEWHERE", body)
|
||||
|
||||
out.StopProgress("Logged in")
|
||||
return
|
||||
|
|
@ -170,6 +170,7 @@ func loadCrunchy() {
|
|||
}
|
||||
split := strings.SplitN(string(body), "\n", 2)
|
||||
if len(split) == 1 || split[1] == "" {
|
||||
<<<<<<< v3/feature/encrypted-credentials
|
||||
if strings.HasPrefix(split[0], "aes:") {
|
||||
encrypted := body[4:]
|
||||
|
||||
|
|
@ -213,14 +214,23 @@ func loadCrunchy() {
|
|||
}
|
||||
|
||||
if len(split) == 2 {
|
||||
=======
|
||||
split[0] = url.QueryEscape(split[0])
|
||||
if crunchy, err = crunchyroll.LoginWithEtpRt(split[0], systemLocale(true), client); err != nil {
|
||||
out.StopProgress(err.Error())
|
||||
os.Exit(1)
|
||||
}
|
||||
out.Debug("Logged in with etp rt cookie %s. BLANK THIS LINE OUT IF YOU'RE ASKED TO POST THE DEBUG OUTPUT SOMEWHERE", split[0])
|
||||
} else {
|
||||
>>>>>>> next/v3
|
||||
if crunchy, err = crunchyroll.LoginWithCredentials(split[0], split[1], systemLocale(true), client); err != nil {
|
||||
out.StopProgress(err.Error())
|
||||
os.Exit(1)
|
||||
}
|
||||
out.Debug("Logged in with session id %s. BLANK THIS LINE OUT IF YOU'RE ASKED TO POST THE DEBUG OUTPUT SOMEWHERE", crunchy.SessionID)
|
||||
// the session id is written to a temp file to reduce the amount of re-logging in.
|
||||
out.Debug("Logged in with etp rt cookie %s. BLANK THIS LINE OUT IF YOU'RE ASKED TO POST THE DEBUG OUTPUT SOMEWHERE", crunchy.EtpRt)
|
||||
// the etp rt is written to a temp file to reduce the amount of re-logging in.
|
||||
// it seems like that crunchyroll has also a little cooldown if a user logs in too often in a short time
|
||||
os.WriteFile(filepath.Join(os.TempDir(), ".crunchy"), []byte(crunchy.SessionID), 0600)
|
||||
os.WriteFile(filepath.Join(os.TempDir(), ".crunchy"), []byte(crunchy.EtpRt), 0600)
|
||||
}
|
||||
|
||||
out.StopProgress("Logged in")
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"github.com/ByteDream/crunchyroll-go/v2/cmd/crunchyroll-go/cmd"
|
||||
"github.com/ByteDream/crunchyroll-go/v3/cmd/crunchyroll-go/cmd"
|
||||
)
|
||||
|
||||
func main() {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue