59 lines
1.8 KiB
Go
59 lines
1.8 KiB
Go
|
|
package ooapi
|
||
|
|
|
||
|
|
import (
|
||
|
|
"crypto/rand"
|
||
|
|
"encoding/base64"
|
||
|
|
"time"
|
||
|
|
|
||
|
|
"github.com/ooni/probe-cli/v3/internal/engine/ooapi/apimodel"
|
||
|
|
"github.com/ooni/probe-cli/v3/internal/engine/runtimex"
|
||
|
|
)
|
||
|
|
|
||
|
|
// loginState is the struct saved in the kvstore
|
||
|
|
// to keep track of the login state.
|
||
|
|
type loginState struct {
|
||
|
|
ClientID string
|
||
|
|
Expire time.Time
|
||
|
|
Password string
|
||
|
|
Token string
|
||
|
|
}
|
||
|
|
|
||
|
|
func (ls *loginState) credentialsValid() bool {
|
||
|
|
return ls.ClientID != "" && ls.Password != ""
|
||
|
|
}
|
||
|
|
|
||
|
|
func (ls *loginState) tokenValid() bool {
|
||
|
|
return ls.Token != "" && time.Now().Add(60*time.Second).Before(ls.Expire)
|
||
|
|
}
|
||
|
|
|
||
|
|
// loginKey is the key with which loginState is saved
|
||
|
|
// into the key-value store used by Client.
|
||
|
|
const loginKey = "orchestra.state"
|
||
|
|
|
||
|
|
// newRandomPassword generates a new random password.
|
||
|
|
func newRandomPassword() string {
|
||
|
|
b := make([]byte, 48)
|
||
|
|
_, err := rand.Read(b)
|
||
|
|
runtimex.PanicOnError(err, "rand.Read failed")
|
||
|
|
return base64.StdEncoding.EncodeToString(b)
|
||
|
|
}
|
||
|
|
|
||
|
|
// newRegisterRequest creates a new RegisterRequest.
|
||
|
|
func newRegisterRequest(password string) *apimodel.RegisterRequest {
|
||
|
|
return &apimodel.RegisterRequest{
|
||
|
|
// The original implementation has as its only use case that we
|
||
|
|
// were registering and logging in for sending an update regarding
|
||
|
|
// the probe whereabouts. Yet here in probe-engine, the orchestra
|
||
|
|
// is currently only used to fetch inputs. For this purpose, we don't
|
||
|
|
// need to communicate any specific information. The code that will
|
||
|
|
// perform an update used to be responsible of doing that. Now, we
|
||
|
|
// are not using orchestra for this purpose anymore.
|
||
|
|
Platform: "miniooni",
|
||
|
|
ProbeASN: "AS0",
|
||
|
|
ProbeCC: "ZZ",
|
||
|
|
SoftwareName: "miniooni",
|
||
|
|
SoftwareVersion: "0.1.0-dev",
|
||
|
|
SupportedTests: []string{"web_connectivity"},
|
||
|
|
Password: password,
|
||
|
|
}
|
||
|
|
}
|