auth

Paddy 2015-12-14 Parent:0a2c3d677161

181:b7e685839a1b Go to Latest

auth/config.go

Break out scopes and events. This repo has gotten unwieldy, and there are portions of it that need to be imported by a large number of other packages. For example, scopes will be used in almost every API we write. Rather than importing the entirety of this codebase into every API we write, I've opted to move the scope logic out into a scopes package, with a subpackage for the defined types, which is all most projects actually want to import. We also define some event type constants, and importing those shouldn't require a project to import all our dependencies, either. So I made an events subpackage that just holds those constants. This package has become a little bit of a red-headed stepchild and is do for a refactor, but I'm trying to put that off as long as I can. The refactoring of our scopes stuff has left a bug wherein a token can be granted for scopes that don't exist. I'm going to need to revisit that, and also how to limit scopes to only be granted to the users that should be able to request them. But that's a battle for another day.

History
paddy@96 1 package auth
paddy@96 2
paddy@96 3 import (
paddy@96 4 "errors"
paddy@96 5 "html/template"
paddy@101 6 "log"
paddy@178 7
paddy@178 8 "code.secondbit.org/events.hg"
paddy@96 9 )
paddy@96 10
paddy@96 11 var (
paddy@96 12 // ErrInvalidLoginURI is returned when a Context is instantiated with a Config object that specifies a LoginURI that can't be parsed as a URL.
paddy@96 13 ErrInvalidLoginURI = errors.New("invalid login URI")
paddy@102 14 // ErrConfigNotInitialized is returned when a Context is instantiated with a Config object that hasn't had its Init function called.
paddy@102 15 ErrConfigNotInitialized = errors.New("config not initialized")
paddy@171 16
paddy@171 17 // Version is used to keep track of what version of the build this is
paddy@171 18 Version string
paddy@96 19 )
paddy@96 20
paddy@96 21 // Config holds the configuration values necessary to run a server. A Config
paddy@96 22 // instance is the only way to instantiate a Context variable.
paddy@96 23 type Config struct {
paddy@178 24 ClientStore clientStore
paddy@178 25 AuthCodeStore authorizationCodeStore
paddy@178 26 ProfileStore profileStore
paddy@178 27 TokenStore tokenStore
paddy@178 28 SessionStore sessionStore
paddy@178 29 EventsPublisher events.Publisher
paddy@178 30 Template *template.Template
paddy@178 31 LoginURI string
paddy@178 32 JWTPrivateKey []byte
paddy@178 33 iterations int
paddy@178 34 secureCookie bool
paddy@96 35 }
paddy@101 36
paddy@102 37 // Init is a function that preps the Config object to be used for Context creation, setting variables
paddy@102 38 // that are determined at the beginning of program execution.
paddy@101 39 func (c *Config) Init() error {
paddy@101 40 scheme, ok := passphraseSchemes[CurPassphraseScheme]
paddy@101 41 if !ok {
paddy@101 42 return ErrInvalidPassphraseScheme
paddy@101 43 }
paddy@101 44 var err error
paddy@101 45 c.iterations, err = scheme.calculateIterations()
paddy@101 46 if err != nil {
paddy@101 47 return err
paddy@101 48 }
paddy@101 49 log.Printf("Generating passphrases with %d iterations...\n", c.iterations)
paddy@101 50 return nil
paddy@101 51 }