Finishing Prototype

This commit is contained in:
Hoernschen 2020-10-17 12:07:39 +02:00
parent da9196f389
commit 473dc4a495
25 changed files with 1150 additions and 825 deletions

View file

@ -2,7 +2,6 @@ package device
import (
"fmt"
"log"
"git.nutfactory.org/hoernschen/Matrix/utils/database"
)
@ -26,6 +25,7 @@ func CreateDevice(device *Device, userId string) (err error) {
_, err = stmt.Exec(device.Id, device.Name, device.AccessToken, userId)
if err != nil {
tx.Rollback()
return
}
tx.Commit()
@ -60,7 +60,7 @@ func ReadDeviceFromAccessToken(accessToken string) (foundDevice *Device, err err
queryStmt := fmt.Sprintf(`SELECT id, name, accessToken
FROM device
WHERE accessToken = '%s'`, accessToken)
log.Printf(queryStmt)
rows, err := database.DB.Query(queryStmt)
if err != nil {
return
@ -126,6 +126,7 @@ func UpdateDevice(device *Device) (err error) {
_, err = stmt.Exec(device.Name, device.AccessToken, device.Id)
if err != nil {
tx.Rollback()
return
}
@ -142,8 +143,9 @@ func DeleteDevice(id string) (err error) {
return
}
_, err = database.DB.Exec(queryStmt)
_, err = tx.Exec(queryStmt)
if err != nil {
tx.Rollback()
return
}

View file

@ -6,7 +6,7 @@ type Key struct {
Key []byte `json:"key,omitempty"`
}
type serverKeys struct {
type ServerKeys struct {
ServerName string `json:"server_name,omitempty"`
VerifyKeys map[string]verifyKey `json:"verify_keys,omitempty"`
OldVerifyKeys map[string]verifyKey `json:"old_verify_keys,omitempty"`

View file

@ -1,9 +1,12 @@
package device
import (
"bytes"
"encoding/base64"
"encoding/json"
"fmt"
"net/http"
"time"
"git.nutfactory.org/hoernschen/Matrix/config"
"git.nutfactory.org/hoernschen/Matrix/utils"
@ -28,11 +31,11 @@ func GetServerSigningKeyHandler(w http.ResponseWriter, r *http.Request) {
}
return
}
response := serverKeys{
response := ServerKeys{
ServerName: config.Homeserver,
VerifyKeys: make(map[string]verifyKey),
}
response.VerifyKeys[config.KeyId] = verifyKey{Key: string(config.PublicKey)}
response.VerifyKeys[config.KeyId] = verifyKey{Key: base64.RawStdEncoding.EncodeToString(config.PublicKey)}
content, err := json.Marshal(response)
if err != nil {
w.WriteHeader(http.StatusBadRequest)
@ -50,26 +53,36 @@ func GetServerSigningKeyHandler(w http.ResponseWriter, r *http.Request) {
}
}
// TODO: Use Function
func getVerifyKey(server string, id string) (key []byte, err error) {
func GetVerifyKey(server string, id string) (key []byte, err error) {
if val, ok := config.VerifyKeys[server][id]; ok {
key = val
} else {
httpString := "https"
requestUrl := fmt.Sprintf("%s://%s/_matrix/key/v2/server", httpString, server)
var res *http.Response
res, err = http.Get(requestUrl)
requestUrl := fmt.Sprintf("%s://%s/_matrix/key/v2/server", config.HttpString, server)
client := &http.Client{Timeout: 2 * time.Second}
var req *http.Request
req, err = http.NewRequest(http.MethodGet, requestUrl, bytes.NewBuffer(nil))
if err != nil {
return
}
serverKeyRes := serverKeys{}
var res *http.Response
res, err = client.Do(req)
if err != nil {
return
}
if res.StatusCode != http.StatusOK {
utils.HandleHTTPError(res)
}
serverKeyRes := ServerKeys{}
decoder := json.NewDecoder(res.Body)
err = decoder.Decode(&serverKeyRes)
config.VerifyKeys[server] = make(map[string][]byte)
for keyId, verifyKey := range serverKeyRes.VerifyKeys {
config.VerifyKeys[server][keyId] = []byte(verifyKey.Key)
if id == keyId {
key = []byte(verifyKey.Key)
verifyKeyBytes, err := base64.RawStdEncoding.DecodeString(verifyKey.Key)
if err == nil {
config.VerifyKeys[server][keyId] = verifyKeyBytes
if id == keyId {
key = verifyKeyBytes
}
}
}
}

View file

@ -25,6 +25,7 @@ func CreateKey(key *Key, deviceId string) (err error) {
_, err = stmt.Exec(key.Id, key.Type, key.Key, deviceId)
if err != nil {
tx.Rollback()
return
}
tx.Commit()
@ -99,6 +100,7 @@ func UpdateKey(key *Key) (err error) {
_, err = stmt.Exec(key.Type, key.Key, key.Id)
if err != nil {
tx.Rollback()
return
}
@ -115,8 +117,9 @@ func DeleteKey(id string) (err error) {
return
}
_, err = database.DB.Exec(queryStmt)
_, err = tx.Exec(queryStmt)
if err != nil {
tx.Rollback()
return
}