func init() { sm = new(DefaultSecurityManager) r, _ := realm.NewIni("ini", strings.NewReader(ini)) sm.SetRealm(r) sm.SetSessionManager(session.NewMemory(30 * time.Second)) sm.Debug = true }
func TestRunAs(t *testing.T) { msm := new(DefaultSecurityManager) r, _ := realm.NewIni("ini", strings.NewReader(ini)) msm.SetRealm(r) tmpFile, _ := ioutil.TempDir("", "runas") msm.SetSessionManager(gorilla.NewGorillaManager(sessions.NewFilesystemStore(tmpFile, []byte("something-very-secret")))) subject, _ := msm.CreateSubject(&SubjectContext{ CreateSessions: true, Request: &http.Request{}, ResponseWriter: &httptest.ResponseRecorder{}, }) subject.Login(authc.NewToken("foo", "password")) assert.True(t, subject.IsAuthenticated(), "User is not authenticated after successful login") assert.Equal(t, "foo", fmt.Sprintf("%s", subject.Principal())) assert.False(t, subject.IsPermitted("everything")) err := subject.RunAs([]interface{}{"bar"}) assert.Nil(t, err) assert.True(t, subject.IsAuthenticated(), "User is not authenticated after successful runas") assert.Equal(t, "bar", fmt.Sprintf("%s", subject.Principal())) assert.True(t, subject.IsPermitted("everything")) subject.ReleaseRunAs() assert.True(t, subject.IsAuthenticated(), "User is not authenticated after successful runas") assert.Equal(t, "foo", fmt.Sprintf("%s", subject.Principal())) assert.False(t, subject.IsPermitted("everything")) }