morpheusv2

A Matrix client written in Go-QT
git clone git://archive.git.mtrnord.blog/Nordgedanken/morpheusv2.git
Log | Files | Refs | README | LICENSE

users.go (2897B)


      1 // Copyright © 2018 MTRNord <info@nordgedanken.de>
      2 //
      3 // Licensed under the Apache License, Version 2.0 (the "License");
      4 // you may not use this file except in compliance with the License.
      5 // You may obtain a copy of the License at
      6 //
      7 //     http://www.apache.org/licenses/LICENSE-2.0
      8 //
      9 // Unless required by applicable law or agreed to in writing, software
     10 // distributed under the License is distributed on an "AS IS" BASIS,
     11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     12 // See the License for the specific language governing permissions and
     13 // limitations under the License.
     14 
     15 package sqlite
     16 
     17 import (
     18 	"github.com/Nordgedanken/Morpheusv2/pkg/matrix"
     19 	"github.com/Nordgedanken/Morpheusv2/pkg/matrix/users"
     20 	"github.com/matrix-org/gomatrix"
     21 	"strings"
     22 )
     23 
     24 // SaveUser saves a matrix User to the User table
     25 func (s *SQLite) SaveUser(user matrix.User) error {
     26 	if s.db == nil {
     27 		s.db = s.Open()
     28 	}
     29 
     30 	tx, err := s.db.Begin()
     31 	if err != nil {
     32 		return err
     33 	}
     34 
     35 	stmt, err := tx.Prepare("INSERT INTO users (id, display_name, avatar) VALUES (?, ?, ?)")
     36 	if err != nil {
     37 		return err
     38 	}
     39 	defer stmt.Close()
     40 	displayName, err := user.GetDisplayName("")
     41 	if err != nil {
     42 		return err
     43 	}
     44 	avatar, err := user.GetAvatar("")
     45 	if err != nil {
     46 		return err
     47 	}
     48 	mxid := user.GetMXID()
     49 	_, err = stmt.Exec(mxid, displayName, string(avatar))
     50 	if err != nil {
     51 		return err
     52 	}
     53 
     54 	return tx.Commit()
     55 }
     56 
     57 // GetCurrentUser returns the current user including a ready gomatrix client
     58 func (s *SQLite) GetCurrentUser() (userR matrix.User, err error) {
     59 	if s.db == nil {
     60 		s.db = s.Open()
     61 	}
     62 
     63 	stmt, err := s.db.Prepare(`SELECT id, display_name, avatar, access_token FROM users WHERE own=1`)
     64 	if err != nil {
     65 		return
     66 	}
     67 	defer stmt.Close()
     68 
     69 	row := stmt.QueryRow()
     70 
     71 	var mxid string
     72 	var displayName string
     73 	var avatar string
     74 	var accessToken string
     75 	err = row.Scan(&mxid, &displayName, &avatar, &accessToken)
     76 	if err != nil {
     77 		return
     78 	}
     79 
     80 	userI := &users.User{}
     81 	userI.SetMXID(mxid)
     82 	userI.SetDisplayName("", displayName)
     83 	userI.SetAvatar("", []byte(avatar))
     84 
     85 	splitUser := strings.Split(mxid, ":")
     86 	domain := strings.TrimPrefix(mxid, splitUser[0]+":")
     87 	client, err := gomatrix.NewClient(domain, mxid, accessToken)
     88 	if err != nil {
     89 		return
     90 	}
     91 	userI.SetCli(client)
     92 
     93 	userR = userI
     94 	return
     95 }
     96 
     97 // GetUser returns a user matching the mxid of the argument
     98 func (s *SQLite) GetUser(userID string) (userR matrix.User, err error) {
     99 	if s.db == nil {
    100 		s.db = s.Open()
    101 	}
    102 
    103 	stmt, err := s.db.Prepare(`SELECT display_name, avatar FROM users WHERE id=$1`)
    104 	if err != nil {
    105 		return
    106 	}
    107 	defer stmt.Close()
    108 
    109 	row := stmt.QueryRow(userID)
    110 
    111 	var displayName string
    112 	var avatar string
    113 	err = row.Scan(&displayName, &avatar)
    114 	if err != nil {
    115 		return
    116 	}
    117 
    118 	userI := &users.User{}
    119 	userI.SetMXID(userID)
    120 	userI.SetDisplayName("", displayName)
    121 	userI.SetAvatar("", []byte(avatar))
    122 
    123 	userR = userI
    124 	return
    125 }