Ejemplo n.º 1
0
 public IEnumerable <RequestLogEntry> GetRecentLogEntriesForLink(Guid linkId,
                                                                 int amount)
 {
     using (var context = new RelayContext())
     {
         return
             (context.RequestLogEntries.Where(r => r.LinkId == linkId)
              .OrderByDescending(e => e.OnPremiseConnectorOutDate)
              .Take(amount)
              .ToList()
              .Select(d => new RequestLogEntry
         {
             OnPremiseConnectorInDate = d.OnPremiseConnectorInDate,
             OnPremiseConnectorOutDate = d.OnPremiseConnectorOutDate,
             ContentBytesIn = d.ContentBytesIn,
             ContentBytesOut = d.ContentBytesOut,
             HttpStatusCode = d.HttpStatusCode,
             OnPremiseTargetInDate = d.OnPremiseTargetInDate,
             OnPremiseTargetOutDate = d.OnPremiseTargetOutDate,
             OnPremiseTargetKey = d.OnPremiseTargetKey,
             LocalUrl = d.LocalUrl,
             OriginId = d.OriginId,
             LinkId = d.LinkId,
         }));
     }
 }
Ejemplo n.º 2
0
 public bool IsUserNameAvailable(string userName)
 {
     using (var context = new RelayContext())
     {
         return(!context.Links.Any(p => p.UserName == userName));
     }
 }
Ejemplo n.º 3
0
        public PageResult <Link> GetLinks(PageRequest paging)
        {
            using (var context = new RelayContext())
            {
                var query = context.Links.AsQueryable();

                if (!string.IsNullOrWhiteSpace(paging.SearchText))
                {
                    var searchText = paging.SearchText.ToLower();
                    query = query.Where(w => w.UserName.ToLower().Contains(searchText) || w.SymbolicName.ToLower().Contains(searchText));
                }

                // Default sorting must be provided
                if (string.IsNullOrWhiteSpace(paging.SortField))
                {
                    paging.SortField     = "SymbolicName";
                    paging.SortDirection = SortDirection.Asc;
                }

                var count = query.Count();

                query = query.OrderByPropertyName(paging.SortField, paging.SortDirection);
                query = query.ApplyPaging(paging);

                var queryResult = query.ToList().Select(GetLinkFromDbLink).ToList();

                var result = new PageResult <Link>
                {
                    Items = queryResult,
                    Count = count
                };

                return(result);
            }
        }
Ejemplo n.º 4
0
        public Guid Create(string userName, string password)
        {
            if ((String.IsNullOrWhiteSpace(userName)) || (String.IsNullOrWhiteSpace(password)))
            {
                return(Guid.Empty);
            }

            var passwordInformation = _passwordHash.CreatePasswordInformation(Encoding.UTF8.GetBytes(password));

            var dbUser = new DbUser
            {
                Id           = Guid.NewGuid(),
                Iterations   = passwordInformation.Iterations,
                Password     = passwordInformation.Hash,
                Salt         = passwordInformation.Salt,
                UserName     = userName,
                CreationDate = DateTime.Now,
            };

            using (var context = new RelayContext())
            {
                context.Users.Add(dbUser);
                context.SaveChanges();

                return(dbUser.Id);
            }
        }
Ejemplo n.º 5
0
 public bool Any()
 {
     using (var context = new RelayContext())
     {
         return(context.Users.Any());
     }
 }
Ejemplo n.º 6
0
        public CreateLinkResult CreateLink(string symbolicName, string userName)
        {
            using (var context = new RelayContext())
            {
                var password            = _passwordHash.GeneratePassword(_configuration.LinkPasswordLength);
                var passwordInformation = _passwordHash.CreatePasswordInformation(password);

                var link = new DbLink
                {
                    Id           = Guid.NewGuid(),
                    Password     = passwordInformation.Hash,
                    Salt         = passwordInformation.Salt,
                    Iterations   = passwordInformation.Iterations,
                    SymbolicName = symbolicName,
                    UserName     = userName,
                    CreationDate = DateTime.UtcNow
                };

                context.Links.Add(link);
                context.SaveChanges();

                var result = new CreateLinkResult
                {
                    Id       = link.Id,
                    Password = Convert.ToBase64String(password)
                };

                return(result);
            }
        }
