mirror of
https://github.com/tailscale/tailscale.git
synced 2025-05-03 22:21:17 +00:00
tailcfg: remove ancient UserProfiles.Roles field
And add omitempty to the ProfilePicURL too while here. Plenty of users (and tagged devices) don't have profile pics. Updates #14988 Change-Id: I6534bc14edb58fe1034d2d35ae2395f09fd7dd0d Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
parent
926a43fe51
commit
5a082fccec
@ -259,11 +259,7 @@ type UserProfile struct {
|
|||||||
ID UserID
|
ID UserID
|
||||||
LoginName string // "alice@smith.com"; for display purposes only (provider is not listed)
|
LoginName string // "alice@smith.com"; for display purposes only (provider is not listed)
|
||||||
DisplayName string // "Alice Smith"
|
DisplayName string // "Alice Smith"
|
||||||
ProfilePicURL string
|
ProfilePicURL string `json:",omitempty"`
|
||||||
|
|
||||||
// Roles exists for legacy reasons, to keep old macOS clients
|
|
||||||
// happy. It JSON marshals as [].
|
|
||||||
Roles emptyStructJSONSlice
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *UserProfile) Equal(p2 *UserProfile) bool {
|
func (p *UserProfile) Equal(p2 *UserProfile) bool {
|
||||||
@ -279,16 +275,6 @@ func (p *UserProfile) Equal(p2 *UserProfile) bool {
|
|||||||
p.ProfilePicURL == p2.ProfilePicURL
|
p.ProfilePicURL == p2.ProfilePicURL
|
||||||
}
|
}
|
||||||
|
|
||||||
type emptyStructJSONSlice struct{}
|
|
||||||
|
|
||||||
var emptyJSONSliceBytes = []byte("[]")
|
|
||||||
|
|
||||||
func (emptyStructJSONSlice) MarshalJSON() ([]byte, error) {
|
|
||||||
return emptyJSONSliceBytes, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (emptyStructJSONSlice) UnmarshalJSON([]byte) error { return nil }
|
|
||||||
|
|
||||||
// RawMessage is a raw encoded JSON value. It implements Marshaler and
|
// RawMessage is a raw encoded JSON value. It implements Marshaler and
|
||||||
// Unmarshaler and can be used to delay JSON decoding or precompute a JSON
|
// Unmarshaler and can be used to delay JSON decoding or precompute a JSON
|
||||||
// encoding.
|
// encoding.
|
||||||
|
@ -623,7 +623,6 @@ var _UserProfileCloneNeedsRegeneration = UserProfile(struct {
|
|||||||
LoginName string
|
LoginName string
|
||||||
DisplayName string
|
DisplayName string
|
||||||
ProfilePicURL string
|
ProfilePicURL string
|
||||||
Roles emptyStructJSONSlice
|
|
||||||
}{})
|
}{})
|
||||||
|
|
||||||
// Clone duplicates src into dst and reports whether it succeeded.
|
// Clone duplicates src into dst and reports whether it succeeded.
|
||||||
|
@ -10,7 +10,6 @@ import (
|
|||||||
"reflect"
|
"reflect"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@ -649,28 +648,6 @@ func TestCloneNode(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestUserProfileJSONMarshalForMac(t *testing.T) {
|
|
||||||
// Old macOS clients had a bug where they required
|
|
||||||
// UserProfile.Roles to be non-null. Lock that in
|
|
||||||
// 1.0.x/1.2.x clients are gone in the wild.
|
|
||||||
// See mac commit 0242c08a2ca496958027db1208f44251bff8488b (Sep 30).
|
|
||||||
// It was fixed in at least 1.4.x, and perhaps 1.2.x.
|
|
||||||
j, err := json.Marshal(UserProfile{})
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
const wantSub = `"Roles":[]`
|
|
||||||
if !strings.Contains(string(j), wantSub) {
|
|
||||||
t.Fatalf("didn't contain %#q; got: %s", wantSub, j)
|
|
||||||
}
|
|
||||||
|
|
||||||
// And back:
|
|
||||||
var up UserProfile
|
|
||||||
if err := json.Unmarshal(j, &up); err != nil {
|
|
||||||
t.Fatalf("Unmarshal: %v", err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestEndpointTypeMarshal(t *testing.T) {
|
func TestEndpointTypeMarshal(t *testing.T) {
|
||||||
eps := []EndpointType{
|
eps := []EndpointType{
|
||||||
EndpointUnknownType,
|
EndpointUnknownType,
|
||||||
|
@ -1403,7 +1403,6 @@ func (v UserProfileView) ID() UserID { return v.ж.ID }
|
|||||||
func (v UserProfileView) LoginName() string { return v.ж.LoginName }
|
func (v UserProfileView) LoginName() string { return v.ж.LoginName }
|
||||||
func (v UserProfileView) DisplayName() string { return v.ж.DisplayName }
|
func (v UserProfileView) DisplayName() string { return v.ж.DisplayName }
|
||||||
func (v UserProfileView) ProfilePicURL() string { return v.ж.ProfilePicURL }
|
func (v UserProfileView) ProfilePicURL() string { return v.ж.ProfilePicURL }
|
||||||
func (v UserProfileView) Roles() emptyStructJSONSlice { return v.ж.Roles }
|
|
||||||
func (v UserProfileView) Equal(v2 UserProfileView) bool { return v.ж.Equal(v2.ж) }
|
func (v UserProfileView) Equal(v2 UserProfileView) bool { return v.ж.Equal(v2.ж) }
|
||||||
|
|
||||||
// A compilation failure here means this code must be regenerated, with the command at the top of this file.
|
// A compilation failure here means this code must be regenerated, with the command at the top of this file.
|
||||||
@ -1412,5 +1411,4 @@ var _UserProfileViewNeedsRegeneration = UserProfile(struct {
|
|||||||
LoginName string
|
LoginName string
|
||||||
DisplayName string
|
DisplayName string
|
||||||
ProfilePicURL string
|
ProfilePicURL string
|
||||||
Roles emptyStructJSONSlice
|
|
||||||
}{})
|
}{})
|
||||||
|
Loading…
x
Reference in New Issue
Block a user