github.com/timstclair/heapster@v0.20.0-alpha1/Godeps/_workspace/src/golang.org/x/oauth2/internal/oauth2.go (about) 1 // Copyright 2014 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // Package internal contains support packages for oauth2 package. 6 package internal 7 8 import ( 9 "bufio" 10 "crypto/rsa" 11 "crypto/x509" 12 "encoding/pem" 13 "errors" 14 "fmt" 15 "io" 16 "strings" 17 ) 18 19 // ParseKey converts the binary contents of a private key file 20 // to an *rsa.PrivateKey. It detects whether the private key is in a 21 // PEM container or not. If so, it extracts the the private key 22 // from PEM container before conversion. It only supports PEM 23 // containers with no passphrase. 24 func ParseKey(key []byte) (*rsa.PrivateKey, error) { 25 block, _ := pem.Decode(key) 26 if block != nil { 27 key = block.Bytes 28 } 29 parsedKey, err := x509.ParsePKCS8PrivateKey(key) 30 if err != nil { 31 parsedKey, err = x509.ParsePKCS1PrivateKey(key) 32 if err != nil { 33 return nil, fmt.Errorf("private key should be a PEM or plain PKSC1 or PKCS8; parse error: %v", err) 34 } 35 } 36 parsed, ok := parsedKey.(*rsa.PrivateKey) 37 if !ok { 38 return nil, errors.New("private key is invalid") 39 } 40 return parsed, nil 41 } 42 43 func ParseINI(ini io.Reader) (map[string]map[string]string, error) { 44 result := map[string]map[string]string{ 45 "": map[string]string{}, // root section 46 } 47 scanner := bufio.NewScanner(ini) 48 currentSection := "" 49 for scanner.Scan() { 50 line := strings.TrimSpace(scanner.Text()) 51 if strings.HasPrefix(line, ";") { 52 // comment. 53 continue 54 } 55 if strings.HasPrefix(line, "[") && strings.HasSuffix(line, "]") { 56 currentSection = strings.TrimSpace(line[1 : len(line)-1]) 57 result[currentSection] = map[string]string{} 58 continue 59 } 60 parts := strings.SplitN(line, "=", 2) 61 if len(parts) == 2 && parts[0] != "" { 62 result[currentSection][strings.TrimSpace(parts[0])] = strings.TrimSpace(parts[1]) 63 } 64 } 65 if err := scanner.Err(); err != nil { 66 return nil, fmt.Errorf("error scanning ini: %v", err) 67 } 68 return result, nil 69 } 70 71 func CondVal(v string) []string { 72 if v == "" { 73 return nil 74 } 75 return []string{v} 76 }