-
Notifications
You must be signed in to change notification settings - Fork 310
/
public.go
139 lines (126 loc) · 3.63 KB
/
public.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
// Copyright © 2019 The Things Network Foundation, The Things Industries B.V.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package ttnpb
func onlyPublicContactInfo(info []*ContactInfo) []*ContactInfo {
if info == nil {
return nil
}
out := make([]*ContactInfo, 0, len(info))
for _, info := range info {
if !info.Public {
continue
}
out = append(out, info)
}
return out
}
// PublicEntityFields are the fields that are public for each entity.
var PublicEntityFields = []string{
"ids",
"created_at",
"updated_at",
"contact_info", // Note that this is filtered.
}
// PublicApplicationFields are the Application's fields that are public.
var PublicApplicationFields = append(PublicEntityFields)
// PublicSafe returns a copy of the application with only the fields that are
// safe to return to any audience.
func (a *Application) PublicSafe() *Application {
if a == nil {
return nil
}
var safe Application
safe.SetFields(a, PublicApplicationFields...)
safe.ContactInfo = onlyPublicContactInfo(safe.ContactInfo)
return &safe
}
// PublicClientFields are the Client's fields that are public.
var PublicClientFields = append(PublicEntityFields,
"name",
"description",
"redirect_uris",
"state",
"skip_authorization",
"endorsed",
"grants",
"rights",
)
// PublicSafe returns a copy of the client with only the fields that are safe to
// return to any audience.
func (c *Client) PublicSafe() *Client {
if c == nil {
return nil
}
var safe Client
safe.SetFields(c, PublicClientFields...)
safe.ContactInfo = onlyPublicContactInfo(safe.ContactInfo)
return &safe
}
// PublicGatewayFields are the Gateway's fields that are public.
var PublicGatewayFields = append(PublicEntityFields,
"name",
"description",
"frequency_plan_id",
"status_public",
"location_public",
"antennas", // only public if location_public=true
)
// PublicSafe returns a copy of the gateway with only the fields that are
// safe to return to any audience.
func (g *Gateway) PublicSafe() *Gateway {
if g == nil {
return nil
}
var safe Gateway
safe.SetFields(g, PublicGatewayFields...)
safe.ContactInfo = onlyPublicContactInfo(safe.ContactInfo)
if !safe.LocationPublic {
safe.Antennas = nil
}
return &safe
}
// PublicOrganizationFields are the Organization's fields that are public.
var PublicOrganizationFields = append(PublicEntityFields,
"name",
)
// PublicSafe returns a copy of the organization with only the fields that are
// safe to return to any audience.
func (o *Organization) PublicSafe() *Organization {
if o == nil {
return nil
}
var safe Organization
safe.SetFields(o, PublicOrganizationFields...)
safe.ContactInfo = onlyPublicContactInfo(safe.ContactInfo)
return &safe
}
// PublicUserFields are the User's fields that are public.
var PublicUserFields = append(PublicEntityFields,
"name",
"description",
"state",
"admin",
"profile_picture",
)
// PublicSafe returns a copy of the user with only the fields that are safe to
// return to any audience.
func (u *User) PublicSafe() *User {
if u == nil {
return nil
}
var safe User
safe.SetFields(u, PublicUserFields...)
safe.ContactInfo = onlyPublicContactInfo(safe.ContactInfo)
return &safe
}