Ejemplo n.º 7
0
        public void LogRequest(RequestLogEntry requestLogEntry)
        {
            using (var context = new RelayContext())
            {
                var link = new DbLink
                {
                    Id = requestLogEntry.LinkId
                };

                context.Links.Attach(link);

                context.RequestLogEntries.Add(new DbRequestLogEntry
                {
                    Id                        = Guid.NewGuid(),
                    ContentBytesIn            = requestLogEntry.ContentBytesIn,
                    ContentBytesOut           = requestLogEntry.ContentBytesOut,
                    OnPremiseConnectorInDate  = requestLogEntry.OnPremiseConnectorInDate,
                    OnPremiseConnectorOutDate = requestLogEntry.OnPremiseConnectorOutDate,
                    HttpStatusCode            = requestLogEntry.HttpStatusCode,
                    OnPremiseTargetInDate     = requestLogEntry.OnPremiseTargetInDate,
                    OnPremiseTargetKey        = requestLogEntry.OnPremiseTargetKey,
                    OnPremiseTargetOutDate    = requestLogEntry.OnPremiseTargetOutDate,
                    LocalUrl                  = requestLogEntry.LocalUrl ?? "/",
                    OriginId                  = requestLogEntry.OriginId,
                    Link                      = link,
                    LinkId                    = requestLogEntry.LinkId,
                });

                context.SaveChanges();
            }
        }
Ejemplo n.º 8
0
 public IEnumerable <Link> GetLinks()
 {
     using (var context = new RelayContext())
     {
         return(context.Links.ToList().Select(GetLinkFromDbLink).ToList());
     }
 }
Ejemplo n.º 9
0
        public bool Update(Guid id, string password)
        {
            if ((id == Guid.Empty) ||
                (String.IsNullOrWhiteSpace(password)))
            {
                return(false);
            }

            using (var context = new RelayContext())
            {
                var dbUser = context.Users.SingleOrDefault(u => u.Id == id);

                if (dbUser == null)
                {
                    return(false);
                }

                var passwordInformation = _passwordHash.CreatePasswordInformation(Encoding.UTF8.GetBytes(password));

                dbUser.Iterations = passwordInformation.Iterations;
                dbUser.Salt       = passwordInformation.Salt;
                dbUser.Password   = passwordInformation.Hash;

                context.Entry(dbUser).State = EntityState.Modified;

                return(context.SaveChanges() == 1);
            }
        }
Ejemplo n.º 10
0
        public async Task RenewActiveConnectionAsync(string connectionId)
        {
            _logger?.Verbose("Renewing last activity. connection-id={ConnectionId}", connectionId);

            try
            {
                using (var context = new RelayContext())
                {
                    var activeConnection = await context.ActiveConnections.FirstOrDefaultAsync(ac => ac.ConnectionId == connectionId).ConfigureAwait(false);

                    if (activeConnection != null)
                    {
                        activeConnection.LastActivity = DateTime.UtcNow;

                        context.Entry(activeConnection).State = EntityState.Modified;

                        await context.SaveChangesAsync().ConfigureAwait(false);
                    }
                }
            }
            catch (Exception ex)
            {
                _logger?.Error(ex, "Error during renewing an active connection. connection-id={ConnectionId}", connectionId);
            }
        }
Ejemplo n.º 11
0
        public PageResult <LinkDetails> GetLinkDetails(PageRequest paging)
        {
            using (var context = new RelayContext())
            {
                var linksQuery = context.Links.AsQueryable();

                if (!String.IsNullOrWhiteSpace(paging.SearchText))
                {
                    var searchText = paging.SearchText.ToLower();
                    linksQuery = linksQuery.Where(w => w.UserName.Contains(searchText) || w.SymbolicName.Contains(searchText));
                }

                // Default sorting must be provided
                if (String.IsNullOrWhiteSpace(paging.SortField))
                {
                    paging.SortField     = "SymbolicName";
                    paging.SortDirection = SortDirection.Asc;
                }

                var numberOfLinks = linksQuery.Count();

                linksQuery = linksQuery.OrderByPropertyName(paging.SortField, paging.SortDirection);
                linksQuery = linksQuery.ApplyPaging(paging);

                return(new PageResult <LinkDetails>()
                {
                    Items = GetLinkDetailsFromDbLink(linksQuery).ToList(),
                    Count = numberOfLinks,
                });
            }
        }
Ejemplo n.º 12
0
 public IEnumerable <LinkDetails> GetLinkDetails()
 {
     using (var context = new RelayContext())
     {
         return(GetLinkDetailsFromDbLink(context.Links).ToList());
     }
 }
