예제 #1
0
        protected override Task OnClientDisconect(string uid)
        {
            var session = Get(uid);

            if (session == null)
            {
                return(Task.FromResult(1));
            }

            DashboardSocket.ActionDisconnected(Get(uid).Action.Key);
            Get(uid)?.OnClose();
            CloseSession(uid);
            return(Task.FromResult(1));
        }
예제 #2
0
        public IActionResult GetDashboardJavascript(string recompile = "0")
        {
            Response.ContentType = "text/javascript";

            if (this.Context.Admin == null || this.Context.Admin.GetStatus() == AdminStatusDM.NotActive)
            {
                return(this.Content("console.error('ccsocket:: auth error');"));
            }

            string js_extension = string.Empty;

            if (string.IsNullOrEmpty(DashboardJS) || recompile.Equals("1"))
            {
                string path    = this.HostingEnvironment.WebRootPath + @"/js/compiled/dashboard.js";
                string direct  = this.HostingEnvironment.WebRootPath + @"/js/compiled/direct.js";
                var    baseUrl = $"{(this.Request.Scheme.Equals("https") ? "wss" : "ws")}://{this.Request.Host.Value.ToString()}{this.Request.PathBase.Value.ToString()}";
                DashboardJS =
                    (new Microsoft.Ajax.Utilities.Minifier().MinifyJavaScript(System.IO.File.ReadAllText(path)))
                    .Replace("[HOST]", baseUrl)
                    .Replace("\"[EVENTS]\"", DashboardSocket.PrintEvents())
                    + ";"
                    + (new Microsoft.Ajax.Utilities.Minifier().MinifyJavaScript(System.IO.File.ReadAllText(direct)));
            }

            // close all previous sessions for this admin!!

            var sessions = (from d in DashboardSocketsServer.Sessions where d.Value.Admin.username.Equals(this.Context.Admin.username) select d.Value.Key).ToList();

            foreach (var session in sessions)
            {
                DashboardSocketsServer.CloseSession(session);
            }

            DashboardSessionSocket socket = new DashboardSessionSocket(this.Context);

            DashboardSocketsServer.AddSession(socket);
            js_extension = DashboardJS.Replace("[SGUID]", socket.Key);

            return(this.ReturnContent(js_extension));
        }
예제 #3
0
 protected override Task OnClientConnect(string uid)
 {
     DashboardSocket.ActionConnected(ActionLiveModel.Convert(Get(uid)));
     return(base.OnClientConnect(uid));
 }
예제 #4
0
 public IActionResult OnNewUpsell()
 {
     DashboardSocket.OnNewUpsell("providername", "actionid");
     return(this.Content("ok"));
 }
