~edwargix/tallyard

ddaea91f668c8d42507dfb12878e9568a965d580 — David Florness 4 years ago 66d41b1
Put Matrix auth data in auth.json instead of data.json
2 files changed, 32 insertions(+), 32 deletions(-)

M cmd/tallyard/main.go
R matrix/{data.go => auth.go}
M cmd/tallyard/main.go => cmd/tallyard/main.go +2 -2
@@ 36,13 36,13 @@ func electionFilter(localUserID id.UserID) *mautrix.Filter {
}

func main() {
	data, err := matrix.GetData()
	authInfo, err := matrix.GetAuthInfo()
	if err != nil {
		fmt.Fprintln(os.Stderr, err)
		os.Exit(1)
	}

	client, err := mautrix.NewClient(data.Homeserver, data.UserID, data.AccessToken)
	client, err := mautrix.NewClient(authInfo.Homeserver, authInfo.UserID, authInfo.AccessToken)
	if err != nil {
		panic(err)
	}

R matrix/data.go => matrix/auth.go +30 -30
@@ 12,7 12,7 @@ import (
	"maunium.net/go/mautrix/id"
)

type Data struct {
type AuthInfo struct {
	AccessToken string      `json:"access_token"`
	DeviceID    id.DeviceID `json:"device_id"`
	Homeserver  string      `json:"homeserver"`


@@ 20,29 20,29 @@ type Data struct {
	Username    string      `json:"username"`
}

var dataFname = xdg.DataHome() + "/tallyard/data.json"
var authFname = xdg.DataHome() + "/tallyard/auth.json"

func GetData() (data *Data, err error) {
	if _, err = os.Stat(dataFname); os.IsNotExist(err) {
		data, err = inquireForData()
func GetAuthInfo() (authInfo *AuthInfo, err error) {
	if _, err = os.Stat(authFname); os.IsNotExist(err) {
		authInfo, err = inquireForAuthInfo()
		if err == nil {
			data.save()
			authInfo.save()
		}
		return data, err
		return authInfo, err
	}

	jsonBytes, err := ioutil.ReadFile(dataFname)
	jsonBytes, err := ioutil.ReadFile(authFname)
	if err != nil {
		return nil, fmt.Errorf("error reading data file %s: %s", dataFname, err)
		return nil, fmt.Errorf("error reading auth file %s: %s", authFname, err)
	}

	data = &Data{}
	err = json.Unmarshal(jsonBytes, data)
	authInfo = &AuthInfo{}
	err = json.Unmarshal(jsonBytes, authInfo)
	if err != nil {
		return nil, fmt.Errorf("error unmarshalling data file: %s", err)
		return nil, fmt.Errorf("error unmarshalling auth file: %s", err)
	}

	return data, nil
	return authInfo, nil
}

func stripNewline(s string) string {


@@ 55,31 55,31 @@ func stripNewline(s string) string {
	return s
}

func inquireForData() (data *Data, err error) {
func inquireForAuthInfo() (authInfo *AuthInfo, err error) {
	var (
		password string
		reader   = bufio.NewReader(os.Stdin)
	)

	data = &Data{}
	authInfo = &AuthInfo{}

	for data.Homeserver == "" || data.Homeserver == "\n" {
	for authInfo.Homeserver == "" || authInfo.Homeserver == "\n" {
		fmt.Print("enter homeserver: ")
		data.Homeserver, err = reader.ReadString('\n')
		authInfo.Homeserver, err = reader.ReadString('\n')
		if err != nil {
			return nil, fmt.Errorf("error reading homeserver: %s", err)
		}
	}
	data.Homeserver = stripNewline(data.Homeserver)
	authInfo.Homeserver = stripNewline(authInfo.Homeserver)

	for data.Username == "" || data.Username == "\n" {
	for authInfo.Username == "" || authInfo.Username == "\n" {
		fmt.Print("enter username: ")
		data.Username, err = reader.ReadString('\n')
		authInfo.Username, err = reader.ReadString('\n')
		if err != nil {
			return nil, fmt.Errorf("error reading username: %s", err)
		}
	}
	data.Username = stripNewline(data.Username)
	authInfo.Username = stripNewline(authInfo.Username)

	for password == "" || password == "\n" {
		fmt.Print("enter password: ")


@@ 90,13 90,13 @@ func inquireForData() (data *Data, err error) {
	}
	password = stripNewline(password)

	client, err := mautrix.NewClient(data.Homeserver, "", "")
	client, err := mautrix.NewClient(authInfo.Homeserver, "", "")
	if err != nil {
		return nil, fmt.Errorf("error creating mautrix client: %s", err)
	}
	respLogin, err := client.Login(&mautrix.ReqLogin{
		Type:             "m.login.password",
		Identifier:       mautrix.UserIdentifier{Type: mautrix.IdentifierTypeUser, User: data.Username},
		Identifier:       mautrix.UserIdentifier{Type: mautrix.IdentifierTypeUser, User: authInfo.Username},
		Password:         password,
		StoreCredentials: true,
	})


@@ 104,17 104,17 @@ func inquireForData() (data *Data, err error) {
		return nil, fmt.Errorf("error logging in with given credentials: %s", err)
	}

	data.AccessToken = respLogin.AccessToken
	data.DeviceID = respLogin.DeviceID
	data.UserID = respLogin.UserID
	authInfo.AccessToken = respLogin.AccessToken
	authInfo.DeviceID = respLogin.DeviceID
	authInfo.UserID = respLogin.UserID

	return data, nil
	return authInfo, nil
}

func (data *Data) save() error {
	jsonBytes, err := json.Marshal(*data)
func (authInfo *AuthInfo) save() error {
	jsonBytes, err := json.Marshal(*authInfo)
	if err != nil {
		return err
	}
	return ioutil.WriteFile(dataFname, jsonBytes, 0600)
	return ioutil.WriteFile(authFname, jsonBytes, 0600)
}