Ejemplo n.º 13
0
        public void DeleteLink(Guid linkId)
        {
            _logger?.Verbose("Removing link. link-id={LinkId}", linkId);

            try
            {
                using (var context = new RelayContext())
                {
                    var itemToDelete = new DbLink
                    {
                        Id = linkId,
                    };

                    context.Links.Attach(itemToDelete);
                    context.Links.Remove(itemToDelete);

                    context.SaveChanges();
                }
            }
            catch (DbUpdateConcurrencyException) { }
            catch (Exception ex)
            {
                _logger?.Error(ex, "Error while removing a link. link-id={LinkId}", linkId);
            }
        }
Ejemplo n.º 14
0
        public bool UpdateLink(LinkDetails link)
        {
            using (var context = new RelayContext())
            {
                var linkEntity = context.Links.SingleOrDefault(p => p.Id == link.Id);

                if (linkEntity == null)
                {
                    return(false);
                }

                linkEntity.CreationDate = link.CreationDate;
                linkEntity.AllowLocalClientRequestsOnly        = link.AllowLocalClientRequestsOnly;
                linkEntity.ForwardOnPremiseTargetErrorResponse = link.ForwardOnPremiseTargetErrorResponse;
                linkEntity.IsDisabled   = link.IsDisabled;
                linkEntity.MaximumLinks = link.MaximumLinks;
                linkEntity.SymbolicName = link.SymbolicName;
                linkEntity.UserName     = link.UserName;

                linkEntity.TokenRefreshWindow         = link.TokenRefreshWindow;
                linkEntity.HeartbeatInterval          = link.HeartbeatInterval;
                linkEntity.ReconnectMinWaitTime       = link.ReconnectMinWaitTime;
                linkEntity.ReconnectMaxWaitTime       = link.ReconnectMaxWaitTime;
                linkEntity.AbsoluteConnectionLifetime = link.AbsoluteConnectionLifetime;
                linkEntity.SlidingConnectionLifetime  = link.SlidingConnectionLifetime;

                context.Entry(linkEntity).State = EntityState.Modified;

                return(context.SaveChanges() == 1);
            }
        }
Ejemplo n.º 15
0
        public bool IsUserNameAvailable(string userName)
        {
            using (var context = new RelayContext())
            {
                var user = context.Users.SingleOrDefault(u => u.UserName == userName);

                return(user == null);
            }
        }
Ejemplo n.º 16
0
        private void UnlockUser(RelayContext ctx, DbUser user)
        {
            user.LastFailedLoginAttempt = null;
            user.FailedLoginAttempts    = null;

            ctx.Entry(user).State = EntityState.Modified;
            ctx.SaveChanges();

            _logger?.Information("Unlocking user account {UserName}", user.UserName);
        }
Ejemplo n.º 17
0
        public Link GetLink(string linkName)
        {
            using (var context = new RelayContext())
            {
                var linkQuery = context.Links
                                .Where(p => p.UserName == linkName);

                return(GetLinkFromDbLink(linkQuery).FirstOrDefault());
            }
        }
Ejemplo n.º 18
0
        public LinkDetails GetLinkDetails(Guid linkId)
        {
            using (var context = new RelayContext())
            {
                var linkQuery = context.Links
                                .Where(l => l.Id == linkId);

                return(GetLinkDetailsFromDbLink(linkQuery).FirstOrDefault());
            }
        }
Ejemplo n.º 19
0
        public Guid?GetCurrentTraceConfigurationId(Guid linkId)
        {
            using (var context = new RelayContext())
            {
                var traceConfiguration = context.TraceConfigurations.SingleOrDefault(t => t.StartDate <DateTime.UtcNow && t.EndDate> DateTime.UtcNow &&
                                                                                     t.LinkId == linkId);

                return(traceConfiguration?.Id);
            }
        }
Ejemplo n.º 20
0
        public IEnumerable <ContentBytesChartDataItem> GetContentBytesChartDataItemsForLink(Guid id, TimeFrame timeFrame)
        {
            using (var context = new RelayContext())
            {
                var query  = CreateBasicChartDataQuery(context, id, timeFrame);
                var result = AggregateContentBytesChartData(query, timeFrame);

                return(result);
            }
        }
Ejemplo n.º 21
0
 public IEnumerable <User> List()
 {
     using (var context = new RelayContext())
     {
         return(context.Users.Select(u => new User
         {
             Id = u.Id,
             UserName = u.UserName,
             CreationDate = u.CreationDate
         }).ToList());
     }
 }
