summaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
authorÖzgür Kesim <oec@codeblau.de>2025-07-13 20:41:38 +0200
committerÖzgür Kesim <oec@codeblau.de>2025-07-13 20:41:38 +0200
commit6b6b67ee0d30439780b829bb3e9dd5b0efa881df (patch)
tree16c854f31760a6055a9dba25a34f8cbef6b1401c /main.go
initmain
Diffstat (limited to 'main.go')
-rw-r--r--main.go78
1 files changed, 78 insertions, 0 deletions
diff --git a/main.go b/main.go
new file mode 100644
index 0000000..2570c08
--- /dev/null
+++ b/main.go
@@ -0,0 +1,78 @@
+// Copyright 2016 The Upspin Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Keyserver is a wrapper for a key implementation that presents it as an HTTP
+// interface.
+package main // import "kesim.org/upspin-keyserver"
+
+import (
+ "flag"
+ "os"
+ "path/filepath"
+ "strings"
+
+ "upspin.io/flags"
+ "upspin.io/log"
+ "upspin.io/serverutil"
+ "upspin.io/serverutil/keyserver"
+ "upspin.io/upspin"
+
+ // Load required transports
+ _ "upspin.io/key/transports"
+
+ // Possible storage backends.
+ "upspin.io/cloud/https"
+ _ "upspin.io/cloud/storage/disk"
+)
+
+var (
+ keyDir = flag.String("keyDir", "", "initialize keys from this `directory`")
+)
+
+func main() {
+ keyserver.Main(setupTestUser)
+ https.ListenAndServeFromFlags(nil)
+}
+
+// setupTestUser uses the -test_user and -test_secrets flags to bootstrap the
+// inprocess key server with an initial user.
+func setupTestUser(key upspin.KeyServer) {
+ if *keyDir == "" {
+ log.Println("no keyDir provided")
+ return
+ }
+
+ if flags.InsecureHTTP {
+ if !serverutil.IsLoopback(flags.HTTPAddr) {
+ log.Fatal("cannot use -keyDir flag on an insecure connection except on -http=localhost:port")
+ }
+ }
+
+ entries, err := os.ReadDir(*keyDir)
+ if err != nil {
+ log.Fatalf("cannot open keyDir %q: %v", *keyDir, err)
+ }
+
+ for _, entry := range entries {
+ name := entry.Name()
+ path := filepath.Join(*keyDir, name)
+ if !entry.IsDir() || !strings.Contains("@", name) {
+ continue
+ }
+
+ pk, err := os.ReadFile(path)
+ if err != nil {
+ log.Fatalf("unable to read %q: %v", path, err)
+ }
+ userStruct := &upspin.User{
+ Name: upspin.UserName(name),
+ PublicKey: upspin.PublicKey(string(pk)),
+ }
+ err = key.Put(userStruct)
+ if err != nil {
+ log.Fatalf("Put %q failed: %v", name, err)
+ }
+ log.Printf("Added user %q\n", name)
+ }
+}