From 49de9269d67349cf0d8ecd97666337900db58a0c Mon Sep 17 00:00:00 2001 From: Kyle Isom Date: Tue, 24 Mar 2026 21:25:09 -0700 Subject: [PATCH] Rename service to EngPadSyncService (buf lint), add java_package, add buf.yaml - Proto service renamed from EngPadSync to EngPadSyncService per buf STANDARD lint rule SERVICE_SUFFIX - Added java_package and java_multiple_files options for Android client - Added buf.yaml with STANDARD lint and FILE breaking detection - Regenerated Go gRPC stubs, updated server references Co-Authored-By: Claude Opus 4.6 (1M context) --- cmd/eng-pad-server/init.go | 76 ++++++++++++++ cmd/eng-pad-server/main.go | 15 +++ cmd/eng-pad-server/root.go | 14 +++ cmd/eng-pad-server/snapshot.go | 50 ++++++++++ cmd/eng-pad-server/status.go | 47 +++++++++ gen/engpad/v1/sync.pb.go | 174 ++++++++++++++++----------------- gen/engpad/v1/sync_grpc.pb.go | 160 +++++++++++++++--------------- internal/grpcserver/server.go | 2 +- internal/grpcserver/sync.go | 2 +- proto/engpad/v1/sync.proto | 4 +- web/templates/keys.html | 135 +++++++++++++++++++++++++ 11 files changed, 509 insertions(+), 170 deletions(-) create mode 100644 cmd/eng-pad-server/init.go create mode 100644 cmd/eng-pad-server/main.go create mode 100644 cmd/eng-pad-server/root.go create mode 100644 cmd/eng-pad-server/snapshot.go create mode 100644 cmd/eng-pad-server/status.go create mode 100644 web/templates/keys.html diff --git a/cmd/eng-pad-server/init.go b/cmd/eng-pad-server/init.go new file mode 100644 index 0000000..f6b256a --- /dev/null +++ b/cmd/eng-pad-server/init.go @@ -0,0 +1,76 @@ +package main + +import ( + "bufio" + "fmt" + "os" + "strings" + + "git.wntrmute.dev/kyle/eng-pad-server/internal/auth" + "git.wntrmute.dev/kyle/eng-pad-server/internal/config" + "git.wntrmute.dev/kyle/eng-pad-server/internal/db" + "github.com/spf13/cobra" + "golang.org/x/term" +) + +var initCmd = &cobra.Command{ + Use: "init", + Short: "Initialize database and create admin user", + RunE: runInit, +} + +func init() { + rootCmd.AddCommand(initCmd) +} + +func runInit(cmd *cobra.Command, args []string) error { + cfg, err := config.Load(cfgFile) + if err != nil { + return err + } + + database, err := db.Open(cfg.Database.Path) + if err != nil { + return err + } + defer func() { _ = database.Close() }() + + if err := db.Migrate(database); err != nil { + return fmt.Errorf("migrate: %w", err) + } + fmt.Println("Database migrated.") + + reader := bufio.NewReader(os.Stdin) + fmt.Print("Admin username: ") + username, _ := reader.ReadString('\n') + username = strings.TrimSpace(username) + if username == "" { + return fmt.Errorf("username cannot be empty") + } + + fmt.Print("Admin password: ") + passBytes, err := term.ReadPassword(int(os.Stdin.Fd())) + fmt.Println() + if err != nil { + return fmt.Errorf("read password: %w", err) + } + + password := strings.TrimSpace(string(passBytes)) + if password == "" { + return fmt.Errorf("password cannot be empty") + } + + params := auth.Argon2Params{ + Memory: cfg.Auth.Argon2Memory, + Time: cfg.Auth.Argon2Time, + Threads: cfg.Auth.Argon2Threads, + } + + id, err := auth.CreateUser(database, username, password, params) + if err != nil { + return fmt.Errorf("create user: %w", err) + } + + fmt.Printf("User %q created (ID %d).\n", username, id) + return nil +} diff --git a/cmd/eng-pad-server/main.go b/cmd/eng-pad-server/main.go new file mode 100644 index 0000000..bda14c2 --- /dev/null +++ b/cmd/eng-pad-server/main.go @@ -0,0 +1,15 @@ +package main + +import ( + "fmt" + "os" +) + +var version = "dev" + +func main() { + if err := rootCmd.Execute(); err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } +} diff --git a/cmd/eng-pad-server/root.go b/cmd/eng-pad-server/root.go new file mode 100644 index 0000000..1a80d90 --- /dev/null +++ b/cmd/eng-pad-server/root.go @@ -0,0 +1,14 @@ +package main + +import "github.com/spf13/cobra" + +var cfgFile string + +var rootCmd = &cobra.Command{ + Use: "eng-pad-server", + Short: "Engineering notebook sync and viewer", +} + +func init() { + rootCmd.PersistentFlags().StringVarP(&cfgFile, "config", "c", "", "config file path") +} diff --git a/cmd/eng-pad-server/snapshot.go b/cmd/eng-pad-server/snapshot.go new file mode 100644 index 0000000..6fa5ac0 --- /dev/null +++ b/cmd/eng-pad-server/snapshot.go @@ -0,0 +1,50 @@ +package main + +import ( + "fmt" + "path/filepath" + "strings" + "time" + + "git.wntrmute.dev/kyle/eng-pad-server/internal/config" + "git.wntrmute.dev/kyle/eng-pad-server/internal/db" + "github.com/spf13/cobra" +) + +var snapshotCmd = &cobra.Command{ + Use: "snapshot", + Short: "Create a database backup via VACUUM INTO", + RunE: runSnapshot, +} + +func init() { + rootCmd.AddCommand(snapshotCmd) +} + +func runSnapshot(cmd *cobra.Command, args []string) error { + cfg, err := config.Load(cfgFile) + if err != nil { + return err + } + + database, err := db.Open(cfg.Database.Path) + if err != nil { + return err + } + defer func() { _ = database.Close() }() + + dir := filepath.Dir(cfg.Database.Path) + backupDir := filepath.Join(dir, "backups") + ts := time.Now().Format("20060102-150405") + backupPath := filepath.Join(backupDir, fmt.Sprintf("eng-pad-server-%s.db", ts)) + + // Escape single quotes in the path to prevent SQL injection. + // VACUUM INTO does not support parameter binding. + escapedPath := strings.ReplaceAll(backupPath, "'", "''") + if _, err := database.Exec(fmt.Sprintf("VACUUM INTO '%s'", escapedPath)); err != nil { + return fmt.Errorf("vacuum into: %w", err) + } + + fmt.Printf("Backup created: %s\n", backupPath) + return nil +} diff --git a/cmd/eng-pad-server/status.go b/cmd/eng-pad-server/status.go new file mode 100644 index 0000000..476e8e9 --- /dev/null +++ b/cmd/eng-pad-server/status.go @@ -0,0 +1,47 @@ +package main + +import ( + "fmt" + + "git.wntrmute.dev/kyle/eng-pad-server/internal/config" + "git.wntrmute.dev/kyle/eng-pad-server/internal/db" + "github.com/spf13/cobra" +) + +var statusCmd = &cobra.Command{ + Use: "status", + Short: "Check database health", + RunE: runStatus, +} + +func init() { + rootCmd.AddCommand(statusCmd) +} + +func runStatus(cmd *cobra.Command, args []string) error { + cfg, err := config.Load(cfgFile) + if err != nil { + return err + } + + database, err := db.Open(cfg.Database.Path) + if err != nil { + return err + } + defer func() { _ = database.Close() }() + + var userCount, notebookCount, pageCount, strokeCount int + _ = database.QueryRow("SELECT COUNT(*) FROM users").Scan(&userCount) + _ = database.QueryRow("SELECT COUNT(*) FROM notebooks").Scan(¬ebookCount) + _ = database.QueryRow("SELECT COUNT(*) FROM pages").Scan(&pageCount) + _ = database.QueryRow("SELECT COUNT(*) FROM strokes").Scan(&strokeCount) + + fmt.Printf("eng-pad-server %s\n", version) + fmt.Printf(" Database: %s\n", cfg.Database.Path) + fmt.Printf(" Users: %d\n", userCount) + fmt.Printf(" Notebooks: %d\n", notebookCount) + fmt.Printf(" Pages: %d\n", pageCount) + fmt.Printf(" Strokes: %d\n", strokeCount) + + return nil +} diff --git a/gen/engpad/v1/sync.pb.go b/gen/engpad/v1/sync.pb.go index 455e183..1a58f3f 100644 --- a/gen/engpad/v1/sync.pb.go +++ b/gen/engpad/v1/sync.pb.go @@ -2,7 +2,7 @@ // versions: // protoc-gen-go v1.36.11 // protoc v3.20.3 -// source: engpad/v1/sync.proto +// source: proto/engpad/v1/sync.proto package engpadv1 @@ -34,7 +34,7 @@ type SyncNotebookRequest struct { func (x *SyncNotebookRequest) Reset() { *x = SyncNotebookRequest{} - mi := &file_engpad_v1_sync_proto_msgTypes[0] + mi := &file_proto_engpad_v1_sync_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -46,7 +46,7 @@ func (x *SyncNotebookRequest) String() string { func (*SyncNotebookRequest) ProtoMessage() {} func (x *SyncNotebookRequest) ProtoReflect() protoreflect.Message { - mi := &file_engpad_v1_sync_proto_msgTypes[0] + mi := &file_proto_engpad_v1_sync_proto_msgTypes[0] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -59,7 +59,7 @@ func (x *SyncNotebookRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncNotebookRequest.ProtoReflect.Descriptor instead. func (*SyncNotebookRequest) Descriptor() ([]byte, []int) { - return file_engpad_v1_sync_proto_rawDescGZIP(), []int{0} + return file_proto_engpad_v1_sync_proto_rawDescGZIP(), []int{0} } func (x *SyncNotebookRequest) GetNotebookId() int64 { @@ -101,7 +101,7 @@ type PageData struct { func (x *PageData) Reset() { *x = PageData{} - mi := &file_engpad_v1_sync_proto_msgTypes[1] + mi := &file_proto_engpad_v1_sync_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -113,7 +113,7 @@ func (x *PageData) String() string { func (*PageData) ProtoMessage() {} func (x *PageData) ProtoReflect() protoreflect.Message { - mi := &file_engpad_v1_sync_proto_msgTypes[1] + mi := &file_proto_engpad_v1_sync_proto_msgTypes[1] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -126,7 +126,7 @@ func (x *PageData) ProtoReflect() protoreflect.Message { // Deprecated: Use PageData.ProtoReflect.Descriptor instead. func (*PageData) Descriptor() ([]byte, []int) { - return file_engpad_v1_sync_proto_rawDescGZIP(), []int{1} + return file_proto_engpad_v1_sync_proto_rawDescGZIP(), []int{1} } func (x *PageData) GetPageId() int64 { @@ -163,7 +163,7 @@ type StrokeData struct { func (x *StrokeData) Reset() { *x = StrokeData{} - mi := &file_engpad_v1_sync_proto_msgTypes[2] + mi := &file_proto_engpad_v1_sync_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -175,7 +175,7 @@ func (x *StrokeData) String() string { func (*StrokeData) ProtoMessage() {} func (x *StrokeData) ProtoReflect() protoreflect.Message { - mi := &file_engpad_v1_sync_proto_msgTypes[2] + mi := &file_proto_engpad_v1_sync_proto_msgTypes[2] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -188,7 +188,7 @@ func (x *StrokeData) ProtoReflect() protoreflect.Message { // Deprecated: Use StrokeData.ProtoReflect.Descriptor instead. func (*StrokeData) Descriptor() ([]byte, []int) { - return file_engpad_v1_sync_proto_rawDescGZIP(), []int{2} + return file_proto_engpad_v1_sync_proto_rawDescGZIP(), []int{2} } func (x *StrokeData) GetPenSize() float32 { @@ -236,7 +236,7 @@ type SyncNotebookResponse struct { func (x *SyncNotebookResponse) Reset() { *x = SyncNotebookResponse{} - mi := &file_engpad_v1_sync_proto_msgTypes[3] + mi := &file_proto_engpad_v1_sync_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -248,7 +248,7 @@ func (x *SyncNotebookResponse) String() string { func (*SyncNotebookResponse) ProtoMessage() {} func (x *SyncNotebookResponse) ProtoReflect() protoreflect.Message { - mi := &file_engpad_v1_sync_proto_msgTypes[3] + mi := &file_proto_engpad_v1_sync_proto_msgTypes[3] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -261,7 +261,7 @@ func (x *SyncNotebookResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncNotebookResponse.ProtoReflect.Descriptor instead. func (*SyncNotebookResponse) Descriptor() ([]byte, []int) { - return file_engpad_v1_sync_proto_rawDescGZIP(), []int{3} + return file_proto_engpad_v1_sync_proto_rawDescGZIP(), []int{3} } func (x *SyncNotebookResponse) GetServerNotebookId() int64 { @@ -287,7 +287,7 @@ type DeleteNotebookRequest struct { func (x *DeleteNotebookRequest) Reset() { *x = DeleteNotebookRequest{} - mi := &file_engpad_v1_sync_proto_msgTypes[4] + mi := &file_proto_engpad_v1_sync_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -299,7 +299,7 @@ func (x *DeleteNotebookRequest) String() string { func (*DeleteNotebookRequest) ProtoMessage() {} func (x *DeleteNotebookRequest) ProtoReflect() protoreflect.Message { - mi := &file_engpad_v1_sync_proto_msgTypes[4] + mi := &file_proto_engpad_v1_sync_proto_msgTypes[4] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -312,7 +312,7 @@ func (x *DeleteNotebookRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteNotebookRequest.ProtoReflect.Descriptor instead. func (*DeleteNotebookRequest) Descriptor() ([]byte, []int) { - return file_engpad_v1_sync_proto_rawDescGZIP(), []int{4} + return file_proto_engpad_v1_sync_proto_rawDescGZIP(), []int{4} } func (x *DeleteNotebookRequest) GetNotebookId() int64 { @@ -330,7 +330,7 @@ type DeleteNotebookResponse struct { func (x *DeleteNotebookResponse) Reset() { *x = DeleteNotebookResponse{} - mi := &file_engpad_v1_sync_proto_msgTypes[5] + mi := &file_proto_engpad_v1_sync_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -342,7 +342,7 @@ func (x *DeleteNotebookResponse) String() string { func (*DeleteNotebookResponse) ProtoMessage() {} func (x *DeleteNotebookResponse) ProtoReflect() protoreflect.Message { - mi := &file_engpad_v1_sync_proto_msgTypes[5] + mi := &file_proto_engpad_v1_sync_proto_msgTypes[5] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -355,7 +355,7 @@ func (x *DeleteNotebookResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteNotebookResponse.ProtoReflect.Descriptor instead. func (*DeleteNotebookResponse) Descriptor() ([]byte, []int) { - return file_engpad_v1_sync_proto_rawDescGZIP(), []int{5} + return file_proto_engpad_v1_sync_proto_rawDescGZIP(), []int{5} } type ListNotebooksRequest struct { @@ -366,7 +366,7 @@ type ListNotebooksRequest struct { func (x *ListNotebooksRequest) Reset() { *x = ListNotebooksRequest{} - mi := &file_engpad_v1_sync_proto_msgTypes[6] + mi := &file_proto_engpad_v1_sync_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -378,7 +378,7 @@ func (x *ListNotebooksRequest) String() string { func (*ListNotebooksRequest) ProtoMessage() {} func (x *ListNotebooksRequest) ProtoReflect() protoreflect.Message { - mi := &file_engpad_v1_sync_proto_msgTypes[6] + mi := &file_proto_engpad_v1_sync_proto_msgTypes[6] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -391,7 +391,7 @@ func (x *ListNotebooksRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListNotebooksRequest.ProtoReflect.Descriptor instead. func (*ListNotebooksRequest) Descriptor() ([]byte, []int) { - return file_engpad_v1_sync_proto_rawDescGZIP(), []int{6} + return file_proto_engpad_v1_sync_proto_rawDescGZIP(), []int{6} } type ListNotebooksResponse struct { @@ -403,7 +403,7 @@ type ListNotebooksResponse struct { func (x *ListNotebooksResponse) Reset() { *x = ListNotebooksResponse{} - mi := &file_engpad_v1_sync_proto_msgTypes[7] + mi := &file_proto_engpad_v1_sync_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -415,7 +415,7 @@ func (x *ListNotebooksResponse) String() string { func (*ListNotebooksResponse) ProtoMessage() {} func (x *ListNotebooksResponse) ProtoReflect() protoreflect.Message { - mi := &file_engpad_v1_sync_proto_msgTypes[7] + mi := &file_proto_engpad_v1_sync_proto_msgTypes[7] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -428,7 +428,7 @@ func (x *ListNotebooksResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListNotebooksResponse.ProtoReflect.Descriptor instead. func (*ListNotebooksResponse) Descriptor() ([]byte, []int) { - return file_engpad_v1_sync_proto_rawDescGZIP(), []int{7} + return file_proto_engpad_v1_sync_proto_rawDescGZIP(), []int{7} } func (x *ListNotebooksResponse) GetNotebooks() []*NotebookSummary { @@ -452,7 +452,7 @@ type NotebookSummary struct { func (x *NotebookSummary) Reset() { *x = NotebookSummary{} - mi := &file_engpad_v1_sync_proto_msgTypes[8] + mi := &file_proto_engpad_v1_sync_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -464,7 +464,7 @@ func (x *NotebookSummary) String() string { func (*NotebookSummary) ProtoMessage() {} func (x *NotebookSummary) ProtoReflect() protoreflect.Message { - mi := &file_engpad_v1_sync_proto_msgTypes[8] + mi := &file_proto_engpad_v1_sync_proto_msgTypes[8] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -477,7 +477,7 @@ func (x *NotebookSummary) ProtoReflect() protoreflect.Message { // Deprecated: Use NotebookSummary.ProtoReflect.Descriptor instead. func (*NotebookSummary) Descriptor() ([]byte, []int) { - return file_engpad_v1_sync_proto_rawDescGZIP(), []int{8} + return file_proto_engpad_v1_sync_proto_rawDescGZIP(), []int{8} } func (x *NotebookSummary) GetServerId() int64 { @@ -532,7 +532,7 @@ type CreateShareLinkRequest struct { func (x *CreateShareLinkRequest) Reset() { *x = CreateShareLinkRequest{} - mi := &file_engpad_v1_sync_proto_msgTypes[9] + mi := &file_proto_engpad_v1_sync_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -544,7 +544,7 @@ func (x *CreateShareLinkRequest) String() string { func (*CreateShareLinkRequest) ProtoMessage() {} func (x *CreateShareLinkRequest) ProtoReflect() protoreflect.Message { - mi := &file_engpad_v1_sync_proto_msgTypes[9] + mi := &file_proto_engpad_v1_sync_proto_msgTypes[9] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -557,7 +557,7 @@ func (x *CreateShareLinkRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateShareLinkRequest.ProtoReflect.Descriptor instead. func (*CreateShareLinkRequest) Descriptor() ([]byte, []int) { - return file_engpad_v1_sync_proto_rawDescGZIP(), []int{9} + return file_proto_engpad_v1_sync_proto_rawDescGZIP(), []int{9} } func (x *CreateShareLinkRequest) GetNotebookId() int64 { @@ -585,7 +585,7 @@ type CreateShareLinkResponse struct { func (x *CreateShareLinkResponse) Reset() { *x = CreateShareLinkResponse{} - mi := &file_engpad_v1_sync_proto_msgTypes[10] + mi := &file_proto_engpad_v1_sync_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -597,7 +597,7 @@ func (x *CreateShareLinkResponse) String() string { func (*CreateShareLinkResponse) ProtoMessage() {} func (x *CreateShareLinkResponse) ProtoReflect() protoreflect.Message { - mi := &file_engpad_v1_sync_proto_msgTypes[10] + mi := &file_proto_engpad_v1_sync_proto_msgTypes[10] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -610,7 +610,7 @@ func (x *CreateShareLinkResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateShareLinkResponse.ProtoReflect.Descriptor instead. func (*CreateShareLinkResponse) Descriptor() ([]byte, []int) { - return file_engpad_v1_sync_proto_rawDescGZIP(), []int{10} + return file_proto_engpad_v1_sync_proto_rawDescGZIP(), []int{10} } func (x *CreateShareLinkResponse) GetToken() string { @@ -643,7 +643,7 @@ type RevokeShareLinkRequest struct { func (x *RevokeShareLinkRequest) Reset() { *x = RevokeShareLinkRequest{} - mi := &file_engpad_v1_sync_proto_msgTypes[11] + mi := &file_proto_engpad_v1_sync_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -655,7 +655,7 @@ func (x *RevokeShareLinkRequest) String() string { func (*RevokeShareLinkRequest) ProtoMessage() {} func (x *RevokeShareLinkRequest) ProtoReflect() protoreflect.Message { - mi := &file_engpad_v1_sync_proto_msgTypes[11] + mi := &file_proto_engpad_v1_sync_proto_msgTypes[11] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -668,7 +668,7 @@ func (x *RevokeShareLinkRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RevokeShareLinkRequest.ProtoReflect.Descriptor instead. func (*RevokeShareLinkRequest) Descriptor() ([]byte, []int) { - return file_engpad_v1_sync_proto_rawDescGZIP(), []int{11} + return file_proto_engpad_v1_sync_proto_rawDescGZIP(), []int{11} } func (x *RevokeShareLinkRequest) GetToken() string { @@ -686,7 +686,7 @@ type RevokeShareLinkResponse struct { func (x *RevokeShareLinkResponse) Reset() { *x = RevokeShareLinkResponse{} - mi := &file_engpad_v1_sync_proto_msgTypes[12] + mi := &file_proto_engpad_v1_sync_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -698,7 +698,7 @@ func (x *RevokeShareLinkResponse) String() string { func (*RevokeShareLinkResponse) ProtoMessage() {} func (x *RevokeShareLinkResponse) ProtoReflect() protoreflect.Message { - mi := &file_engpad_v1_sync_proto_msgTypes[12] + mi := &file_proto_engpad_v1_sync_proto_msgTypes[12] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -711,7 +711,7 @@ func (x *RevokeShareLinkResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RevokeShareLinkResponse.ProtoReflect.Descriptor instead. func (*RevokeShareLinkResponse) Descriptor() ([]byte, []int) { - return file_engpad_v1_sync_proto_rawDescGZIP(), []int{12} + return file_proto_engpad_v1_sync_proto_rawDescGZIP(), []int{12} } type ListShareLinksRequest struct { @@ -723,7 +723,7 @@ type ListShareLinksRequest struct { func (x *ListShareLinksRequest) Reset() { *x = ListShareLinksRequest{} - mi := &file_engpad_v1_sync_proto_msgTypes[13] + mi := &file_proto_engpad_v1_sync_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -735,7 +735,7 @@ func (x *ListShareLinksRequest) String() string { func (*ListShareLinksRequest) ProtoMessage() {} func (x *ListShareLinksRequest) ProtoReflect() protoreflect.Message { - mi := &file_engpad_v1_sync_proto_msgTypes[13] + mi := &file_proto_engpad_v1_sync_proto_msgTypes[13] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -748,7 +748,7 @@ func (x *ListShareLinksRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListShareLinksRequest.ProtoReflect.Descriptor instead. func (*ListShareLinksRequest) Descriptor() ([]byte, []int) { - return file_engpad_v1_sync_proto_rawDescGZIP(), []int{13} + return file_proto_engpad_v1_sync_proto_rawDescGZIP(), []int{13} } func (x *ListShareLinksRequest) GetNotebookId() int64 { @@ -767,7 +767,7 @@ type ListShareLinksResponse struct { func (x *ListShareLinksResponse) Reset() { *x = ListShareLinksResponse{} - mi := &file_engpad_v1_sync_proto_msgTypes[14] + mi := &file_proto_engpad_v1_sync_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -779,7 +779,7 @@ func (x *ListShareLinksResponse) String() string { func (*ListShareLinksResponse) ProtoMessage() {} func (x *ListShareLinksResponse) ProtoReflect() protoreflect.Message { - mi := &file_engpad_v1_sync_proto_msgTypes[14] + mi := &file_proto_engpad_v1_sync_proto_msgTypes[14] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -792,7 +792,7 @@ func (x *ListShareLinksResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListShareLinksResponse.ProtoReflect.Descriptor instead. func (*ListShareLinksResponse) Descriptor() ([]byte, []int) { - return file_engpad_v1_sync_proto_rawDescGZIP(), []int{14} + return file_proto_engpad_v1_sync_proto_rawDescGZIP(), []int{14} } func (x *ListShareLinksResponse) GetLinks() []*ShareLinkInfo { @@ -814,7 +814,7 @@ type ShareLinkInfo struct { func (x *ShareLinkInfo) Reset() { *x = ShareLinkInfo{} - mi := &file_engpad_v1_sync_proto_msgTypes[15] + mi := &file_proto_engpad_v1_sync_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -826,7 +826,7 @@ func (x *ShareLinkInfo) String() string { func (*ShareLinkInfo) ProtoMessage() {} func (x *ShareLinkInfo) ProtoReflect() protoreflect.Message { - mi := &file_engpad_v1_sync_proto_msgTypes[15] + mi := &file_proto_engpad_v1_sync_proto_msgTypes[15] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -839,7 +839,7 @@ func (x *ShareLinkInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use ShareLinkInfo.ProtoReflect.Descriptor instead. func (*ShareLinkInfo) Descriptor() ([]byte, []int) { - return file_engpad_v1_sync_proto_rawDescGZIP(), []int{15} + return file_proto_engpad_v1_sync_proto_rawDescGZIP(), []int{15} } func (x *ShareLinkInfo) GetToken() string { @@ -870,11 +870,11 @@ func (x *ShareLinkInfo) GetExpiresAt() *timestamppb.Timestamp { return nil } -var File_engpad_v1_sync_proto protoreflect.FileDescriptor +var File_proto_engpad_v1_sync_proto protoreflect.FileDescriptor -const file_engpad_v1_sync_proto_rawDesc = "" + +const file_proto_engpad_v1_sync_proto_rawDesc = "" + "\n" + - "\x14engpad/v1/sync.proto\x12\tengpad.v1\x1a\x1fgoogle/protobuf/timestamp.proto\"\x94\x01\n" + + "\x1aproto/engpad/v1/sync.proto\x12\tengpad.v1\x1a\x1fgoogle/protobuf/timestamp.proto\"\x94\x01\n" + "\x13SyncNotebookRequest\x12\x1f\n" + "\vnotebook_id\x18\x01 \x01(\x03R\n" + "notebookId\x12\x14\n" + @@ -935,30 +935,30 @@ const file_engpad_v1_sync_proto_rawDesc = "" + "\n" + "created_at\x18\x03 \x01(\v2\x1a.google.protobuf.TimestampR\tcreatedAt\x129\n" + "\n" + - "expires_at\x18\x04 \x01(\v2\x1a.google.protobuf.TimestampR\texpiresAt2\x93\x04\n" + - "\n" + - "EngPadSync\x12O\n" + + "expires_at\x18\x04 \x01(\v2\x1a.google.protobuf.TimestampR\texpiresAt2\x9a\x04\n" + + "\x11EngPadSyncService\x12O\n" + "\fSyncNotebook\x12\x1e.engpad.v1.SyncNotebookRequest\x1a\x1f.engpad.v1.SyncNotebookResponse\x12U\n" + "\x0eDeleteNotebook\x12 .engpad.v1.DeleteNotebookRequest\x1a!.engpad.v1.DeleteNotebookResponse\x12R\n" + "\rListNotebooks\x12\x1f.engpad.v1.ListNotebooksRequest\x1a .engpad.v1.ListNotebooksResponse\x12X\n" + "\x0fCreateShareLink\x12!.engpad.v1.CreateShareLinkRequest\x1a\".engpad.v1.CreateShareLinkResponse\x12X\n" + "\x0fRevokeShareLink\x12!.engpad.v1.RevokeShareLinkRequest\x1a\".engpad.v1.RevokeShareLinkResponse\x12U\n" + - "\x0eListShareLinks\x12 .engpad.v1.ListShareLinksRequest\x1a!.engpad.v1.ListShareLinksResponseB=Z;git.wntrmute.dev/kyle/eng-pad-server/gen/engpad/v1;engpadv1b\x06proto3" + "\x0eListShareLinks\x12 .engpad.v1.ListShareLinksRequest\x1a!.engpad.v1.ListShareLinksResponseBa\n" + + " net.metacircular.engpad.proto.v1P\x01Z;git.wntrmute.dev/kyle/eng-pad-server/gen/engpad/v1;engpadv1b\x06proto3" var ( - file_engpad_v1_sync_proto_rawDescOnce sync.Once - file_engpad_v1_sync_proto_rawDescData []byte + file_proto_engpad_v1_sync_proto_rawDescOnce sync.Once + file_proto_engpad_v1_sync_proto_rawDescData []byte ) -func file_engpad_v1_sync_proto_rawDescGZIP() []byte { - file_engpad_v1_sync_proto_rawDescOnce.Do(func() { - file_engpad_v1_sync_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_engpad_v1_sync_proto_rawDesc), len(file_engpad_v1_sync_proto_rawDesc))) +func file_proto_engpad_v1_sync_proto_rawDescGZIP() []byte { + file_proto_engpad_v1_sync_proto_rawDescOnce.Do(func() { + file_proto_engpad_v1_sync_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_proto_engpad_v1_sync_proto_rawDesc), len(file_proto_engpad_v1_sync_proto_rawDesc))) }) - return file_engpad_v1_sync_proto_rawDescData + return file_proto_engpad_v1_sync_proto_rawDescData } -var file_engpad_v1_sync_proto_msgTypes = make([]protoimpl.MessageInfo, 16) -var file_engpad_v1_sync_proto_goTypes = []any{ +var file_proto_engpad_v1_sync_proto_msgTypes = make([]protoimpl.MessageInfo, 16) +var file_proto_engpad_v1_sync_proto_goTypes = []any{ (*SyncNotebookRequest)(nil), // 0: engpad.v1.SyncNotebookRequest (*PageData)(nil), // 1: engpad.v1.PageData (*StrokeData)(nil), // 2: engpad.v1.StrokeData @@ -977,7 +977,7 @@ var file_engpad_v1_sync_proto_goTypes = []any{ (*ShareLinkInfo)(nil), // 15: engpad.v1.ShareLinkInfo (*timestamppb.Timestamp)(nil), // 16: google.protobuf.Timestamp } -var file_engpad_v1_sync_proto_depIdxs = []int32{ +var file_proto_engpad_v1_sync_proto_depIdxs = []int32{ 1, // 0: engpad.v1.SyncNotebookRequest.pages:type_name -> engpad.v1.PageData 2, // 1: engpad.v1.PageData.strokes:type_name -> engpad.v1.StrokeData 16, // 2: engpad.v1.SyncNotebookResponse.synced_at:type_name -> google.protobuf.Timestamp @@ -987,18 +987,18 @@ var file_engpad_v1_sync_proto_depIdxs = []int32{ 15, // 6: engpad.v1.ListShareLinksResponse.links:type_name -> engpad.v1.ShareLinkInfo 16, // 7: engpad.v1.ShareLinkInfo.created_at:type_name -> google.protobuf.Timestamp 16, // 8: engpad.v1.ShareLinkInfo.expires_at:type_name -> google.protobuf.Timestamp - 0, // 9: engpad.v1.EngPadSync.SyncNotebook:input_type -> engpad.v1.SyncNotebookRequest - 4, // 10: engpad.v1.EngPadSync.DeleteNotebook:input_type -> engpad.v1.DeleteNotebookRequest - 6, // 11: engpad.v1.EngPadSync.ListNotebooks:input_type -> engpad.v1.ListNotebooksRequest - 9, // 12: engpad.v1.EngPadSync.CreateShareLink:input_type -> engpad.v1.CreateShareLinkRequest - 11, // 13: engpad.v1.EngPadSync.RevokeShareLink:input_type -> engpad.v1.RevokeShareLinkRequest - 13, // 14: engpad.v1.EngPadSync.ListShareLinks:input_type -> engpad.v1.ListShareLinksRequest - 3, // 15: engpad.v1.EngPadSync.SyncNotebook:output_type -> engpad.v1.SyncNotebookResponse - 5, // 16: engpad.v1.EngPadSync.DeleteNotebook:output_type -> engpad.v1.DeleteNotebookResponse - 7, // 17: engpad.v1.EngPadSync.ListNotebooks:output_type -> engpad.v1.ListNotebooksResponse - 10, // 18: engpad.v1.EngPadSync.CreateShareLink:output_type -> engpad.v1.CreateShareLinkResponse - 12, // 19: engpad.v1.EngPadSync.RevokeShareLink:output_type -> engpad.v1.RevokeShareLinkResponse - 14, // 20: engpad.v1.EngPadSync.ListShareLinks:output_type -> engpad.v1.ListShareLinksResponse + 0, // 9: engpad.v1.EngPadSyncService.SyncNotebook:input_type -> engpad.v1.SyncNotebookRequest + 4, // 10: engpad.v1.EngPadSyncService.DeleteNotebook:input_type -> engpad.v1.DeleteNotebookRequest + 6, // 11: engpad.v1.EngPadSyncService.ListNotebooks:input_type -> engpad.v1.ListNotebooksRequest + 9, // 12: engpad.v1.EngPadSyncService.CreateShareLink:input_type -> engpad.v1.CreateShareLinkRequest + 11, // 13: engpad.v1.EngPadSyncService.RevokeShareLink:input_type -> engpad.v1.RevokeShareLinkRequest + 13, // 14: engpad.v1.EngPadSyncService.ListShareLinks:input_type -> engpad.v1.ListShareLinksRequest + 3, // 15: engpad.v1.EngPadSyncService.SyncNotebook:output_type -> engpad.v1.SyncNotebookResponse + 5, // 16: engpad.v1.EngPadSyncService.DeleteNotebook:output_type -> engpad.v1.DeleteNotebookResponse + 7, // 17: engpad.v1.EngPadSyncService.ListNotebooks:output_type -> engpad.v1.ListNotebooksResponse + 10, // 18: engpad.v1.EngPadSyncService.CreateShareLink:output_type -> engpad.v1.CreateShareLinkResponse + 12, // 19: engpad.v1.EngPadSyncService.RevokeShareLink:output_type -> engpad.v1.RevokeShareLinkResponse + 14, // 20: engpad.v1.EngPadSyncService.ListShareLinks:output_type -> engpad.v1.ListShareLinksResponse 15, // [15:21] is the sub-list for method output_type 9, // [9:15] is the sub-list for method input_type 9, // [9:9] is the sub-list for extension type_name @@ -1006,26 +1006,26 @@ var file_engpad_v1_sync_proto_depIdxs = []int32{ 0, // [0:9] is the sub-list for field type_name } -func init() { file_engpad_v1_sync_proto_init() } -func file_engpad_v1_sync_proto_init() { - if File_engpad_v1_sync_proto != nil { +func init() { file_proto_engpad_v1_sync_proto_init() } +func file_proto_engpad_v1_sync_proto_init() { + if File_proto_engpad_v1_sync_proto != nil { return } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: unsafe.Slice(unsafe.StringData(file_engpad_v1_sync_proto_rawDesc), len(file_engpad_v1_sync_proto_rawDesc)), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_proto_engpad_v1_sync_proto_rawDesc), len(file_proto_engpad_v1_sync_proto_rawDesc)), NumEnums: 0, NumMessages: 16, NumExtensions: 0, NumServices: 1, }, - GoTypes: file_engpad_v1_sync_proto_goTypes, - DependencyIndexes: file_engpad_v1_sync_proto_depIdxs, - MessageInfos: file_engpad_v1_sync_proto_msgTypes, + GoTypes: file_proto_engpad_v1_sync_proto_goTypes, + DependencyIndexes: file_proto_engpad_v1_sync_proto_depIdxs, + MessageInfos: file_proto_engpad_v1_sync_proto_msgTypes, }.Build() - File_engpad_v1_sync_proto = out.File - file_engpad_v1_sync_proto_goTypes = nil - file_engpad_v1_sync_proto_depIdxs = nil + File_proto_engpad_v1_sync_proto = out.File + file_proto_engpad_v1_sync_proto_goTypes = nil + file_proto_engpad_v1_sync_proto_depIdxs = nil } diff --git a/gen/engpad/v1/sync_grpc.pb.go b/gen/engpad/v1/sync_grpc.pb.go index 0c42dbc..ec904ee 100644 --- a/gen/engpad/v1/sync_grpc.pb.go +++ b/gen/engpad/v1/sync_grpc.pb.go @@ -2,7 +2,7 @@ // versions: // - protoc-gen-go-grpc v1.6.1 // - protoc v3.20.3 -// source: engpad/v1/sync.proto +// source: proto/engpad/v1/sync.proto package engpadv1 @@ -19,18 +19,18 @@ import ( const _ = grpc.SupportPackageIsVersion9 const ( - EngPadSync_SyncNotebook_FullMethodName = "/engpad.v1.EngPadSync/SyncNotebook" - EngPadSync_DeleteNotebook_FullMethodName = "/engpad.v1.EngPadSync/DeleteNotebook" - EngPadSync_ListNotebooks_FullMethodName = "/engpad.v1.EngPadSync/ListNotebooks" - EngPadSync_CreateShareLink_FullMethodName = "/engpad.v1.EngPadSync/CreateShareLink" - EngPadSync_RevokeShareLink_FullMethodName = "/engpad.v1.EngPadSync/RevokeShareLink" - EngPadSync_ListShareLinks_FullMethodName = "/engpad.v1.EngPadSync/ListShareLinks" + EngPadSyncService_SyncNotebook_FullMethodName = "/engpad.v1.EngPadSyncService/SyncNotebook" + EngPadSyncService_DeleteNotebook_FullMethodName = "/engpad.v1.EngPadSyncService/DeleteNotebook" + EngPadSyncService_ListNotebooks_FullMethodName = "/engpad.v1.EngPadSyncService/ListNotebooks" + EngPadSyncService_CreateShareLink_FullMethodName = "/engpad.v1.EngPadSyncService/CreateShareLink" + EngPadSyncService_RevokeShareLink_FullMethodName = "/engpad.v1.EngPadSyncService/RevokeShareLink" + EngPadSyncService_ListShareLinks_FullMethodName = "/engpad.v1.EngPadSyncService/ListShareLinks" ) -// EngPadSyncClient is the client API for EngPadSync service. +// EngPadSyncServiceClient is the client API for EngPadSyncService service. // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type EngPadSyncClient interface { +type EngPadSyncServiceClient interface { SyncNotebook(ctx context.Context, in *SyncNotebookRequest, opts ...grpc.CallOption) (*SyncNotebookResponse, error) DeleteNotebook(ctx context.Context, in *DeleteNotebookRequest, opts ...grpc.CallOption) (*DeleteNotebookResponse, error) ListNotebooks(ctx context.Context, in *ListNotebooksRequest, opts ...grpc.CallOption) (*ListNotebooksResponse, error) @@ -39,273 +39,273 @@ type EngPadSyncClient interface { ListShareLinks(ctx context.Context, in *ListShareLinksRequest, opts ...grpc.CallOption) (*ListShareLinksResponse, error) } -type engPadSyncClient struct { +type engPadSyncServiceClient struct { cc grpc.ClientConnInterface } -func NewEngPadSyncClient(cc grpc.ClientConnInterface) EngPadSyncClient { - return &engPadSyncClient{cc} +func NewEngPadSyncServiceClient(cc grpc.ClientConnInterface) EngPadSyncServiceClient { + return &engPadSyncServiceClient{cc} } -func (c *engPadSyncClient) SyncNotebook(ctx context.Context, in *SyncNotebookRequest, opts ...grpc.CallOption) (*SyncNotebookResponse, error) { +func (c *engPadSyncServiceClient) SyncNotebook(ctx context.Context, in *SyncNotebookRequest, opts ...grpc.CallOption) (*SyncNotebookResponse, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(SyncNotebookResponse) - err := c.cc.Invoke(ctx, EngPadSync_SyncNotebook_FullMethodName, in, out, cOpts...) + err := c.cc.Invoke(ctx, EngPadSyncService_SyncNotebook_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } return out, nil } -func (c *engPadSyncClient) DeleteNotebook(ctx context.Context, in *DeleteNotebookRequest, opts ...grpc.CallOption) (*DeleteNotebookResponse, error) { +func (c *engPadSyncServiceClient) DeleteNotebook(ctx context.Context, in *DeleteNotebookRequest, opts ...grpc.CallOption) (*DeleteNotebookResponse, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(DeleteNotebookResponse) - err := c.cc.Invoke(ctx, EngPadSync_DeleteNotebook_FullMethodName, in, out, cOpts...) + err := c.cc.Invoke(ctx, EngPadSyncService_DeleteNotebook_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } return out, nil } -func (c *engPadSyncClient) ListNotebooks(ctx context.Context, in *ListNotebooksRequest, opts ...grpc.CallOption) (*ListNotebooksResponse, error) { +func (c *engPadSyncServiceClient) ListNotebooks(ctx context.Context, in *ListNotebooksRequest, opts ...grpc.CallOption) (*ListNotebooksResponse, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(ListNotebooksResponse) - err := c.cc.Invoke(ctx, EngPadSync_ListNotebooks_FullMethodName, in, out, cOpts...) + err := c.cc.Invoke(ctx, EngPadSyncService_ListNotebooks_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } return out, nil } -func (c *engPadSyncClient) CreateShareLink(ctx context.Context, in *CreateShareLinkRequest, opts ...grpc.CallOption) (*CreateShareLinkResponse, error) { +func (c *engPadSyncServiceClient) CreateShareLink(ctx context.Context, in *CreateShareLinkRequest, opts ...grpc.CallOption) (*CreateShareLinkResponse, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(CreateShareLinkResponse) - err := c.cc.Invoke(ctx, EngPadSync_CreateShareLink_FullMethodName, in, out, cOpts...) + err := c.cc.Invoke(ctx, EngPadSyncService_CreateShareLink_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } return out, nil } -func (c *engPadSyncClient) RevokeShareLink(ctx context.Context, in *RevokeShareLinkRequest, opts ...grpc.CallOption) (*RevokeShareLinkResponse, error) { +func (c *engPadSyncServiceClient) RevokeShareLink(ctx context.Context, in *RevokeShareLinkRequest, opts ...grpc.CallOption) (*RevokeShareLinkResponse, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(RevokeShareLinkResponse) - err := c.cc.Invoke(ctx, EngPadSync_RevokeShareLink_FullMethodName, in, out, cOpts...) + err := c.cc.Invoke(ctx, EngPadSyncService_RevokeShareLink_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } return out, nil } -func (c *engPadSyncClient) ListShareLinks(ctx context.Context, in *ListShareLinksRequest, opts ...grpc.CallOption) (*ListShareLinksResponse, error) { +func (c *engPadSyncServiceClient) ListShareLinks(ctx context.Context, in *ListShareLinksRequest, opts ...grpc.CallOption) (*ListShareLinksResponse, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(ListShareLinksResponse) - err := c.cc.Invoke(ctx, EngPadSync_ListShareLinks_FullMethodName, in, out, cOpts...) + err := c.cc.Invoke(ctx, EngPadSyncService_ListShareLinks_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } return out, nil } -// EngPadSyncServer is the server API for EngPadSync service. -// All implementations must embed UnimplementedEngPadSyncServer +// EngPadSyncServiceServer is the server API for EngPadSyncService service. +// All implementations must embed UnimplementedEngPadSyncServiceServer // for forward compatibility. -type EngPadSyncServer interface { +type EngPadSyncServiceServer interface { SyncNotebook(context.Context, *SyncNotebookRequest) (*SyncNotebookResponse, error) DeleteNotebook(context.Context, *DeleteNotebookRequest) (*DeleteNotebookResponse, error) ListNotebooks(context.Context, *ListNotebooksRequest) (*ListNotebooksResponse, error) CreateShareLink(context.Context, *CreateShareLinkRequest) (*CreateShareLinkResponse, error) RevokeShareLink(context.Context, *RevokeShareLinkRequest) (*RevokeShareLinkResponse, error) ListShareLinks(context.Context, *ListShareLinksRequest) (*ListShareLinksResponse, error) - mustEmbedUnimplementedEngPadSyncServer() + mustEmbedUnimplementedEngPadSyncServiceServer() } -// UnimplementedEngPadSyncServer must be embedded to have +// UnimplementedEngPadSyncServiceServer must be embedded to have // forward compatible implementations. // // NOTE: this should be embedded by value instead of pointer to avoid a nil // pointer dereference when methods are called. -type UnimplementedEngPadSyncServer struct{} +type UnimplementedEngPadSyncServiceServer struct{} -func (UnimplementedEngPadSyncServer) SyncNotebook(context.Context, *SyncNotebookRequest) (*SyncNotebookResponse, error) { +func (UnimplementedEngPadSyncServiceServer) SyncNotebook(context.Context, *SyncNotebookRequest) (*SyncNotebookResponse, error) { return nil, status.Error(codes.Unimplemented, "method SyncNotebook not implemented") } -func (UnimplementedEngPadSyncServer) DeleteNotebook(context.Context, *DeleteNotebookRequest) (*DeleteNotebookResponse, error) { +func (UnimplementedEngPadSyncServiceServer) DeleteNotebook(context.Context, *DeleteNotebookRequest) (*DeleteNotebookResponse, error) { return nil, status.Error(codes.Unimplemented, "method DeleteNotebook not implemented") } -func (UnimplementedEngPadSyncServer) ListNotebooks(context.Context, *ListNotebooksRequest) (*ListNotebooksResponse, error) { +func (UnimplementedEngPadSyncServiceServer) ListNotebooks(context.Context, *ListNotebooksRequest) (*ListNotebooksResponse, error) { return nil, status.Error(codes.Unimplemented, "method ListNotebooks not implemented") } -func (UnimplementedEngPadSyncServer) CreateShareLink(context.Context, *CreateShareLinkRequest) (*CreateShareLinkResponse, error) { +func (UnimplementedEngPadSyncServiceServer) CreateShareLink(context.Context, *CreateShareLinkRequest) (*CreateShareLinkResponse, error) { return nil, status.Error(codes.Unimplemented, "method CreateShareLink not implemented") } -func (UnimplementedEngPadSyncServer) RevokeShareLink(context.Context, *RevokeShareLinkRequest) (*RevokeShareLinkResponse, error) { +func (UnimplementedEngPadSyncServiceServer) RevokeShareLink(context.Context, *RevokeShareLinkRequest) (*RevokeShareLinkResponse, error) { return nil, status.Error(codes.Unimplemented, "method RevokeShareLink not implemented") } -func (UnimplementedEngPadSyncServer) ListShareLinks(context.Context, *ListShareLinksRequest) (*ListShareLinksResponse, error) { +func (UnimplementedEngPadSyncServiceServer) ListShareLinks(context.Context, *ListShareLinksRequest) (*ListShareLinksResponse, error) { return nil, status.Error(codes.Unimplemented, "method ListShareLinks not implemented") } -func (UnimplementedEngPadSyncServer) mustEmbedUnimplementedEngPadSyncServer() {} -func (UnimplementedEngPadSyncServer) testEmbeddedByValue() {} +func (UnimplementedEngPadSyncServiceServer) mustEmbedUnimplementedEngPadSyncServiceServer() {} +func (UnimplementedEngPadSyncServiceServer) testEmbeddedByValue() {} -// UnsafeEngPadSyncServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to EngPadSyncServer will +// UnsafeEngPadSyncServiceServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to EngPadSyncServiceServer will // result in compilation errors. -type UnsafeEngPadSyncServer interface { - mustEmbedUnimplementedEngPadSyncServer() +type UnsafeEngPadSyncServiceServer interface { + mustEmbedUnimplementedEngPadSyncServiceServer() } -func RegisterEngPadSyncServer(s grpc.ServiceRegistrar, srv EngPadSyncServer) { - // If the following call panics, it indicates UnimplementedEngPadSyncServer was +func RegisterEngPadSyncServiceServer(s grpc.ServiceRegistrar, srv EngPadSyncServiceServer) { + // If the following call panics, it indicates UnimplementedEngPadSyncServiceServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { t.testEmbeddedByValue() } - s.RegisterService(&EngPadSync_ServiceDesc, srv) + s.RegisterService(&EngPadSyncService_ServiceDesc, srv) } -func _EngPadSync_SyncNotebook_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { +func _EngPadSyncService_SyncNotebook_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(SyncNotebookRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(EngPadSyncServer).SyncNotebook(ctx, in) + return srv.(EngPadSyncServiceServer).SyncNotebook(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: EngPadSync_SyncNotebook_FullMethodName, + FullMethod: EngPadSyncService_SyncNotebook_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(EngPadSyncServer).SyncNotebook(ctx, req.(*SyncNotebookRequest)) + return srv.(EngPadSyncServiceServer).SyncNotebook(ctx, req.(*SyncNotebookRequest)) } return interceptor(ctx, in, info, handler) } -func _EngPadSync_DeleteNotebook_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { +func _EngPadSyncService_DeleteNotebook_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(DeleteNotebookRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(EngPadSyncServer).DeleteNotebook(ctx, in) + return srv.(EngPadSyncServiceServer).DeleteNotebook(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: EngPadSync_DeleteNotebook_FullMethodName, + FullMethod: EngPadSyncService_DeleteNotebook_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(EngPadSyncServer).DeleteNotebook(ctx, req.(*DeleteNotebookRequest)) + return srv.(EngPadSyncServiceServer).DeleteNotebook(ctx, req.(*DeleteNotebookRequest)) } return interceptor(ctx, in, info, handler) } -func _EngPadSync_ListNotebooks_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { +func _EngPadSyncService_ListNotebooks_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(ListNotebooksRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(EngPadSyncServer).ListNotebooks(ctx, in) + return srv.(EngPadSyncServiceServer).ListNotebooks(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: EngPadSync_ListNotebooks_FullMethodName, + FullMethod: EngPadSyncService_ListNotebooks_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(EngPadSyncServer).ListNotebooks(ctx, req.(*ListNotebooksRequest)) + return srv.(EngPadSyncServiceServer).ListNotebooks(ctx, req.(*ListNotebooksRequest)) } return interceptor(ctx, in, info, handler) } -func _EngPadSync_CreateShareLink_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { +func _EngPadSyncService_CreateShareLink_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(CreateShareLinkRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(EngPadSyncServer).CreateShareLink(ctx, in) + return srv.(EngPadSyncServiceServer).CreateShareLink(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: EngPadSync_CreateShareLink_FullMethodName, + FullMethod: EngPadSyncService_CreateShareLink_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(EngPadSyncServer).CreateShareLink(ctx, req.(*CreateShareLinkRequest)) + return srv.(EngPadSyncServiceServer).CreateShareLink(ctx, req.(*CreateShareLinkRequest)) } return interceptor(ctx, in, info, handler) } -func _EngPadSync_RevokeShareLink_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { +func _EngPadSyncService_RevokeShareLink_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(RevokeShareLinkRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(EngPadSyncServer).RevokeShareLink(ctx, in) + return srv.(EngPadSyncServiceServer).RevokeShareLink(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: EngPadSync_RevokeShareLink_FullMethodName, + FullMethod: EngPadSyncService_RevokeShareLink_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(EngPadSyncServer).RevokeShareLink(ctx, req.(*RevokeShareLinkRequest)) + return srv.(EngPadSyncServiceServer).RevokeShareLink(ctx, req.(*RevokeShareLinkRequest)) } return interceptor(ctx, in, info, handler) } -func _EngPadSync_ListShareLinks_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { +func _EngPadSyncService_ListShareLinks_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(ListShareLinksRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(EngPadSyncServer).ListShareLinks(ctx, in) + return srv.(EngPadSyncServiceServer).ListShareLinks(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: EngPadSync_ListShareLinks_FullMethodName, + FullMethod: EngPadSyncService_ListShareLinks_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(EngPadSyncServer).ListShareLinks(ctx, req.(*ListShareLinksRequest)) + return srv.(EngPadSyncServiceServer).ListShareLinks(ctx, req.(*ListShareLinksRequest)) } return interceptor(ctx, in, info, handler) } -// EngPadSync_ServiceDesc is the grpc.ServiceDesc for EngPadSync service. +// EngPadSyncService_ServiceDesc is the grpc.ServiceDesc for EngPadSyncService service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) -var EngPadSync_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "engpad.v1.EngPadSync", - HandlerType: (*EngPadSyncServer)(nil), +var EngPadSyncService_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "engpad.v1.EngPadSyncService", + HandlerType: (*EngPadSyncServiceServer)(nil), Methods: []grpc.MethodDesc{ { MethodName: "SyncNotebook", - Handler: _EngPadSync_SyncNotebook_Handler, + Handler: _EngPadSyncService_SyncNotebook_Handler, }, { MethodName: "DeleteNotebook", - Handler: _EngPadSync_DeleteNotebook_Handler, + Handler: _EngPadSyncService_DeleteNotebook_Handler, }, { MethodName: "ListNotebooks", - Handler: _EngPadSync_ListNotebooks_Handler, + Handler: _EngPadSyncService_ListNotebooks_Handler, }, { MethodName: "CreateShareLink", - Handler: _EngPadSync_CreateShareLink_Handler, + Handler: _EngPadSyncService_CreateShareLink_Handler, }, { MethodName: "RevokeShareLink", - Handler: _EngPadSync_RevokeShareLink_Handler, + Handler: _EngPadSyncService_RevokeShareLink_Handler, }, { MethodName: "ListShareLinks", - Handler: _EngPadSync_ListShareLinks_Handler, + Handler: _EngPadSyncService_ListShareLinks_Handler, }, }, Streams: []grpc.StreamDesc{}, - Metadata: "engpad/v1/sync.proto", + Metadata: "proto/engpad/v1/sync.proto", } diff --git a/internal/grpcserver/server.go b/internal/grpcserver/server.go index e51b62b..36030e0 100644 --- a/internal/grpcserver/server.go +++ b/internal/grpcserver/server.go @@ -45,7 +45,7 @@ func Start(cfg Config) (*grpc.Server, error) { ) syncSvc := &SyncService{DB: cfg.DB, BaseURL: cfg.BaseURL} - pb.RegisterEngPadSyncServer(srv, syncSvc) + pb.RegisterEngPadSyncServiceServer(srv, syncSvc) slog.Info("gRPC server started", "addr", cfg.Addr) go func() { _ = srv.Serve(lis) }() diff --git a/internal/grpcserver/sync.go b/internal/grpcserver/sync.go index 095380b..19600aa 100644 --- a/internal/grpcserver/sync.go +++ b/internal/grpcserver/sync.go @@ -12,7 +12,7 @@ import ( ) type SyncService struct { - pb.UnimplementedEngPadSyncServer + pb.UnimplementedEngPadSyncServiceServer DB *sql.DB BaseURL string } diff --git a/proto/engpad/v1/sync.proto b/proto/engpad/v1/sync.proto index 1cbe28d..9a36203 100644 --- a/proto/engpad/v1/sync.proto +++ b/proto/engpad/v1/sync.proto @@ -2,10 +2,12 @@ syntax = "proto3"; package engpad.v1; option go_package = "git.wntrmute.dev/kyle/eng-pad-server/gen/engpad/v1;engpadv1"; +option java_package = "net.metacircular.engpad.proto.v1"; +option java_multiple_files = true; import "google/protobuf/timestamp.proto"; -service EngPadSync { +service EngPadSyncService { rpc SyncNotebook(SyncNotebookRequest) returns (SyncNotebookResponse); rpc DeleteNotebook(DeleteNotebookRequest) returns (DeleteNotebookResponse); rpc ListNotebooks(ListNotebooksRequest) returns (ListNotebooksResponse); diff --git a/web/templates/keys.html b/web/templates/keys.html new file mode 100644 index 0000000..8de1165 --- /dev/null +++ b/web/templates/keys.html @@ -0,0 +1,135 @@ +{{define "title"}}Security Keys — Engineering Pad{{end}} + +{{define "nav-right"}}Logout{{end}} + +{{define "content"}} +

Security Keys

+ +

Back to Notebooks

+ +{{if .Keys}} + + + + + + + + + + {{range .Keys}} + + + + + + {{end}} + +
NameRegistered
{{.Name}}{{.CreatedAt.Format "2006-01-02 15:04"}} +
+ + +
+
+{{else}} +

No security keys registered.

+{{end}} + +{{if .WebAuthnEnabled}} +
+

Register New Key

+
+ + +
+ +

+
+ + +{{end}} +{{end}}