func maybeUnauthorized(err error, msg string) error { if err == nil { return nil } if isUnauthorized(err) { return errors.Unauthorizedf("%s: unauthorized mongo access: %v", msg, err) } return fmt.Errorf("%s: %v", msg, err) }
func (s *verifyStorageSuite) TestVerifyStorageFails(c *gc.C) { defer testing.MakeFakeHome(c, existingEnv, "existing").Restore() ctx := testing.Context(c) environ, err := environs.PrepareFromName("test", ctx, configstore.NewMem()) c.Assert(err, gc.IsNil) stor := environ.Storage() someError := errors.Unauthorizedf("you shall not pass") dummy.Poison(stor, environs.VerificationFilename, someError) err = environs.VerifyStorage(stor) c.Assert(err, gc.Equals, environs.VerifyStorageError) }
func (s *BootstrapSuite) TestInitialPassword(c *gc.C) { machineConf, cmd, err := s.initBootstrapCommand(c, nil, "--env-config", s.envcfg, "--instance-id", string(s.instanceId)) c.Assert(err, gc.IsNil) err = cmd.Run(nil) c.Assert(err, gc.IsNil) // Check that we cannot now connect to the state without a // password. info := &state.Info{ Addrs: []string{testing.MgoServer.Addr()}, CACert: testing.CACert, } testOpenState(c, info, errors.Unauthorizedf("")) // Check we can log in to mongo as admin. info.Tag, info.Password = "", testPasswordHash() st, err := state.Open(info, state.DefaultDialOpts(), environs.NewStatePolicy()) c.Assert(err, gc.IsNil) // Reset password so the tests can continue to use the same server. defer st.Close() defer st.SetAdminMongoPassword("") // Check that the admin user has been given an appropriate // password u, err := st.User("admin") c.Assert(err, gc.IsNil) c.Assert(u.PasswordValid(testPassword), gc.Equals, true) // Check that the machine configuration has been given a new // password and that we can connect to mongo as that machine // and that the in-mongo password also verifies correctly. machineConf1, err := agent.ReadConfig(agent.ConfigPath(machineConf.DataDir(), "machine-0")) c.Assert(err, gc.IsNil) stateinfo, ok := machineConf1.StateInfo() c.Assert(ok, jc.IsTrue) st, err = state.Open(stateinfo, state.DialOpts{}, environs.NewStatePolicy()) c.Assert(err, gc.IsNil) defer st.Close() m, err := st.Machine("0") c.Assert(err, gc.IsNil) c.Assert(m.HasVote(), jc.IsTrue) }
func (u *User) Deactivate() error { if u.doc.Name == AdminUser { return errors.Unauthorizedf("Can't deactivate admin user") } ops := []txn.Op{{ C: u.st.users.Name, Id: u.Name(), Update: bson.D{{"$set", bson.D{{"deactivated", true}}}}, Assert: txn.DocExists, }} if err := u.st.runTransaction(ops); err != nil { if err == txn.ErrAborted { err = fmt.Errorf("user no longer exists") } return fmt.Errorf("cannot deactivate user %q: %v", u.Name(), err) } u.doc.Deactivated = true return nil }
// Fetch is defined in simplestreams.DataSource. func (h *urlDataSource) Fetch(path string) (io.ReadCloser, string, error) { dataURL := urlJoin(h.baseURL, path) client := utils.GetHTTPClient(h.hostnameVerification) // dataURL can be http:// or file:// resp, err := client.Get(dataURL) if err != nil { logger.Debugf("Got error requesting %q: %v", dataURL, err) return nil, dataURL, errors.NotFoundf("invalid URL %q", dataURL) } if resp.StatusCode == http.StatusNotFound { return nil, dataURL, errors.NotFoundf("cannot find URL %q", dataURL) } if resp.StatusCode == http.StatusUnauthorized { return nil, dataURL, errors.Unauthorizedf("unauthorised access to URL %q", dataURL) } if resp.StatusCode != http.StatusOK { return nil, dataURL, fmt.Errorf("cannot access URL %q, %q", dataURL, resp.Status) } return resp.Body, dataURL, nil }
func (s *checkEnvironmentSuite) TestCheckEnvironmentGetFails(c *gc.C) { defer testing.MakeFakeHome(c, checkEnv, "existing").Restore() ctx := testing.Context(c) environ, err := environs.PrepareFromName("test", ctx, configstore.NewMem()) c.Assert(err, gc.IsNil) // VerifyStorage is sufficient for our tests and much simpler // than Bootstrap which calls it. stor := environ.Storage() err = environs.VerifyStorage(stor) c.Assert(err, gc.IsNil) // When fetching the verification file from storage fails, // we get an InvalidEnvironmentError. someError := errors.Unauthorizedf("you shall not pass") dummy.Poison(stor, environs.VerificationFilename, someError) err = environs.CheckEnvironment(environ) c.Assert(err, gc.Equals, someError) }
type errorsSuite struct { testbase.LoggingSuite } var _ = gc.Suite(&errorsSuite{}) var errorTransformTests = []struct { err error code string helperFunc func(error) bool }{{ err: errors.NotFoundf("hello"), code: params.CodeNotFound, helperFunc: params.IsCodeNotFound, }, { err: errors.Unauthorizedf("hello"), code: params.CodeUnauthorized, helperFunc: params.IsCodeUnauthorized, }, { err: state.ErrCannotEnterScopeYet, code: params.CodeCannotEnterScopeYet, helperFunc: params.IsCodeCannotEnterScopeYet, }, { err: state.ErrCannotEnterScope, code: params.CodeCannotEnterScope, helperFunc: params.IsCodeCannotEnterScope, }, { err: state.ErrExcessiveContention, code: params.CodeExcessiveContention, helperFunc: params.IsCodeExcessiveContention, }, {