visitor improvements
This commit is contained in:
@ -204,12 +204,15 @@ namespace Oqtane.Controllers
|
||||
}
|
||||
break;
|
||||
case EntityNames.Visitor:
|
||||
authorized = false;
|
||||
var visitorCookie = "APP_VISITOR_" + _alias.SiteId.ToString();
|
||||
if (int.TryParse(Request.Cookies[visitorCookie], out int visitorId))
|
||||
{
|
||||
authorized = (visitorId == entityId);
|
||||
}
|
||||
else
|
||||
{
|
||||
authorized = User.IsInRole(RoleNames.Admin);
|
||||
}
|
||||
break;
|
||||
}
|
||||
return authorized;
|
||||
|
@ -42,5 +42,33 @@ namespace Oqtane.Controllers
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// GET api/<controller>/5
|
||||
[HttpGet("{id}")]
|
||||
public Visitor Get(int id)
|
||||
{
|
||||
bool authorized;
|
||||
var visitorCookie = "APP_VISITOR_" + _alias.SiteId.ToString();
|
||||
if (int.TryParse(Request.Cookies[visitorCookie], out int visitorId))
|
||||
{
|
||||
authorized = (visitorId == id);
|
||||
}
|
||||
else
|
||||
{
|
||||
authorized = User.IsInRole(RoleNames.Admin);
|
||||
}
|
||||
|
||||
var visitor = _visitors.GetVisitor(id);
|
||||
if (authorized && visitor != null && visitor.SiteId == _alias.SiteId)
|
||||
{
|
||||
return visitor;
|
||||
}
|
||||
else
|
||||
{
|
||||
_logger.Log(LogLevel.Error, this, LogFunction.Security, "Unauthorized Visitor Get Attempt {VisitorId}", id);
|
||||
HttpContext.Response.StatusCode = (int)HttpStatusCode.Forbidden;
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,33 @@
|
||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
using Oqtane.Databases.Interfaces;
|
||||
using Oqtane.Migrations.EntityBuilders;
|
||||
using Oqtane.Repository;
|
||||
|
||||
namespace Oqtane.Migrations.Tenant
|
||||
{
|
||||
[DbContext(typeof(TenantDBContext))]
|
||||
[Migration("Tenant.03.00.01.05")]
|
||||
public class AddVisitorReferrer : MultiDatabaseMigration
|
||||
{
|
||||
public AddVisitorReferrer(IDatabase database) : base(database)
|
||||
{
|
||||
}
|
||||
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
var visitorEntityBuilder = new VisitorEntityBuilder(migrationBuilder, ActiveDatabase);
|
||||
|
||||
visitorEntityBuilder.AddStringColumn("Referrer", 500, true);
|
||||
visitorEntityBuilder.AddStringColumn("Url", 500, true);
|
||||
}
|
||||
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
var visitorEntityBuilder = new VisitorEntityBuilder(migrationBuilder, ActiveDatabase);
|
||||
|
||||
visitorEntityBuilder.DropColumn("Referrer");
|
||||
visitorEntityBuilder.DropColumn("Url");
|
||||
}
|
||||
}
|
||||
}
|
@ -189,19 +189,33 @@ namespace Oqtane.Pages
|
||||
|
||||
private void TrackVisitor(int SiteId)
|
||||
{
|
||||
// get request attributes
|
||||
string ip = HttpContext.Connection.RemoteIpAddress.ToString();
|
||||
string useragent = Request.Headers[HeaderNames.UserAgent];
|
||||
string language = Request.Headers[HeaderNames.AcceptLanguage];
|
||||
if (language.Contains(","))
|
||||
{
|
||||
language = language.Substring(0, language.IndexOf(","));
|
||||
}
|
||||
string url = Request.GetEncodedUrl();
|
||||
string referrer = Request.Headers[HeaderNames.Referer];
|
||||
int? userid = null;
|
||||
if (User.HasClaim(item => item.Type == ClaimTypes.PrimarySid))
|
||||
{
|
||||
userid = int.Parse(User.Claims.First(item => item.Type == ClaimTypes.PrimarySid).Value);
|
||||
}
|
||||
|
||||
var VisitorCookie = "APP_VISITOR_" + SiteId.ToString();
|
||||
if (!int.TryParse(Request.Cookies[VisitorCookie], out VisitorId))
|
||||
{
|
||||
var visitor = new Visitor();
|
||||
visitor.SiteId = SiteId;
|
||||
visitor.IPAddress = HttpContext.Connection.RemoteIpAddress.ToString();
|
||||
visitor.UserAgent = Request.Headers[HeaderNames.UserAgent];
|
||||
visitor.Language = Request.Headers[HeaderNames.AcceptLanguage];
|
||||
if (visitor.Language.Contains(","))
|
||||
{
|
||||
visitor.Language = visitor.Language.Substring(0, visitor.Language.IndexOf(","));
|
||||
}
|
||||
visitor.UserId = null;
|
||||
visitor.IPAddress = ip;
|
||||
visitor.UserAgent = useragent;
|
||||
visitor.Language = language;
|
||||
visitor.Url = url;
|
||||
visitor.Referrer = referrer;
|
||||
visitor.UserId = userid;
|
||||
visitor.Visits = 1;
|
||||
visitor.CreatedOn = DateTime.UtcNow;
|
||||
visitor.VisitedOn = DateTime.UtcNow;
|
||||
@ -222,16 +236,17 @@ namespace Oqtane.Pages
|
||||
var visitor = _visitors.GetVisitor(VisitorId);
|
||||
if (visitor != null)
|
||||
{
|
||||
visitor.IPAddress = HttpContext.Connection.RemoteIpAddress.ToString();
|
||||
visitor.UserAgent = Request.Headers[HeaderNames.UserAgent];
|
||||
visitor.Language = Request.Headers[HeaderNames.AcceptLanguage];
|
||||
if (visitor.Language.Contains(","))
|
||||
visitor.IPAddress = ip;
|
||||
visitor.UserAgent = useragent;
|
||||
visitor.Language = language;
|
||||
visitor.Url = url;
|
||||
if (!string.IsNullOrEmpty(referrer))
|
||||
{
|
||||
visitor.Language = visitor.Language.Substring(0, visitor.Language.IndexOf(","));
|
||||
visitor.Referrer = referrer;
|
||||
}
|
||||
if (User.HasClaim(item => item.Type == ClaimTypes.PrimarySid))
|
||||
if (userid != null)
|
||||
{
|
||||
visitor.UserId = int.Parse(User.Claims.First(item => item.Type == ClaimTypes.PrimarySid).Value);
|
||||
visitor.UserId = userid;
|
||||
}
|
||||
visitor.Visits += 1;
|
||||
visitor.VisitedOn = DateTime.UtcNow;
|
||||
|
Reference in New Issue
Block a user