30 lines
1.1 KiB
Go
30 lines
1.1 KiB
Go
package richtext
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
// resolveCollabRoomID returns a stable Hocuspocus room for a document on the owner's drive.
|
|
// Auth sessions, public share links, and guests all join the same room when editing the same sidecar.
|
|
func (s *Service) resolveCollabRoomID(ctx context.Context, ownerID, ownerSidecarPath string) (string, error) {
|
|
ownerID = strings.TrimSpace(ownerID)
|
|
ownerSidecarPath = normalizePath(ownerSidecarPath)
|
|
if ownerID == "" || ownerSidecarPath == "" {
|
|
return "", fmt.Errorf("collab room: missing owner or path")
|
|
}
|
|
if rev, err := s.nc.FileRevision(ctx, ownerID, ownerSidecarPath); err == nil && rev.FileID > 0 {
|
|
return fmt.Sprintf("rt:%s:%d", ownerID, rev.FileID), nil
|
|
}
|
|
return fmt.Sprintf("rt:%s:%s", ownerID, hashPath(ownerSidecarPath)), nil
|
|
}
|
|
|
|
func (s *Service) ownerSidecarPathForPublic(ctx context.Context, token, password, clientCanonical, displayName string) (ownerID, ownerPath string, err error) {
|
|
binding, err := s.nc.ResolvePublicShareBinding(ctx, token, password)
|
|
if err != nil {
|
|
return "", "", err
|
|
}
|
|
return binding.OwnerID, binding.OwnerPathForClient(clientCanonical, displayName), nil
|
|
}
|