...
1
21
22 package fosite
23
24 import (
25 "net/url"
26 "time"
27
28 "github.com/pborman/uuid"
29 "golang.org/x/text/language"
30 )
31
32
33 type Request struct {
34 ID string `json:"id" gorethink:"id"`
35 RequestedAt time.Time `json:"requestedAt" gorethink:"requestedAt"`
36 Client Client `json:"client" gorethink:"client"`
37 RequestedScope Arguments `json:"scopes" gorethink:"scopes"`
38 GrantedScope Arguments `json:"grantedScopes" gorethink:"grantedScopes"`
39 Form url.Values `json:"form" gorethink:"form"`
40 Session Session `json:"session" gorethink:"session"`
41 RequestedAudience Arguments `json:"requestedAudience"`
42 GrantedAudience Arguments `json:"grantedAudience"`
43 Lang language.Tag `json:"-"`
44 }
45
46 func NewRequest() *Request {
47 return &Request{
48 Client: &DefaultClient{},
49 RequestedScope: Arguments{},
50 RequestedAudience: Arguments{},
51 GrantedAudience: Arguments{},
52 GrantedScope: Arguments{},
53 Form: url.Values{},
54 RequestedAt: time.Now().UTC(),
55 }
56 }
57
58 func (a *Request) GetID() string {
59 if a.ID == "" {
60 a.ID = uuid.New()
61 }
62 return a.ID
63 }
64
65 func (a *Request) SetID(id string) {
66 a.ID = id
67 }
68
69 func (a *Request) GetRequestForm() url.Values {
70 return a.Form
71 }
72
73 func (a *Request) GetRequestedAt() time.Time {
74 return a.RequestedAt
75 }
76
77 func (a *Request) GetClient() Client {
78 return a.Client
79 }
80
81 func (a *Request) GetRequestedScopes() Arguments {
82 return a.RequestedScope
83 }
84
85 func (a *Request) SetRequestedScopes(s Arguments) {
86 a.RequestedScope = nil
87 for _, scope := range s {
88 a.AppendRequestedScope(scope)
89 }
90 }
91
92 func (a *Request) SetRequestedAudience(s Arguments) {
93 a.RequestedAudience = nil
94 for _, scope := range s {
95 a.AppendRequestedAudience(scope)
96 }
97 }
98
99 func (a *Request) AppendRequestedScope(scope string) {
100 for _, has := range a.RequestedScope {
101 if scope == has {
102 return
103 }
104 }
105 a.RequestedScope = append(a.RequestedScope, scope)
106 }
107
108 func (a *Request) AppendRequestedAudience(audience string) {
109 for _, has := range a.RequestedAudience {
110 if audience == has {
111 return
112 }
113 }
114 a.RequestedAudience = append(a.RequestedAudience, audience)
115 }
116
117 func (a *Request) GetRequestedAudience() (audience Arguments) {
118 return a.RequestedAudience
119 }
120
121 func (a *Request) GrantAudience(audience string) {
122 for _, has := range a.GrantedAudience {
123 if audience == has {
124 return
125 }
126 }
127 a.GrantedAudience = append(a.GrantedAudience, audience)
128 }
129
130 func (a *Request) GetGrantedScopes() Arguments {
131 return a.GrantedScope
132 }
133
134 func (a *Request) GetGrantedAudience() Arguments {
135 return a.GrantedAudience
136 }
137
138 func (a *Request) GrantScope(scope string) {
139 for _, has := range a.GrantedScope {
140 if scope == has {
141 return
142 }
143 }
144 a.GrantedScope = append(a.GrantedScope, scope)
145 }
146
147 func (a *Request) SetSession(session Session) {
148 a.Session = session
149 }
150
151 func (a *Request) GetSession() Session {
152 return a.Session
153 }
154
155 func (a *Request) Merge(request Requester) {
156 for _, scope := range request.GetRequestedScopes() {
157 a.AppendRequestedScope(scope)
158 }
159 for _, scope := range request.GetGrantedScopes() {
160 a.GrantScope(scope)
161 }
162
163 for _, aud := range request.GetRequestedAudience() {
164 a.AppendRequestedAudience(aud)
165 }
166 for _, aud := range request.GetGrantedAudience() {
167 a.GrantAudience(aud)
168 }
169
170 a.ID = request.GetID()
171 a.RequestedAt = request.GetRequestedAt()
172 a.Client = request.GetClient()
173 a.Session = request.GetSession()
174
175 for k, v := range request.GetRequestForm() {
176 a.Form[k] = v
177 }
178 }
179
180 func (a *Request) Sanitize(allowedParameters []string) Requester {
181 b := new(Request)
182 allowed := map[string]bool{}
183 for _, v := range allowedParameters {
184 allowed[v] = true
185 }
186
187 *b = *a
188 b.ID = a.GetID()
189 b.Form = url.Values{}
190 for k := range a.Form {
191 if allowed[k] {
192 b.Form[k] = a.Form[k]
193 }
194 }
195
196 return b
197 }
198
199 func (a *Request) GetLang() language.Tag {
200 return a.Lang
201 }
202
View as plain text