Signing works
This commit is contained in:
parent
d272fa90b4
commit
da2a89010c
19 changed files with 348 additions and 100 deletions
|
@ -4,6 +4,7 @@ import (
|
|||
"slices"
|
||||
"time"
|
||||
|
||||
"git.mstar.dev/mstar/linstrom/config"
|
||||
"git.mstar.dev/mstar/linstrom/shared"
|
||||
"git.mstar.dev/mstar/linstrom/storage-new/models"
|
||||
)
|
||||
|
@ -97,7 +98,11 @@ func (u *User) FromModel(m *models.User) {
|
|||
u.BannerId = &m.IconId.String
|
||||
}
|
||||
u.Indexable = m.Indexable
|
||||
u.PublicKey = append(u.PublicKey, m.PublicKey...)
|
||||
if config.GlobalConfig.Experimental.UseEd25519Keys {
|
||||
u.PublicKey = append(u.PublicKey, m.PublicKeyEd...)
|
||||
} else {
|
||||
u.PublicKey = append(u.PublicKey, m.PublicKeyRsa...)
|
||||
}
|
||||
u.RestrictedFollow = m.RestrictedFollow
|
||||
if m.Location.Valid {
|
||||
u.Location = &m.Location.String
|
||||
|
|
16
web/shared/linstromUrlType.go
Normal file
16
web/shared/linstromUrlType.go
Normal file
|
@ -0,0 +1,16 @@
|
|||
package webshared
|
||||
|
||||
import "strings"
|
||||
|
||||
// TODO: Define linstrom uri type
|
||||
|
||||
var hardcodedUrls = map[string]string{
|
||||
"default-media": "/default-image",
|
||||
}
|
||||
|
||||
func EnsurePublicUrl(rawUrl string) string {
|
||||
if !strings.HasPrefix(rawUrl, "linstrom://") {
|
||||
return rawUrl
|
||||
}
|
||||
return strings.Replace(rawUrl, "linstrom://", "/", 1)
|
||||
}
|
40
web/shared/signing.go
Normal file
40
web/shared/signing.go
Normal file
|
@ -0,0 +1,40 @@
|
|||
package webshared
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"git.mstar.dev/mstar/linstrom/shared"
|
||||
)
|
||||
|
||||
func CreateSignatureRSA(
|
||||
method string,
|
||||
target string,
|
||||
headers map[string]string,
|
||||
privateKeyBytes []byte,
|
||||
) (string, error) {
|
||||
message := genPreSignatureString(method, target, headers)
|
||||
signed, err := shared.Sign(message, privateKeyBytes, true)
|
||||
return string(signed), err
|
||||
}
|
||||
|
||||
func CreateSignatureED(
|
||||
method string,
|
||||
target string,
|
||||
headers map[string]string,
|
||||
privateKeyBytes []byte,
|
||||
) (string, error) {
|
||||
message := genPreSignatureString(method, target, headers)
|
||||
signed, err := shared.Sign(message, privateKeyBytes, false)
|
||||
return string(signed), err
|
||||
}
|
||||
|
||||
func genPreSignatureString(method, target string, headers map[string]string) string {
|
||||
dataBuilder := strings.Builder{}
|
||||
dataBuilder.WriteString("(request-target) ")
|
||||
dataBuilder.WriteString(strings.ToLower(method) + " ")
|
||||
dataBuilder.WriteString(target + "\n")
|
||||
for k, v := range headers {
|
||||
dataBuilder.WriteString(k + ": " + v + "\n")
|
||||
}
|
||||
return dataBuilder.String()
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue