Finishing Prototype
This commit is contained in:
parent
da9196f389
commit
473dc4a495
25 changed files with 1150 additions and 825 deletions
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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"`
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue