Auth: Add CLI command to create access tokens for apps #782 #808 #3943

You can now run "photoprism auth add" to create new client access tokens
that allow external applications to use the built-in REST API.

Signed-off-by: Michael Mayer <michael@photoprism.app>
This commit is contained in:
Michael Mayer
2024-01-05 16:31:07 +01:00
parent d6ec8c069e
commit 713593da4e
117 changed files with 2528 additions and 938 deletions

View File

@@ -1,13 +1,15 @@
package rnd
import (
"strconv"
"testing"
"time"
"github.com/stretchr/testify/assert"
)
func TestIsUnique(t *testing.T) {
assert.True(t, IsUnique("lt9k3pw1wowuy3c2", 'l'))
assert.True(t, IsUnique("ls6sg1e1wowuy3c2", 'l'))
assert.True(t, IsUnique("dafbfeb8-a129-4e7c-9cf0-e7996a701cdb", 'l'))
assert.True(t, IsUnique("6ba7b810-9dad-11d1-80b4-00c04fd430c8", 'l'))
assert.True(t, IsUnique("55785BAC-9A4B-4747-B090-EE123FFEE437", 'l'))
@@ -27,12 +29,12 @@ func TestIsUID(t *testing.T) {
assert.True(t, IsUID(s, prefix))
}
assert.True(t, IsUID("lt9k3pw1wowuy3c2", 'l'))
assert.False(t, IsUID("lt9k3pw1wowuy3c2123", 'l'))
assert.False(t, IsUID("lt9k3pw1wowuy3c2123", 'l'))
assert.False(t, IsUID("lt9k3pw1AAA-owuy3c2123", 'l'))
assert.True(t, IsUID("ls6sg1e1wowuy3c2", 'l'))
assert.False(t, IsUID("ls6sg1e1wowuy3c2123", 'l'))
assert.False(t, IsUID("ls6sg1e1wowuy3c2123", 'l'))
assert.False(t, IsUID("ls6sg1e1AAA-owuy3c2123", 'l'))
assert.False(t, IsUID("", 'l'))
assert.False(t, IsUID("lt9k3pw1w ?owuy 3c2123", 'l'))
assert.False(t, IsUID("ls6sg1e1w ?owuy 3c2123", 'l'))
assert.False(t, IsUID(RefID(""), 'r'))
}
@@ -44,12 +46,12 @@ func TestInvalidUID(t *testing.T) {
assert.False(t, InvalidUID(id, prefix))
}
assert.False(t, InvalidUID("lt9k3pw1wowuy3c2", 'l'))
assert.True(t, InvalidUID("lt9k3pw1wowuy3c2123", 'l'))
assert.True(t, InvalidUID("lt9k3pw1wowuy3c2123", 'l'))
assert.True(t, InvalidUID("lt9k3pw1AAA-owuy3c2123", 'l'))
assert.False(t, InvalidUID("ls6sg1e1wowuy3c2", 'l'))
assert.True(t, InvalidUID("ls6sg1e1wowuy3c2123", 'l'))
assert.True(t, InvalidUID("ls6sg1e1wowuy3c2123", 'l'))
assert.True(t, InvalidUID("ls6sg1e1AAA-owuy3c2123", 'l'))
assert.True(t, InvalidUID("", 'l'))
assert.True(t, InvalidUID("lt9k3pw1w ?owuy 3c2123", 'l'))
assert.True(t, InvalidUID("ls6sg1e1w ?owuy 3c2123", 'l'))
assert.True(t, InvalidUID(RefID(""), 'r'))
}
@@ -82,3 +84,41 @@ func BenchmarkGenerateUID(b *testing.B) {
GenerateUID('x')
}
}
func TestGenerateUID_Time(t *testing.T) {
t.Run("2017", func(t *testing.T) {
date := time.Date(2017, 1, 1, 0, 0, 0, 0, time.UTC)
t.Logf("Unix Timestamp: %d", date.Unix())
t.Logf("Date Encoded: %s", strconv.FormatInt(date.UTC().Unix(), 36))
// coj2qo0...
result := generateUID('c', date)
t.Logf("2017: %s", result)
if ts, err := strconv.ParseInt(result[1:7], 36, 64); err != nil {
t.Fatal(err)
} else {
assert.Equal(t, date.Unix(), ts)
t.Logf("UID Timestamp: %d", ts)
}
assert.Equal(t, "coj2qo0", result[:7])
})
t.Run("Now", func(t *testing.T) {
date := time.Now().UTC()
t.Logf("Unix Timestamp: %d", date.Unix())
t.Logf("Date Encoded: %s", strconv.FormatInt(date.Unix(), 36))
// coj2qo0...
// cs6sfay
result := generateUID('c', date)
t.Logf("Now: %s", result)
if ts, err := strconv.ParseInt(result[1:7], 36, 64); err != nil {
t.Fatal(err)
} else {
assert.Equal(t, date.Unix(), ts)
t.Logf("UID Timestamp: %d", ts)
}
assert.Equal(t, "c", result[:1])
})
}