public void ScavengeStarted() { var metadataEventId = Guid.NewGuid(); var metaStreamId = SystemStreams.MetastreamOf(_streamName); var acl = new StreamAcl( new string[] { "$ops" }, new string[] {}, new string[] {}, new string[] {}, new string[] {} ); var metadata = new StreamMetadata(maxAge: _scavengeHistoryMaxAge, acl: acl); var metaStreamEvent = new Event(metadataEventId, SystemEventTypes.StreamMetadata, isJson: true, data: metadata.ToJsonBytes(), metadata: null); _ioDispatcher.WriteEvent(metaStreamId, ExpectedVersion.Any, metaStreamEvent, SystemAccounts.System, m => { if (m.Result != OperationResult.Success) { Log.Error( "Failed to write the $maxAge of {days} days metadata for the {stream} stream. Reason: {reason}", _scavengeHistoryMaxAge.TotalDays, _streamName, m.Result); } }); var scavengeStartedEvent = new Event(Guid.NewGuid(), SystemEventTypes.ScavengeStarted, true, new Dictionary <string, object> { { "scavengeId", _scavengeId }, { "nodeEndpoint", _nodeId }, }.ToJsonBytes(), null); WriteScavengeDetailEvent(_streamName, scavengeStartedEvent, _retryAttempts); }
private Event CreateStreamMetadataEvent() { var eventId = Guid.NewGuid(); var acl = new StreamAcl( readRole: SystemRoles.Admins, writeRole: SystemRoles.Admins, deleteRole: SystemRoles.Admins, metaReadRole: SystemRoles.All, metaWriteRole: SystemRoles.Admins); var metadata = new StreamMetadata(maxCount: 2, maxAge: null, cacheControl: null, acl: acl); var dataBytes = metadata.ToJsonBytes(); return(new Event(eventId, SystemEventTypes.StreamMetadata, isJson: true, data: dataBytes, metadata: null)); }
private Event CreateStreamMetadataEvent(long?tb) { var eventId = Guid.NewGuid(); var acl = new StreamAcl( readRole: SystemRoles.Admins, writeRole: SystemRoles.Admins, deleteRole: SystemRoles.Admins, metaReadRole: SystemRoles.Admins, metaWriteRole: SystemRoles.Admins); var metadata = new StreamMetadata(cacheControl: null, truncateBefore: tb, acl: acl); var dataBytes = metadata.ToJsonBytes(); return(new Event(eventId, SystemEventTypes.StreamMetadata, isJson: true, data: dataBytes, metadata: null)); }
private void SetScavengeStreamMetadata() { var metaStreamId = SystemStreams.MetastreamOf(SystemStreams.ScavengesStream); _ioDispatcher.ReadBackward(metaStreamId, -1, 1, false, SystemAccount.Principal, readResult => { if (readResult.Result == ReadStreamResult.Success || readResult.Result == ReadStreamResult.NoStream) { if (readResult.Events.Length == 1) { var currentMetadata = StreamMetadata.FromJsonBytes(readResult.Events[0].Event.Data); var hasProperACL = currentMetadata.Acl != null && currentMetadata.Acl.ReadRoles != null && currentMetadata.Acl.ReadRoles.Contains(x => x.Equals("$ops")); if (currentMetadata.MaxAge == _scavengeHistoryMaxAge && hasProperACL) { Log.Debug("Max age and $ops read permission already set for the {stream} stream.", SystemStreams.ScavengesStream); return; } } Log.Debug("Setting max age for the {stream} stream to {maxAge}.", SystemStreams.ScavengesStream, _scavengeHistoryMaxAge); Log.Debug("Setting $ops read permission for the {stream} stream", SystemStreams.ScavengesStream); var acl = new StreamAcl( new string[] { "$ops" }, new string[] {}, new string[] {}, new string[] {}, new string[] {} ); var metadata = new StreamMetadata(maxAge: _scavengeHistoryMaxAge, acl: acl); var metaStreamEvent = new Event(Guid.NewGuid(), SystemEventTypes.StreamMetadata, isJson: true, data: metadata.ToJsonBytes(), metadata: null); _ioDispatcher.WriteEvent(metaStreamId, ExpectedVersion.Any, metaStreamEvent, SystemAccount.Principal, m => { if (m.Result != OperationResult.Success) { Log.Error( "Failed to write the $maxAge of {days} days and set $ops permission for the {stream} stream. Reason: {reason}", _scavengeHistoryMaxAge.TotalDays, SystemStreams.ScavengesStream, m.Result); } }); } }); }
public static async Task SetDefaultStreamMetaData(this IEventStoreConnection conn, string stream) { try { var acl = new StreamAcl("$admins", "$admins", "$admins", "$admins", "$admins"); var metaData = StreamMetadata.Create(acl: acl); var result = await conn.SetStreamMetadataAsync(stream, ExpectedVersion.Any, metaData); return; } catch (Exception e) { Console.WriteLine(e.Message); throw; } }
private void SetOpsPermissions(IList <string> recentScavengeIds) { //sets $ops permissions on last 30 $scavenges-<scavenge id> stream //added for backward compatibility to make UI scavenge history work properly with $ops users var last30ScavengeIds = new HashSet <string>(); foreach (var scavengeId in recentScavengeIds) { if (last30ScavengeIds.Count >= 30) { break; } last30ScavengeIds.Add(scavengeId); } if (last30ScavengeIds.Count > 0) { Log.Debug("Setting $ops read permission on last {count} $scavenges-<scavenge id> streams.", last30ScavengeIds.Count); } foreach (var scavengeId in last30ScavengeIds) { var acl = new StreamAcl( new string[] { "$ops" }, new string[] {}, new string[] {}, new string[] {}, new string[] {} ); var scavengeIdStream = SystemStreams.ScavengesStream + "-" + scavengeId; var metaStreamId = SystemStreams.MetastreamOf(scavengeIdStream); var metadata = new StreamMetadata(maxAge: _scavengeHistoryMaxAge, acl: acl); var metaStreamEvent = new Event(Guid.NewGuid(), SystemEventTypes.StreamMetadata, isJson: true, data: metadata.ToJsonBytes(), metadata: null); _ioDispatcher.WriteEvent(metaStreamId, ExpectedVersion.Any, metaStreamEvent, SystemAccount.Principal, m => { if (m.Result != OperationResult.Success) { Log.Error( "Failed to set $ops read permission for the {stream} stream. Reason: {reason}", _scavengeHistoryMaxAge.TotalDays, scavengeIdStream, m.Result); } }); } }
/// <summary> /// Constructs a new <see cref="SystemSettings"/>. /// </summary> /// <param name="userStreamAcl"></param> /// <param name="systemStreamAcl"></param> public SystemSettings(StreamAcl userStreamAcl = default, StreamAcl systemStreamAcl = default) { UserStreamAcl = userStreamAcl; SystemStreamAcl = systemStreamAcl; }
public EffectiveAcl(StreamAcl stream, StreamAcl system, StreamAcl @default) { Stream = stream; System = system; Default = @default; }