public InitLoginResp InitLogin(InitLoginReq req)
 {
     return(HandleServiceCall(req, new InitLoginResp(), InitLoginImpl, new SessionAuthOptions {
         IsLoginFlow = true
     }));
 }
        private void InitLoginImpl(InitLoginReq req, InitLoginResp resp)
        {
            SessionChallenge challenge = Server.SessionManager.CreateChallenge(req.Auth.GetClientCode());

            resp.Challenge = challenge.Challenge;
        }
Exemplo n.º 3
0
        public async Task <TeamRole> LoginAsync()
        {
            SequenceNumber = 0;
            _sessionId     = 0;

            lock (_lock)
            {
                using (
                    var adminService = new AdminServiceClient(new BasicHttpBinding(),
                                                              new EndpointAddress(ConnectionData.Url)))
                {
                    int sequenceNumber = SequenceNumber;

                    var initLoginReq = new InitLoginReq
                    {
                        Auth = new ReqAuth
                        {
                            ClientName = ConnectionData.Username,
                            TeamName   = ConnectionData.TeamName,
                            AuthCode   =
                                GetAuthCode(string.Format("{0}:{1}:{2}:{3}{4}", ConnectionData.TeamName,
                                                          ConnectionData.Username,
                                                          0, 0, ConnectionData.Password)),
                            SessionId      = 0,
                            SequenceNumber = 0,
                        }
                    };

                    _stopwatch.Start();

                    var initLoginResp = adminService.InitLoginAsync(initLoginReq).Result;

                    _stopwatch.Stop();
                    LastCallTime = _stopwatch.ElapsedMilliseconds;
                    _stopwatch.Reset();

                    if (initLoginResp.Status != "OK")
                    {
                        throw new Exception(initLoginResp.Message);
                    }

                    var completeReq = new CompleteLoginReq
                    {
                        Auth = new ReqAuth
                        {
                            ClientName = ConnectionData.Username,
                            TeamName   = ConnectionData.TeamName,
                            AuthCode   = GetAuthCode(
                                string.Format("{0}:{1}:{2}:{3}{4}", ConnectionData.TeamName, ConnectionData.Username, 0,
                                              0, ConnectionData.Password)),
                            SessionId      = 0,
                            SequenceNumber = 0,
                        },
                        ChallengeResponse =
                            GetAuthCode(string.Format("{0}{1}",
                                                      GetAuthCode(string.Format("{0}{1}", initLoginResp.Challenge, ConnectionData.Password)),
                                                      ConnectionData.Password)),
                    };

                    sequenceNumber = SequenceNumber;

                    _stopwatch.Start();

                    var completeLoginResp = adminService.CompleteLoginAsync(completeReq).Result;

                    _stopwatch.Stop();
                    LastCallTime = _stopwatch.ElapsedMilliseconds;
                    _stopwatch.Reset();

                    if (completeLoginResp.Status != "OK")
                    {
                        throw new Exception(completeLoginResp.Message);
                    }

                    _sessionId = completeLoginResp.SessionId;

                    var req = new CreateObserverReq
                    {
                        Auth = new ReqAuth
                        {
                            ClientName     = ConnectionData.Username,
                            TeamName       = ConnectionData.TeamName,
                            SessionId      = _sessionId,
                            SequenceNumber = sequenceNumber,
                            AuthCode       =
                                GetAuthCode(string.Format("{0}:{1}:{2}:{3}{4}", ConnectionData.TeamName,
                                                          ConnectionData.Username,
                                                          _sessionId, sequenceNumber, ConnectionData.Password)),
                        },
                    };

                    _stopwatch.Start();

                    var resp = adminService.CreateObserverAsync(req).Result;

                    _stopwatch.Stop();
                    LastCallTime = _stopwatch.ElapsedMilliseconds;
                    _stopwatch.Reset();

                    if (resp.Status != "OK")
                    {
                        throw new Exception(resp.Message);
                    }

                    _observerId = resp.ObserverId;

                    return(resp.Role);
                }
            }
        }