Ejemplo n.º 22
0
        private void RecordFailedLoginAttempt(RelayContext ctx, DbUser user)
        {
            user.LastFailedLoginAttempt = DateTime.UtcNow;
            user.FailedLoginAttempts    = user.FailedLoginAttempts.GetValueOrDefault() + 1;

            ctx.Entry(user).State = EntityState.Modified;
            ctx.SaveChanges();

            _logger?.Information("User {UserName} failed logging in for {FailedLoginAttempts} attempts",
                                 user.UserName,
                                 user.FailedLoginAttempts
                                 );
        }
Ejemplo n.º 23
0
        public Link GetLink(string linkName)
        {
            using (var context = new RelayContext())
            {
                var link = context.Links.SingleOrDefault(p => p.UserName == linkName);

                if (link == null)
                {
                    return(null);
                }

                return(GetLinkFromDbLink(link));
            }
        }
Ejemplo n.º 24
0
        public Link GetLink(Guid linkId)
        {
            using (var context = new RelayContext())
            {
                var link = context.Links.SingleOrDefault(p => p.Id == linkId);

                if (link == null)
                {
                    return(null);
                }

                return(GetLinkFromDbLink(link));
            }
        }
Ejemplo n.º 25
0
        public bool Delete(Guid id)
        {
            using (var context = new RelayContext())
            {
                var dbUser = new DbUser
                {
                    Id = id,
                };

                context.Users.Attach(dbUser);
                context.Users.Remove(dbUser);

                return(context.SaveChanges() == 1);
            }
        }
Ejemplo n.º 26
0
        public void DeleteLink(Guid linkId)
        {
            using (var context = new RelayContext())
            {
                var itemToDelete = new DbLink
                {
                    Id = linkId
                };

                context.Links.Attach(itemToDelete);
                context.Links.Remove(itemToDelete);

                context.SaveChanges();
            }
        }
Ejemplo n.º 27
0
 public TraceConfiguration GetTraceConfiguration(Guid traceConfigurationId)
 {
     using (var context = new RelayContext())
     {
         return(context.TraceConfigurations
                .Where(t => t.Id == traceConfigurationId)
                .Select(t => new TraceConfiguration
         {
             CreationDate = t.CreationDate,
             EndDate = t.EndDate,
             Id = t.Id,
             LinkId = t.LinkId,
             StartDate = t.StartDate
         }).SingleOrDefault());
     }
 }
Ejemplo n.º 28
0
        public async Task <bool> HasActiveConnectionAsync(Guid linkId)
        {
            _logger?.Verbose("Checking for active connections. link-id={LinkId}", linkId);

            try
            {
                using (var context = new RelayContext())
                {
                    return(await context.ActiveConnections.AnyAsync(ac => ac.LinkId == linkId));
                }
            }
            catch (Exception ex)
            {
                _logger?.Error(ex, "Error during checking for active connections. link-id={LinkId}", linkId);
                return(false);
            }
        }
Ejemplo n.º 29
0
 public IEnumerable <TraceConfiguration> GetTraceConfigurations(Guid linkId)
 {
     using (var context = new RelayContext())
     {
         return(context.TraceConfigurations.Where(t => t.LinkId == linkId)
                .OrderByDescending(t => t.CreationDate)
                .Select(d => new TraceConfiguration
         {
             CreationDate = d.CreationDate,
             EndDate = d.EndDate,
             Id = d.Id,
             LinkId = d.LinkId,
             StartDate = d.StartDate
         })
                .ToList());
     }
 }
Ejemplo n.º 30
0
        private IQueryable <DbRequestLogEntry> CreateBasicChartDataQuery(RelayContext context, Guid id,
                                                                         TimeFrame timeFrame)
        {
            var startDate = new DateTime(timeFrame.Start.Year, timeFrame.Start.Month, timeFrame.Start.Day);
            var endDate   = new DateTime(timeFrame.End.Year, timeFrame.End.Month, timeFrame.End.Day, 23, 59, 59, 999);

            var query = context.RequestLogEntries
                        .Where(log => log.OnPremiseConnectorInDate >= startDate)
                        .Where(log => log.OnPremiseConnectorOutDate <= endDate);

            if (id != Guid.Empty)
            {
                query = query.Where(log => log.LinkId == id);
            }

            query = query.OrderBy(log => log.OnPremiseConnectorInDate);
            return(query);
        }