Esempio n. 1
0
        public override async Task OnConnectedAsync()
        {
            var email            = Context.Connection.GetHttpContext().Request.Query["email"].ToString().Trim().ToLower();
            var QTAppKeyOverride = Context.Connection.GetHttpContext().Request.Query["QTAppKeyOverride"];

            //TODO: Add proper email validation
            if (string.IsNullOrEmpty(email))
            {
                await Clients.Client(Context.ConnectionId).InvokeAsync("recievedLoginUrl", new ApiResponse(success: false, message: "Email is invalid."));

                return;
            }

            var curUser = db.Users.Include(p => p.Token).FirstOrDefault(p => p.Email.ToLower() == email);

            if (curUser == null)
            {
                curUser       = new BLL.DBModels.User();
                curUser.Email = email;

                db.Users.Add(curUser);
            }
            curUser.ConnectionId = Context.ConnectionId;
            db.SaveChanges();

            if (curUser.Token != null)
            {
                //TODO: make a proper function for this
                try {
                    RestClient client = new RestClient(curUser.Token.ApiServer);
                    client.AddDefaultHeader("Authorization", curUser.Token.TokenType + " " + curUser.Token.AccessToken);

                    var request  = new RestRequest("/v1/accounts", Method.GET);
                    var accounts = client.Execute <AccountsResponse>(request).Data;

                    await Clients.Client(Context.ConnectionId).InvokeAsync("recievedAccounts", new ApiResponse(accounts));
                }
                catch {
                }
            }

            var redirectUrl = appSettings.BaseUrl + GlobalVars.LOGIN_REDIRECT_PATH + "?a=" + MiscHelpers.Base64Encode(email);

            var loginUrl = GlobalVars.QT_OAUTH_LOGIN_URL;

            loginUrl += "?client_id=" + (string.IsNullOrEmpty(QTAppKeyOverride) ? appSettings.QuestradeaAppKey : QTAppKeyOverride.ToString());
            loginUrl += "&response_type=code";
            loginUrl += "&redirect_uri=" + redirectUrl;

            await Clients.Client(Context.ConnectionId).InvokeAsync("recievedLoginUrl", new ApiResponse(loginUrl));
        }