diff options
Diffstat (limited to 'main.go')
-rw-r--r-- | main.go | 78 |
1 files changed, 78 insertions, 0 deletions
@@ -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) + } +} |