예제 #1
0
func (p *AuthComponent) CheckAuth(payload spirit.Payload) (result interface{}, err error) {

	if result, err = payload.GetData(); err != nil {
		return
	}

	var contexts interface{}
	var headerExist bool
	if contexts, headerExist = payload.GetContext(CtxHttpHeaders); !headerExist {
		err = ErrAuthorizationHeaderNotExist.New()
		return
	}

	if headers, ok := contexts.(map[string]interface{}); !ok {
		err = ErrAuthorizationHeaderNotExist.New()
		return
	} else if v, exist := headers["Authorization"]; !exist {
		err = ErrAuthorizationHeaderNotExist.New()
		return
	} else if authVal, ok := v.(string); !ok {
		err = ErrAuthorizationHeaderNotExist.New()
		return
	} else {
		authVal = strings.TrimLeft(authVal, "Basic ")

		var val []byte
		if val, err = base64.StdEncoding.DecodeString(authVal); err != nil {
			return
		}

		account := strings.Split(string(val), ":")

		if len(account) != 2 {
			err = ErrAuthorizationHeaderFmtError.New()
			return
		}

		if err = p.Auth.CheckAuth(account[0], account[1]); err != nil {
			return
		}
	}

	return
}