Change Persist Thread to a 30 Second delayed, run once on changes.
This commit is contained in:
		
							
								
								
									
										7
									
								
								c_micasad/cache/SecretStore.cs
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								c_micasad/cache/SecretStore.cs
									
									
									
									
										vendored
									
									
								
							| @@ -501,6 +501,13 @@ namespace sscs.cache | ||||
|                 return false; | ||||
|         } | ||||
|  | ||||
|  | ||||
| 		internal void UpdatePersistentStore() | ||||
| 		{ | ||||
| 			if (lss != null) | ||||
| 				lss.PersistStoreWithDelay(); | ||||
| 		} | ||||
|  | ||||
|         /* This function would need to do any storage/cleanup required | ||||
|          * before removing a user session. | ||||
|          */ | ||||
|   | ||||
| @@ -48,8 +48,6 @@ namespace sscs.lss | ||||
| 			m_baGeneratedKey = baMasterPasscode;             | ||||
|             LoadPersistentStore(); | ||||
|             userStore.DumpSecretstore(); | ||||
|             persistThread = new Thread(new ThreadStart(PersistStoreThreadFn)); | ||||
|             persistThread.Start(); | ||||
|         } | ||||
|         ~LocalStorage() | ||||
|         { | ||||
| @@ -68,22 +66,29 @@ namespace sscs.lss | ||||
| 			m_baGeneratedKey = baMasterPasscode; | ||||
|             LoadPersistentStore(); | ||||
|             userStore.DumpSecretstore(); | ||||
|             persistThread = new Thread(new ThreadStart(PersistStoreThreadFn)); | ||||
|             persistThread.Start(); | ||||
|         } | ||||
|  | ||||
|         public void StorePersistentData(string sDataID, byte[] baData) | ||||
|         private void StorePersistentData(string sDataID, byte[] baData) | ||||
|         { | ||||
|  | ||||
|         } | ||||
|  | ||||
|         public byte[] RetrievePersistentData(string sDataID) | ||||
|         private byte[] RetrievePersistentData(string sDataID) | ||||
|         { | ||||
|  | ||||
|  | ||||
|             return null; | ||||
|         } | ||||
|  | ||||
| 		public void PersistStoreWithDelay() | ||||
| 		{ | ||||
| 			if (persistThread == null) | ||||
| 			{ | ||||
| 				persistThread = new Thread(new ThreadStart(PersistStoreDelayThreadFn)); | ||||
| 				persistThread.Start(); | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		public bool StopPersistence() | ||||
| 		{ | ||||
| 			if(persistThread != null)  | ||||
| @@ -246,6 +251,13 @@ namespace sscs.lss | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
| 		private void PersistStoreDelayThreadFn() | ||||
| 		{														 | ||||
| 			Thread.Sleep(30000);	 | ||||
| 			PersistStore();			 | ||||
| 			persistThread = null; | ||||
| 		} | ||||
|  | ||||
|         private void PersistStoreThreadFn() | ||||
|         { | ||||
|             while(true) | ||||
| @@ -264,12 +276,6 @@ namespace sscs.lss | ||||
| //            userStore.DumpSecretstore(); | ||||
|             try | ||||
|             { | ||||
|                 string fileName = userStore.GetPersistenceFilePath(); | ||||
|  | ||||
|                 if(File.Exists(fileName)) | ||||
|                 { | ||||
|                     File.Delete(fileName); | ||||
|                 } | ||||
|  | ||||
|                 MemoryStream ms1 = new MemoryStream(); | ||||
|                 XmlTextWriter writer = new XmlTextWriter(ms1,null); | ||||
| @@ -384,8 +390,24 @@ namespace sscs.lss | ||||
|                 writer.Flush(); | ||||
|                 writer.Close();										 | ||||
|  | ||||
|                 byte[] key = CASACrypto.GetKeySetFromFile(CASACrypto.GetMasterPasscode(userStore.GetDesktopPasswd(),userStore.GetPasscodeByDesktopFilePath()),userStore.GetKeyFilePath()); | ||||
|                 //byte[] key = CASACrypto.GetKeySetFromFile(CASACrypto.GetMasterPasscode(userStore.GetDesktopPasswd(),userStore.GetPasscodeByDesktopFilePath()),userStore.GetKeyFilePath()); | ||||
| 				byte[] key = CASACrypto.GetKeySetFromFile(m_baGeneratedKey, userStore.GetKeyFilePath()); | ||||
|  | ||||
| 				string fileName = userStore.GetPersistenceFilePath(); | ||||
|  | ||||
| 				// rename existing file | ||||
| 				if(File.Exists(fileName)) | ||||
| 				{ | ||||
| 					File.Move(fileName, fileName+".tmp"); | ||||
| 				} | ||||
|  | ||||
|                 CASACrypto.EncryptDataAndWriteToFile(ms1.ToArray(),key,fileName); | ||||
| 				 | ||||
| 				//remove temp | ||||
| 				if(File.Exists(fileName+".tmp")) | ||||
| 				{					 | ||||
| 					File.Delete(fileName+".tmp"); | ||||
| 				} | ||||
|             } | ||||
|             catch(Exception e) | ||||
|             { | ||||
|   | ||||
| @@ -300,7 +300,7 @@ | ||||
|                 /> | ||||
|                 <File | ||||
|                     RelPath = "init\ProjectInstaller.cs" | ||||
|                     SubType = "Code" | ||||
|                     SubType = "Component" | ||||
|                     BuildAction = "Compile" | ||||
|                 /> | ||||
|                 <File | ||||
| @@ -310,7 +310,7 @@ | ||||
|                 /> | ||||
|                 <File | ||||
|                     RelPath = "init\WinSecretStoreClientService.cs" | ||||
|                     SubType = "Code" | ||||
|                     SubType = "Component" | ||||
|                     BuildAction = "Compile" | ||||
|                 /> | ||||
|                 <File | ||||
|   | ||||
| @@ -208,7 +208,9 @@ namespace sscs.verbs | ||||
| 			{ | ||||
| 				KeyChain kc = ssStore.GetKeyChain(sKeyChainID); | ||||
| 				kc.RemoveAllSecrets(); | ||||
| 				ssStore.UpdatePersistentStore(); | ||||
| 			} | ||||
| 			 | ||||
| 			return wo; | ||||
| 		} | ||||
|  | ||||
| @@ -244,6 +246,7 @@ namespace sscs.verbs | ||||
| 					secret = keyChain.GetSecret(secretID);					 | ||||
| 				    secret.RemoveKeyValue(keyID);			 | ||||
| 				    wo.SetError(constants.RetCodes.SUCCESS, null);	 | ||||
| 					ssStore.UpdatePersistentStore(); | ||||
| 				} | ||||
| 			} | ||||
| 			catch (Exception e) | ||||
| @@ -348,6 +351,7 @@ namespace sscs.verbs | ||||
|                                   | ||||
| 					ChangeLinkedKeys(keyChain, secret, keyID, sValue); | ||||
| 					wo.SetError(constants.RetCodes.SUCCESS, null);				 | ||||
| 					ssStore.UpdatePersistentStore(); | ||||
| 				} | ||||
| 				else | ||||
| 					wo.SetError(constants.RetCodes.FAILURE, null); | ||||
| @@ -392,6 +396,7 @@ namespace sscs.verbs | ||||
|  | ||||
| 							// now call the traget to change it's linked ones | ||||
| 							ChangeLinkedKeys(keyChain, targetSecret, key, valStr); | ||||
| 							 | ||||
| 						}															 | ||||
| 					}	 | ||||
| 				}				 | ||||
| @@ -613,6 +618,7 @@ namespace sscs.verbs | ||||
| 			Secret targetSecret = keyChain.GetSecret(lki.GetLinkedSecretID()); | ||||
| 			KeyValue targetkv = targetSecret.GetKeyValue(lki.GetLinkedKeyID()); | ||||
| 			targetkv.RemoveLink(secretID+":"+keyID); | ||||
| 			ssStore.UpdatePersistentStore(); | ||||
|  | ||||
| 			return wo; | ||||
| 		} | ||||
| @@ -638,6 +644,7 @@ namespace sscs.verbs | ||||
| 				Secret target = keyChain.GetSecret(lki.GetLinkedSecretID()); | ||||
| 				KeyValue targetkv = target.GetKeyValue(lki.GetLinkedKeyID()); | ||||
| 				targetkv.AddLink(new LinkedKeyInfo(secretID, keyID)); | ||||
| 				ssStore.UpdatePersistentStore(); | ||||
| 			} | ||||
| 			catch (Exception e) | ||||
| 			{ | ||||
|   | ||||
| @@ -87,6 +87,7 @@ namespace sscs.verbs | ||||
|                     { | ||||
| 						 // TODO: get the secret and remove linked keys | ||||
|                          keyChain.RemoveSecret(secretId); | ||||
| 						 ssStore.UpdatePersistentStore(); | ||||
|                     } | ||||
|                 } | ||||
|                 else | ||||
|   | ||||
| @@ -187,6 +187,7 @@ namespace sscs.verbs | ||||
|  | ||||
| 							// Now change all values for linked keys | ||||
| 							ChangeLinkedKeys(keyChain, secret, key, valStr); | ||||
| 							ssStore.UpdatePersistentStore(); | ||||
|                      | ||||
| 						} | ||||
| 						else | ||||
|   | ||||
| @@ -172,6 +172,7 @@ namespace sscs.verbs | ||||
| 									} | ||||
| 								} | ||||
| 								ssStore.StartPersistenceByDesktopPasswd(passwd); | ||||
| 								ssStore.UpdatePersistentStore(); | ||||
| 							} | ||||
| 						} | ||||
| 						else | ||||
|   | ||||
		Reference in New Issue
	
	Block a user