private ConfigurationDocument GetConfigurationDocument(ConfigurationDocumentKey documentKey, bool prior) { IQueryable<ConfigurationDocument> query = from d in Context.ConfigurationDocuments select d; query = !string.IsNullOrEmpty(documentKey.InstanceKey) ? query.Where(d => d.InstanceKey == documentKey.InstanceKey) : query.Where(d => d.InstanceKey == null); query = !string.IsNullOrEmpty(documentKey.User) ? query.Where(d => d.User == documentKey.User) : query.Where(d => d.User == null); query = query.Where(d => d.DocumentName == documentKey.DocumentName); var paddedVersionString = VersionUtils.ToPaddedVersionString(documentKey.Version, false, false); if (prior) { query = query.Where(d => d.DocumentVersionString.CompareTo(paddedVersionString) < 0); //You want the most recent prior version. query = query.OrderByDescending(d => d.DocumentVersionString); } else { query = query.Where(d => d.DocumentVersionString == paddedVersionString); } return query.FirstOrDefault(); }
public GetConfigurationDocumentResponse(ConfigurationDocumentKey documentKey, DateTime? creationTime, DateTime? modifiedTime, string content) { DocumentKey = documentKey; CreationTime = creationTime; ModifiedTime = modifiedTime; Content = content; }
private static string FormatMessage(ConfigurationDocumentKey documentKey) { return(string.Format("The document {0}, Version={1}, User={2}, Instance={3} does not exist.", documentKey.DocumentName, documentKey.Version, documentKey.User, documentKey.InstanceKey)); }
private static string FormatMessage(ConfigurationDocumentKey documentKey) { return string.Format("The document {0}, Version={1}, User={2}, Instance={3} does not exist.", documentKey.DocumentName, documentKey.Version, documentKey.User, documentKey.InstanceKey); }
private ConfigurationDocument GetConfigurationDocument(ConfigurationDocumentKey documentKey, bool prior) { var query = prior ? _queryPriorVersion : _queryCurrentVersion; return query(Context, documentKey.DocumentName, !string.IsNullOrEmpty(documentKey.InstanceKey) ? documentKey.InstanceKey : null, !string.IsNullOrEmpty(documentKey.User) ? documentKey.User : null, VersionUtils.ToPaddedVersionString(documentKey.Version, false, false)).FirstOrDefault(); }
/// <summary> /// Gets the specified configuration document. /// </summary> /// <param name="documentKey"></param> /// <returns></returns> protected GetConfigurationDocumentResponse GetConfigurationDocumentHelper(ConfigurationDocumentKey documentKey) { CheckReadAccess(documentKey); var broker = PersistenceContext.GetBroker<IConfigurationDocumentBroker>(); var criteria = BuildDocumentKeyCriteria(documentKey); var documents = broker.Find(criteria, new SearchResultPage(0, 1), new EntityFindOptions { Cache = true }); var document = CollectionUtils.FirstElement(documents); return document == null ? new GetConfigurationDocumentResponse(documentKey, null, null, null) : new GetConfigurationDocumentResponse(documentKey, document.CreationTime, document.Body.ModifiedTime, document.Body.DocumentText); }
protected static void CheckReadAccess(ConfigurationDocumentKey key) { var user = key.User; if (string.IsNullOrEmpty(user)) { // all users can read application configuration docs } else { // user can only read their own configuration docs if (user != Thread.CurrentPrincipal.Identity.Name) ThrowNotAuthorized(); } }
/// <summary> /// Constructor /// </summary> public ConfigurationDocumentNotFoundException(ConfigurationDocumentKey documentKey) : base(FormatMessage(documentKey)) { }
/// <summary> /// Constructor. /// </summary> /// <param name="key"></param> /// <param name="creationTime"></param> /// <param name="modifiedTime"></param> public ConfigurationDocumentHeader(ConfigurationDocumentKey key, DateTime creationTime, DateTime modifiedTime) { Key = key; CreationTime = creationTime; ModifiedTime = modifiedTime; }
public void PutSettingsValues(SettingsGroupDescriptor group, string user, string instanceKey, Dictionary<string, string> dirtyValues) { using (var context = new DataAccessContext()) { // next we obtain any previously stored configuration document for this settings group var documentKey = new ConfigurationDocumentKey(group.Name, group.Version, user, instanceKey); var broker = context.GetConfigurationDocumentBroker(); var values = new Dictionary<string, string>(); var parser = new SettingsParser(); var document = broker.GetConfigurationDocument(documentKey); if (document == null) { document = new ConfigurationDocument { CreationTime = Platform.Time, DocumentName = group.Name, DocumentVersionString = VersionUtils.ToPaddedVersionString(group.Version,false,false), User = user, DocumentText = string.Empty }; broker.AddConfigurationDocument(document); } else { // parse document parser.FromXml(document.DocumentText, values); } // update the values that have changed foreach (var kvp in dirtyValues) values[kvp.Key] = kvp.Value; try { if (values.Count > 0) { // generate the document, update local cache and server document.DocumentText = parser.ToXml(values); context.Commit(); } } catch (EndpointNotFoundException e) { Platform.Log(LogLevel.Debug, e, "Unable to save settings to configuration service."); } } }
private static ConfigurationDocumentHeader GetDocumentHeader(ConfigurationDocument document) { var key = new ConfigurationDocumentKey( document.DocumentName, VersionUtils.FromPaddedVersionString(document.DocumentVersionString), document.User, document.InstanceKey); return new ConfigurationDocumentHeader(key, document.CreationTime, document.Body.ModifiedTime); }
public RemoveConfigurationDocumentRequest(ConfigurationDocumentKey documentKey) :base(documentKey) { }
public void TestCacheConfigurationDocument() { var cache = new TestCacheClient(); cache.ClearCache(); var documentKey = new ConfigurationDocumentKey("Test", new Version(1, 0), null, ""); var cacheKey = ((IDefinesCacheKey) documentKey).GetCacheKey(); var service = new TestConfigurationService(); object request = new GetConfigurationDocumentRequest(documentKey); object response = new GetConfigurationDocumentResponse(documentKey, DateTime.Now, DateTime.Now, "Test"); var invocation = new TestInvocation { Target = service, Method = typeof(IApplicationConfigurationReadService).GetMethod("GetConfigurationDocument", BindingFlags.FlattenHierarchy | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public), TargetType = typeof(IApplicationConfigurationReadService), Request = request, Response = response }; var directive = new ResponseCachingDirective(true, TimeSpan.FromMinutes(1), ResponseCachingSite.Server); var advice = new ConcreteResponseCachingAdvice(directive); advice.Intercept(invocation); var cacheEntry = cache.Get(cacheKey, new CacheGetOptions("")); Assert.IsNotNull(cacheEntry); Assert.AreEqual(response, cacheEntry); request = new SetConfigurationDocumentRequest(documentKey, "Test"); response = new SetConfigurationDocumentResponse(); invocation = new TestInvocation { Target = service, Method = typeof(IConfigurationService).GetMethod("SetConfigurationDocument", BindingFlags.FlattenHierarchy | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public), TargetType = typeof(IConfigurationService), Request = request, Response = response }; advice = new ConcreteResponseCachingAdvice(null); advice.Intercept(invocation); cacheEntry = cache.Get(cacheKey, new CacheGetOptions("")); Assert.IsNull(cacheEntry); }
public void TestAddAndGetPrior() { DeleteAllDocuments(); string documentName = "test"; string instanceKey = null; string user = null; var oldestKey = new ConfigurationDocumentKey(documentName, new Version(3, 5, 21685, 22177), user, instanceKey); var oldest = new ConfigurationDocument { CreationTime = DateTime.Now, DocumentName = oldestKey.DocumentName, DocumentVersionString = VersionUtils.ToPaddedVersionString(oldestKey.Version, false, false), User = oldestKey.User, InstanceKey = oldestKey.InstanceKey, DocumentText = "oldest" }; var previousKey = new ConfigurationDocumentKey(documentName, new Version(4, 4, 21685, 22177), user, instanceKey); var previous = new ConfigurationDocument { CreationTime = DateTime.Now, DocumentName = previousKey.DocumentName, DocumentVersionString = VersionUtils.ToPaddedVersionString(previousKey.Version, false, false), User = previousKey.User, InstanceKey = previousKey.InstanceKey, DocumentText = "previous" }; var newestKey = new ConfigurationDocumentKey(documentName, new Version(5, 1, 21685, 22177), user, instanceKey); var newest = new ConfigurationDocument { CreationTime = DateTime.Now, DocumentName = newestKey.DocumentName, DocumentVersionString = VersionUtils.ToPaddedVersionString(newestKey.Version, false, false), User = newestKey.User, InstanceKey = newestKey.InstanceKey, DocumentText = "newest" }; using (var context = new DataAccessContext()) { var broker = context.GetConfigurationDocumentBroker(); broker.AddConfigurationDocument(oldest); broker.AddConfigurationDocument(previous); broker.AddConfigurationDocument(newest); context.Commit(); } using (var context = new DataAccessContext()) { var broker = context.GetConfigurationDocumentBroker(); var oldestRetrieved = broker.GetConfigurationDocument(oldestKey); Assert.AreEqual(oldestRetrieved.DocumentName, oldest.DocumentName); Assert.AreEqual(oldestRetrieved.DocumentVersionString, oldest.DocumentVersionString); var previousRetrieved = broker.GetConfigurationDocument(previousKey); Assert.AreEqual(previousRetrieved.DocumentName, previous.DocumentName); Assert.AreEqual(previousRetrieved.DocumentVersionString, previous.DocumentVersionString); var newestRetrieved = broker.GetConfigurationDocument(newestKey); Assert.AreEqual(newestRetrieved.DocumentName, newest.DocumentName); Assert.AreEqual(newestRetrieved.DocumentVersionString, newest.DocumentVersionString); var previousOfNewest = broker.GetPriorConfigurationDocument(newestKey); Assert.AreEqual(previousOfNewest.DocumentName, previous.DocumentName); Assert.AreEqual(previousOfNewest.DocumentVersionString, previous.DocumentVersionString); } }
protected static void CheckWriteAccess(ConfigurationDocumentKey key) { var user = key.User; if (string.IsNullOrEmpty(user)) { // this is an application configuration doc - need admin permission if (!Thread.CurrentPrincipal.IsInRole(AuthorityTokens.Admin.System.Configuration)) ThrowNotAuthorized(); } else { // user can only save their own configuration docs if (user != Thread.CurrentPrincipal.Identity.Name) ThrowNotAuthorized(); } }
/// <summary> /// Get the specified ConfigurationDocument or null if not found /// </summary> /// <param name="documentKey"></param> /// <returns></returns> public ConfigurationDocument GetPriorConfigurationDocument(ConfigurationDocumentKey documentKey) { return GetConfigurationDocument(documentKey, true); }
/// <summary> /// Get the specified ConfigurationDocument or null if not found /// </summary> /// <param name="documentKey"></param> /// <returns></returns> public ConfigurationDocument GetConfigurationDocument(ConfigurationDocumentKey documentKey) { return GetConfigurationDocument(documentKey, false); }
private static ConfigurationDocument NewDocument(ConfigurationDocumentKey key) { return new ConfigurationDocument(key.DocumentName, VersionUtils.ToPaddedVersionString(key.Version, false, false), StringUtilities.NullIfEmpty(key.User), StringUtilities.NullIfEmpty(key.InstanceKey)); }
public GetConfigurationDocumentRequest(ConfigurationDocumentKey documentKey) : base(documentKey) { }
/// <summary> /// Builds the criteria for retrieving a document by key. /// </summary> /// <param name="key"></param> /// <returns></returns> protected ConfigurationDocumentSearchCriteria BuildDocumentKeyCriteria(ConfigurationDocumentKey key) { var criteria = new ConfigurationDocumentSearchCriteria(); criteria.DocumentName.EqualTo(key.DocumentName); if (!string.IsNullOrEmpty(key.InstanceKey)) { criteria.InstanceKey.EqualTo(key.InstanceKey); } else { criteria.InstanceKey.IsNull(); } if (!string.IsNullOrEmpty(key.User)) { criteria.User.EqualTo(key.User); } else { criteria.User.IsNull(); } criteria.DocumentVersionString.EqualTo(VersionUtils.ToPaddedVersionString(key.Version, false, false)); return criteria; }
public ConfigurationDocumentRequestBase(ConfigurationDocumentKey documentKey) { DocumentKey = documentKey; }
/// <summary> /// Gets the settings group that immediately precedes the one provided. /// </summary> public SettingsGroupDescriptor GetPreviousSettingsGroup(SettingsGroupDescriptor group) { using (var context = new DataAccessContext()) { var documentKey = new ConfigurationDocumentKey(group.Name, group.Version, null, null); var broker = context.GetConfigurationDocumentBroker(); var document = broker.GetPriorConfigurationDocument(documentKey); if (document != null) { return new SettingsGroupDescriptor(document.DocumentName,VersionUtils.FromPaddedVersionString(document.DocumentVersionString),string.Empty,group.AssemblyQualifiedTypeName,group.HasUserScopedSettings); } return null; } }
public SetConfigurationDocumentRequest(ConfigurationDocumentKey documentKey, string content) :base(documentKey) { Content = content; }
public Dictionary<string, string> GetSettingsValues(SettingsGroupDescriptor group, string user, string instanceKey) { using (var context = new DataAccessContext()) { var documentKey = new ConfigurationDocumentKey(group.Name, group.Version, user, instanceKey); var broker = context.GetConfigurationDocumentBroker(); var document = broker.GetConfigurationDocument(documentKey); var values = new Dictionary<string, string>(); if (document != null) { var parser = new SettingsParser(); parser.FromXml(document.DocumentText, values); } return values; } }