func init() { logger.Init(ioutil.Discard, ioutil.Discard, ioutil.Discard, ioutil.Discard) privateKeyFilePath := flag.String("rsa-private", "./dist/key.private", "RSA private key file path") secureKeyFilePath := flag.String("secure-key", "./dist/secureKey", "password to encrypt the secure storage") usersDataPath := flag.String("data-file", "./dist/data.txt", "Login information file") flag.Parse() ServicePath = cr.ServicePathPrefix + cr.Version + AmPrefix resourcePath = listener + ServicePath + UsersPath usersList := en.New() signKey, verifyKey := app.TokenSetUp(*privateKeyFilePath) loginKey := ss.GetSecureKey(*secureKeyFilePath) en.LoadInfo(*usersDataPath, loginKey, usersList) stRestful = libsecurity_restful.NewLibsecurityRestful() stRestful.SetData(usersList, loginKey, verifyKey, signKey, nil) rootCookieStr, _ := app.GenerateToken(stc.RootUserName, am.SuperUserPermission, clientIP, signKey) cr.SetCookie(rootCookieStr) for _, name := range usersName { stRestful.UsersList.AddUser(name) } go runServer() time.Sleep(100 * time.Millisecond) }
func (s LibsecurityRestful) restLoadData(request *restful.Request, response *restful.Response) { // old use var fileData cr.StringMessage var fileData cr.SecureFile err := request.ReadEntity(&fileData) if err != nil { s.setError(response, http.StatusNotFound, err) return } err = en.LoadInfo(fileData.FilePath, []byte(fileData.Secret), s.UsersList) if err != nil { s.setError(response, http.StatusInternalServerError, err) return } response.WriteHeader(http.StatusOK) }
func Test_StoreLoad(t *testing.T) { filePath := "./try.txt" secret := []byte("ABCDEFGH12345678") el := en.NewEntityManager() for i := 0; i < 3; i++ { el.AddUser(fmt.Sprintf("User %d", i+1)) resourceName := fmt.Sprintf("Disk %d", i+1) el.AddResource(resourceName) a := NewACL() el.AddPropertyToEntity(resourceName, stc.AclPropertyName, a) } if generateAcl(el) == false { t.Error("Test fail, can't generate ACL") t.FailNow() } el.StoreInfo(filePath, secret) entityManager1 := en.NewEntityManager() err := en.LoadInfo(filePath, secret, entityManager1) if err != nil { fmt.Println(err) } for n, _ := range el.Resources { tmpE, _ := el.GetPropertyAttachedToEntity(n, stc.AclPropertyName) a := tmpE.(*Acl) tmpE1, _ := entityManager1.GetPropertyAttachedToEntity(n, stc.AclPropertyName) a1 := tmpE1.(*Acl) if a.IsEqual(*a1) == false { t.Errorf("Test fail, Stored ACL property != loaded one") fmt.Println("The stored ACL for resource:", n, a) fmt.Println("The loaded ACL for resource:", n, a1) } } }
func registerComponents(configFile string, secureKeyFilePath string, privateKeyFilePath string, usersDataPath string) { conf, err := readConfigFile(configFile) if err != nil { fmt.Fprintf(os.Stderr, "Fatal error while reading configuration file '%v', error: %v\n", configFile, err) os.Exit(1) } wsContainer := restful.NewContainer() usersList := en.NewEntityManager() // amUsers := am.NewAmUsersList() signKey, verifyKey = app.TokenSetUp(privateKeyFilePath) loginKey = ss.GetSecureKey(secureKeyFilePath) st := libsecurity_restful.NewLibsecurityRestful() st.SetData(usersList, loginKey, verifyKey, signKey, nil) l := accounts_restful.NewAmRestful() l.SetData(st) if conf[amToken] == fullToken { l.RegisterFull(wsContainer) } else { // login is mandatory l.RegisterBasic(wsContainer) } um := en_restful.NewEnRestful() um.SetData(st) if conf[umToken] != noneToken { um.RegisterBasic(wsContainer) } /* a := acl_restful.NewAclRestful() a.SetData(st) if conf[aclToken] == basicToken || conf[appAclToken] == basicToken { a.RegisterBasic(wsContainer) } */ /* appAclPermissions := appAcl.NewAppPermissions() st.STool.SetAppAclData(appAclPermissions) aa := appAcl_restful.NewAppAclRestful() aa.SetData(appAclPermissions, st) if conf[appAclToken] == basicToken { aa.RegisterBasic(wsContainer) } */ p := otp_restful.NewOtpRestful() p.SetData(st) if conf[otpToken] == basicToken { p.RegisterBasic(wsContainer) } o := ocra_restful.NewOcraRestful() o.SetData(st) if conf[ocraToken] == basicToken { o.RegisterBasic(wsContainer) } pwd := password_restful.NewPwdRestful() pwd.SetData(st) if conf[passwordToken] == basicToken { pwd.RegisterBasic(wsContainer) } ss := storage_restful.NewSsRestful() ss.SetData(st) if conf[secureStorageToken] == basicToken { ss.RegisterBasic(wsContainer) } st.RegisterBasic(wsContainer) err = en.LoadInfo(usersDataPath, loginKey, usersList) if err != nil { fmt.Println("Load info error:", err) } runRestApi(wsContainer) }