示例#1
0
        internal async Task <bool> OpenNewSession(IClientShim client, string userName, string password, CancellationToken cancelToken)
        {
            var tokn = await GetToken(client, cancelToken);

            if (tokn.IsBlank())
            {
                return(false);
            }

            var req = RequestShim.POST(URL.Api_UserLogin);

            req.UserName  = _userName = userName;
            req.Password  = _password = Saltify(password);
            req.CsrfToken = tokn;

            var user = await ValidateCredentials(client, req, cancelToken);

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

            this.Current = await GetUserSession(client, user, cancelToken);

            if (this.Current == null)
            {
                return(false);
            }
            return(_isSessionValid = true);
        }
示例#2
0
        //private bool _loginStarted = false;
        //private static readonly Object obj = new Object();


        public D7ServicesClient(IFileSystemShim fsShim, ISerializer serializer)
        {
            _fsShim   = fsShim;
            _serialzr = ForwardLogs(serializer);
            _client   = ForwardLogs(new RestSharpClientShim());
            _auth     = ForwardLogs(new SessionAuth(fsShim, serializer));
            _batchr   = ForwardLogs(new BatchSender(_client, _auth));

            _client.ResponseReceived += (s, e) 
                => RaiseResponseReceived(e.Value);
        }
示例#3
0
        private async Task <D7UserSession> GetUserSession(IClientShim client, D7UserSession usr, CancellationToken cancelToken)
        {
            var req = RequestFactory.Make(URL.Api_SystemConnect, RestMethod.Post, usr, _userName, _password);

            req.UserName = _userName;
            req.Password = _password;

            var sess = await client.Send <D7UserSession>(req, cancelToken);

            sess.token   = usr.token;
            sess.BaseURL = client.BaseUrl;
            return(sess);
        }
示例#4
0
        private async Task <string> GetToken(IClientShim client, CancellationToken cancelToken)
        {
            var            req = RequestShim.POST(URL.Api_UserToken);
            D7SessionToken tok;

            try {
                tok = await client.Send <D7SessionToken>(req, cancelToken);
            }
            catch (Exception ex)
            {
                LogError("client.Send", ex);
                return(null);
            }
            return(tok?.token);
        }
示例#5
0
        private async Task <D7UserSession> ValidateCredentials(IClientShim client, RequestShim req, CancellationToken cancelToken)
        {
            req.Body     = new { username = _userName, password = _password };
            req.UserName = _userName;
            req.Password = _password;
            D7UserSession ret = null;

            try {
                ret = await client.Send <D7UserSession>(req, cancelToken);
            }
            catch (Exception ex) {
                LogError("client.Send<D7UserSession>", ex);
                return(null);
            }
            return(ret);
        }
示例#6
0
        internal async Task<bool> OpenNewSession(IClientShim client, string userName, string password, CancellationToken cancelToken)
        {
            var tokn = await GetToken(client, cancelToken);
            if (tokn.IsBlank()) return false;

            var req       = RequestShim.POST(URL.Api_UserLogin);
            req.UserName  = _userName = userName;
            req.Password  = _password = Saltify(password);
            req.CsrfToken = tokn;

            var user = await ValidateCredentials(client, req, cancelToken);
            if (user == null) return false;

            this.Current = await GetUserSession(client, user, cancelToken);
            if (this.Current == null) return false;
            return _isSessionValid = true;
        }
示例#7
0
        internal async Task <bool> CloseSession(IClientShim client, CancellationToken cancelToken)
        {
            Debug_n("Closing user session...", "");
            var req  = Req.POST(URL.Api_UserLogout);
            var resp = await client.Send <List <bool> >(req, cancelToken);

            var ok = resp.FirstOrDefault();

            this.Current = null;

            if (ok)
            {
                return(Debug_n("Session successfully closed.", ""));
            }
            else
            {
                return(Warn_n("Unexpected logout reply.", ok));
            }
        }
示例#8
0
        private async Task<D7UserSession> ValidateCredentials(IClientShim client, RequestShim req, CancellationToken cancelToken)
        {
            req.Body = new { username = _userName, password = _password };
            req.UserName = _userName;
            req.Password = _password;
            D7UserSession ret = null;

            try {
                ret = await client.Send<D7UserSession>(req, cancelToken);
            }
            catch (Exception ex) {
                LogError("client.Send<D7UserSession>", ex);
                return null;
            }
            return ret;
        }
示例#9
0
        internal async Task<bool> CloseSession(IClientShim client, CancellationToken cancelToken)
        {
            Debug_n("Closing user session...", "");
            var req = Req.POST(URL.Api_UserLogout);
            var resp = await client.Send<List<bool>>(req, cancelToken);
            var ok = resp.FirstOrDefault();

            this.Current = null;

            if (ok) return Debug_n("Session successfully closed.", "");
            else return Warn_n("Unexpected logout reply.", ok);
        }
示例#10
0
 private async Task<string> GetToken(IClientShim client, CancellationToken cancelToken)
 {
     var req = RequestShim.POST(URL.Api_UserToken);
     D7SessionToken tok;
     try {
         tok = await client.Send<D7SessionToken>(req, cancelToken);
     }
     catch (Exception ex)
     {
         LogError("client.Send", ex);
         return null;
     }
     return tok?.token;
 }
示例#11
0
        private async Task<D7UserSession> GetUserSession(IClientShim client, D7UserSession usr, CancellationToken cancelToken)
        {
            var req = RequestFactory.Make(URL.Api_SystemConnect, RestMethod.Post, usr, _userName, _password);
            req.UserName = _userName;
            req.Password = _password;

            var sess = await client.Send<D7UserSession>(req, cancelToken);
            sess.token = usr.token;
            sess.BaseURL = client.BaseUrl;
            return sess;
        }
示例#12
0
 public BatchSender(IClientShim clientShim, SessionAuth sessionAuth)
 {
     _client = clientShim;
     _auth   = sessionAuth;
 }