protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            if (AppState.State.Instance.UserDetails == null)
            {
                var sharedPrefs = GetSharedPreferences("ChallengeApp", FileCreationMode.Private);

                var userDetailsJson = sharedPrefs.GetString("userDetailsJson", null);

                if (userDetailsJson == null)
                {
                    StartActivity(typeof(TRegisterActivity));
                    Finish();
                    return;
                }

                AppState.State.Instance.UserDetails = JsonConvert.DeserializeObject <Model.UserDetails>(userDetailsJson);
                var kc = new KeyChain.Net.XamarinAndroid.KeyChainHelper(() => this);

                if (Guid.TryParse(kc.GetKey("deviceGuid"), out var guid))
                {
                    AppState.State.Instance.DeviceGuid = guid;
                }
                else
                {
                    StartActivity(typeof(TRegisterActivity));
                    Finish();
                    return;
                }
            }

            SetupDb();
            OnUserDetailsLoaded();
        }
        private void OnLoggedIn()
        {
            UserDetails userDetails = null;
            string      responseJson;

            var request = new HttpWebRequest(new Uri("https://challengethesis.azurewebsites.net/api/users"));

            request.Method      = "POST";
            request.ContentType = "application/json";
            request.Headers.Add("SkautISLoginID", _loginId);

            try
            {
                using (var stream = request.GetRequestStream())
                    using (var streamWriter = new StreamWriter(stream))
                    {
                        streamWriter.Write("");
                    }
            }
            catch (WebException e)
            {
                var l = e;
            }
            using (var response = request.GetResponse())
                using (var responseStream = response.GetResponseStream())
                    using (var streamReader = new StreamReader(responseStream))
                    {
                        responseJson = streamReader.ReadToEnd();
                    }

            var responseObject = JsonConvert.DeserializeObject <ParsedRegisterResponse>(responseJson);

            userDetails = responseObject.Item1;

            using (var sharedPrefs = GetSharedPreferences("ChallengeApp", FileCreationMode.Private))
                using (var editor = sharedPrefs.Edit())
                {
                    var userDetailsJson = JsonConvert.SerializeObject(userDetails);

                    editor.PutString(nameof(userDetailsJson), userDetailsJson);
                    editor.Commit();
                }

            var kc = new KeyChain.Net.XamarinAndroid.KeyChainHelper(() => this);

            kc.SetKey("deviceGuid", responseObject.Item2.ToString());
            kc.SetKey("privateKey", responseObject.Item3);

            StartActivity(typeof(WelcomeActivity));
            SetResult(Result.Ok);
            Finish();
        }
Пример #3
0
        // Crypto

        private string Sign(string data)
        {
            var kc        = new KeyChain.Net.XamarinAndroid.KeyChainHelper(() => this);
            var keyString = kc.GetKey("privateKey");

            RsaPrivateCrtKeyParameters privateKey = (RsaPrivateCrtKeyParameters)PrivateKeyFactory.CreateKey(Convert.FromBase64String(keyString));
            var signer = SignerUtilities.GetSigner("SHA256withRSA");

            signer.Init(true, privateKey);

            var bytes = Encoding.UTF8.GetBytes(data);

            signer.BlockUpdate(bytes, 0, bytes.Length);

            byte[] signature = signer.GenerateSignature();

            var signedString = Convert.ToBase64String(signature);

            return(signedString);
        }