예제 #5
0
        ///
        /// Main entry point
        ///

        public async Task <IActionResult> Index([FromQuery] T model)
        {
            try
            {
                model.Prepare(this.Request);
                this.TrackingID = model.TrackingID;
                this.Action     = await this.Database.Query <ActionDM>().Where("trackingid={0}", this.TrackingID).LoadSingleAsync();

                await this.PreparePostbackObject();

                if (string.IsNullOrEmpty(this.TrackingID))
                {
                    this.Postback.Log("Could not get trackingGuid.. Flow is interupted");
                    return(this.StatusCode(400));
                }

                if (this.Action == null && this.RequireAction)
                {
                    this.Postback.Log("Could not load Action for trackingId: " + this.TrackingID);
                    return(this.StatusCode(400));
                }

                this.Action = await this.Call(model);

                if (this.Action == null) // abstraction class had some error. we assume that that class will make some log
                {
                    return(this.StatusCode(400));
                }

                bool   isStolen = false, isCharge = false;
                string providerName = (this.Action.providerid.HasValue ? ProvidersCache.Instance.Get(this.Action.providerid.Value).Name : "provider null?");
                if (model.Type == ActionModelEvent.Charge || model.Type == ActionModelEvent.Subscribe)
                {
                    isCharge = true;
                    DashboardSocket.OnNewTransaction(providerName, this.Action.actionid);
                    this.Action.times_charged++;
                    isStolen = this.SystemPostback();
                }

                if (model.Type == ActionModelEvent.Refund)
                {
                    DashboardSocket.OnNewRefund(providerName, this.Action.actionid);
                    this.Action.has_refund = true;
                }

                if (model.Type == ActionModelEvent.Chargeback)
                {
                    DashboardSocket.OnNewChargeback(providerName, this.Action.actionid);
                    this.Action.has_chargeback = true;
                }

                this.Action.UpdateLater();
                await this.Database.TransactionalManager.RunAsync();

                // Redirect to page for facebook pixel
                if (isCharge && !isStolen && this.Action != null && !string.IsNullOrEmpty(this.Action.fbid))
                {
                    return(this.Redirect("/fbid/" + this.Action.fbid));
                }

                return(StatusCode(200));
            }
            catch (Exception e)
            {
                this.Logger.StartLoggin(model != null ? model.TrackingID : "notracking")
                .Add("providername", ProvidersCache.Instance.Get(this.ProviderID).Name)
                .Add("query", HttpContext.Request.QueryString.Value)
                .Add(model != null ? model : null)
                .OnException(e);
                return(StatusCode(200));
            }
        }
        public async Task <DistributionModel> OnQuestion(string key, PrelanderTagModel model)
        {
            try
            {
                this.Action.Trace("q.start");
                GetPrelander(model.prelanderid);
                if (this.Prelander == null)
                {
                    return new DistributionModel()
                           {
                               Status = false
                           }
                }
                ;

                this.Action.Trace("q.after prelander");

                var tag = PrelandersCache.Instance.GetTag(this.Prelander.ID, model.tag);
                if (tag == null)
                {
                    return new DistributionModel()
                           {
                               Status = false
                           }
                }
                ;
                this.Action.Trace("q.after tag");

                var answer = PrelandersCache.Instance.GetAnswer(this.Prelander.ID, model.tag, model.answer);
                if (answer == null)
                {
                    return new DistributionModel()
                           {
                               Status = false
                           }
                }
                ;

                this.Action.Trace("q.after answer");

                this.RecreateTagModel(this.Action.prelander_data);
                if (this.TagManager.ContainsKey(model.tag))
                {
                    this.TagManager[model.tag] = model.index;

                    this.Action.prelander_data = this.ActionPrelanderCache;
                    this.Action.UpdateLater();
                }

                this.Action.Trace("q.after recreate and update");

                var interaction = new PrelanderTagActionInteractionDM(this.Database)
                {
                    prelanderid    = this.Prelander.ID,
                    actionid       = this.Action.GetStringID(),
                    prelandertagid = tag.GetStringID(),
                    answerid       = answer.GetStringID()
                };
                interaction.InsertLater();

                this.Action.Trace("q.after interaction");

                this.UpdateTagManager();
                this.Database.TransactionalManager.RunAsync();
                this.Action.Trace("q.after update");
                DashboardSocket.OnActionUpdate(this.Action);
                return(new DistributionModel()
                {
                    Status = true
                });
            }
            catch (Exception e)
            {
                this.Logger.StartLoggin("")
                .Add("where", "pl-onQuestion")
                .Add("model.answer", model.answer)
                .Add("model.tag", model.tag)
                .OnException(e);
                return(new DistributionModel()
                {
                    Status = false
                });
            }
        }
        public async Task <DistributionModel> OnInit(string key, PrelanderInitModel model)
        {
            try
            {
                GetPrelander(model.prelanderid);
                if (this.Prelander == null)
                {
                    this.Logger.StartLoggin(this.Action.GetStringID())
                    .Where("pl-init")
                    .Add("tagCount", model.tags != null ? model.tags.Count.ToString() : "null")
                    .Add(model.tags)
                    .OnException(new Exception("Could not get prealnder from id: " + model.prelanderid));
                    return(new DistributionModel()
                    {
                        Status = false
                    });
                }

                if (this.Prelander.Answers == null || this.Prelander.Tags == null || this.Prelander.Tags.Count == 0 || this.Prelander.Answers.Count == 0)
                {
                    foreach (var tag in model.tags)
                    {
                        var newTag = new PrelanderTagDM(this.Database)
                        {
                            prelandertagid = string.Format("{0}.{1}.{2}", this.Prelander.ID, (tag.isQuestion ? "a" : "t"), tag.name),
                            name           = tag.name,
                            value          = tag.value,
                            prelanderid    = this.Prelander.ID,
                            isQuestion     = tag.isQuestion
                        };
                        newTag.InsertLater();
                        this.Prelander.Tags.Add(newTag);

                        if (tag.answers != null)
                        {
                            for (int i = 0; i < tag.answers.Length; i++)
                            {
                                var newAnswer = new PrelanderTagAnswerDM(this.Database)
                                {
                                    answerid       = string.Format("{0}-{1}", newTag.GetStringID(), i),
                                    prelandertagid = newTag.GetStringID(),
                                    prelanderid    = this.Prelander.ID,
                                    tagName        = tag.name,
                                    name           = string.Format("ccqa" + i),
                                    value          = tag.answers[i]
                                };
                                newAnswer.InsertLater();
                                this.Prelander.Answers.Add(newAnswer);
                            }
                        }
                    }
                }

                this.Action.Trace("init.before tag manager");

                foreach (var tag in model.tags)
                {
                    this.TagManager.Add(tag.name, null);
                }

                this.Action.Trace("init.after tag manager");

                this.Action.prelanderid     = this.Prelander.ID;
                this.Action.prelandertypeid = this.Prelander.Type.ID;
                this.Action.prelander_data  = this.ActionPrelanderCache;
                this.Action.UpdateLater();
                DashboardSocket.OnActionUpdate(this.Action);
                this.Action.Trace("init.after update");

                this.UpdateTagManager();
                this.Action.Trace("init.after update tag manager");
                this.Database.TransactionalManager.RunAsync();
                return(new DistributionModel()
                {
                    Status = true
                });
            }
            catch (Exception e)
            {
                this.Logger.StartLoggin("")
                .Add("where", "pl-init")
                .Add("tagCount", model.tags != null ? model.tags.Count.ToString() : "null")
                .Add(model.tags)
                .OnException(e);
                return(new DistributionModel()
                {
                    Status = false
                });
            }
        }