...

Source file src/github.com/ory/fosite/request.go

Documentation: github.com/ory/fosite

     1  /*
     2   * Copyright © 2015-2018 Aeneas Rekkas <aeneas+oss@aeneas.io>
     3   *
     4   * Licensed under the Apache License, Version 2.0 (the "License");
     5   * you may not use this file except in compliance with the License.
     6   * You may obtain a copy of the License at
     7   *
     8   *     http://www.apache.org/licenses/LICENSE-2.0
     9   *
    10   * Unless required by applicable law or agreed to in writing, software
    11   * distributed under the License is distributed on an "AS IS" BASIS,
    12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13   * See the License for the specific language governing permissions and
    14   * limitations under the License.
    15   *
    16   * @author		Aeneas Rekkas <aeneas+oss@aeneas.io>
    17   * @copyright 	2015-2018 Aeneas Rekkas <aeneas+oss@aeneas.io>
    18   * @license 	Apache-2.0
    19   *
    20   */
    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  // Request is an implementation of Requester
    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