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 }