Пример #1
0
        public void StoreAuthToken(LivemeAuthentication authentication)
        {
            using (var db = _dbContextFactory.CreateApplicationDbContext())
            {
                var found = db.LivemeAuthentication.FirstOrDefault();
                if (found != null)
                {
                    db.LivemeAuthentication.Remove(found);
                }

                db.LivemeAuthentication.Add(authentication);
                db.SaveChanges();
            }
        }
        public async Task Login()
        {
            var foundInDb = _dataAccess.FindAuthToken();

            if (foundInDb != null)
            {
                double secondsSinceLastLogin = DateTime.UtcNow.ToUnixTimestamp() - foundInDb.LoginTimestamp;
                if (secondsSinceLastLogin < TimeSpan.FromMinutes(30).TotalSeconds)
                {
                    return;
                }
            }

            if (_settings.Email == null || _settings.Password == null)
            {
                throw new ArgumentException("Either email or password was not provided");
            }

            var request = AuthRequest(_settings.Email, _settings.Password);
            var res     = await _client.Fetch(request, CancellationToken.None);

            dynamic json           = JsonConvert.DeserializeObject(res);
            var     authentication = new LivemeAuthentication
            {
                Sid      = json.data.sid,
                SsoToken = json.data.sso_token
            };


            var loginRequest = HttpRequestBuilder
                               .Post(LiveMeUrls.AppLogin)
                               .WithFormData(
                new
            {
                sso_token = authentication.SsoToken
            });

            var loginResponse = await _client.Fetch(loginRequest, CancellationToken.None);


            dynamic loginData = JsonConvert.DeserializeObject(loginResponse);

            authentication.Tuid           = loginData.data.user.user_info.uid;
            authentication.Token          = loginData.data.token;
            authentication.LoginTimestamp = DateTime.UtcNow.ToUnixTimestamp();

            _dataAccess.StoreAuthToken(authentication);
        }