예제 #1
0
 protected JodelRequestBase(JodelUser user, HttpMethod method, string url, string version = "v2", string postData = "")
 {
     User     = user;
     Method   = method;
     Url      = url;
     Version  = version;
     PostData = postData;
 }
예제 #2
0
        public static async Task <VerificationResult> VerifyAccountAsync(JodelUser jodelUser)
        {
            var checkinRequestProto = new CheckinRequest
            {
                checkin = new CheckinRequest.Checkin {
                    build = new CheckinRequest.Checkin.Build {
                        sdkVersion = 18
                    }
                },
                version  = 3,
                fragment = 0
            };

            var data = SerializeToByteArray(checkinRequestProto);

            var webClient = new WebClient();

            webClient.Headers.Add("Content-Type", "application/x-protobuffer");
            webClient.Headers.Add("Accept-Encoding", "deflate");
            webClient.Headers.Add("User-Agent", "Android-Checkin/2.0 (vbox86p JLS36G); deflate");
            var checkinResponseString = await webClient.UploadDataTaskAsync("https://android.clients.google.com/checkin", data);

            CheckinResponse checkinResponseProto;

            try
            {
                checkinResponseProto = ProtoBuf.Serializer.Deserialize <CheckinResponse>(new MemoryStream(checkinResponseString));
            }
            catch (Exception)
            {
                return(new VerificationResult(false, "Couldn't deserialize CheckinProtoResponse."));
            }

            var registerPostData = "app=com.tellm.android.app&app_ver=1001800&cert=a4a8d4d7b09736a0f65596a868cc6fd620920fb0&device=" + checkinResponseProto.androidId + "&sender=425112442765&X-appid=" + Guid.NewGuid().ToString("n").Substring(0, 11) + "&X-scope=GCM";

            webClient.Headers.Clear();
            webClient.Headers.Add("Authorization", "AidLogin " + checkinResponseProto.androidId + ":" + checkinResponseProto.securityToken);
            webClient.Headers.Add("Accept", "*/*");
            webClient.Headers.Add("Accept-Encoding", "deflate");
            webClient.Headers.Add("User-Agent", "Android-Checkin/2.0 (vbox86p JLS36G); deflate");
            webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");

            var registerTokenResponseString = await webClient.UploadStringTaskAsync("https://android.clients.google.com/c2dm/register3", registerPostData);

            if (!registerTokenResponseString.Contains("token"))
            {
                return(new VerificationResult(false, "Couldn't register c2dm token."));
            }
            var registerToken = registerTokenResponseString.Replace("token=", "");

            var verificationResult = await jodelUser.VerifyInstanceIdAsync(registerToken);

            return(!verificationResult.Verified ? new VerificationResult(false, "Couldn't verify using c2dm token.") : new VerificationResult(true, ""));
        }
예제 #3
0
        //todo: not 100% async yet
        public static async Task <VerificationResult> VerifyAccountAsync(JodelUser jodelUser)
        {
            var checkinRequestProto = new CheckinRequest
            {
                checkin = new CheckinRequest.Checkin {
                    build = new CheckinRequest.Checkin.Build {
                        sdkVersion = 18
                    }
                },
                version  = 3,
                fragment = 0
            };

            var data = SerializeToByteArray(checkinRequestProto);

            var webClient = new WebClient();

            webClient.Headers.Add("Content-Type", "application/x-protobuffer");
            webClient.Headers.Add("Accept-Encoding", "deflate");
            webClient.Headers.Add("User-Agent", "Android-Checkin/2.0 (vbox86p JLS36G); deflate");
            var checkinResponseString = await webClient.UploadDataTaskAsync("https://android.clients.google.com/checkin", data);

            CheckinResponse checkinResponseProto;

            try
            {
                checkinResponseProto = ProtoBuf.Serializer.Deserialize <CheckinResponse>(new MemoryStream(checkinResponseString));
            }
            catch (Exception)
            {
                return(new VerificationResult(false, "Couldn't deserialize CheckinProtoResponse."));
            }

            var registerPostData = "app=com.tellm.android.app&app_ver=1001800&cert=a4a8d4d7b09736a0f65596a868cc6fd620920fb0&device=" + checkinResponseProto.androidId + "&sender=425112442765&X-appid=" + Guid.NewGuid().ToString("n").Substring(0, 11) + "&X-scope=GCM";

            webClient.Headers.Clear();
            webClient.Headers.Add("Authorization", "AidLogin " + checkinResponseProto.androidId + ":" + checkinResponseProto.securityToken);
            webClient.Headers.Add("Accept", "*/*");
            webClient.Headers.Add("Accept-Encoding", "deflate");
            webClient.Headers.Add("User-Agent", "Android-Checkin/2.0 (vbox86p JLS36G); deflate");
            webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");

            var registerTokenResponseString = await webClient.UploadStringTaskAsync("https://android.clients.google.com/c2dm/register3", registerPostData);

            if (!registerTokenResponseString.Contains("token"))
            {
                return(new VerificationResult(false, "Couldn't register c2dm token."));
            }
            var registerToken = registerTokenResponseString.Replace("token=", "");

            var tokenPushed = await jodelUser.PushTokenAsync(registerToken);

            if (!tokenPushed)
            {
                return(new VerificationResult(false, "Couldn't push c2dm token."));
            }
            var loginRequestProto = new LoginRequest
            {
                auth_service = 2,
                auth_token   = checkinResponseProto.securityToken.ToString(),
                id           = "android-11",
                domain       = "mcs.android.com",
                device_id    = "android-" + checkinResponseProto.androidId.ToString("X"),
                resource     = checkinResponseProto.androidId.ToString(),
                user         = checkinResponseProto.androidId.ToString(),
                use_rmq2     = true,
                account_id   = (long)checkinResponseProto.androidId
            };

            //lazy hack
            var verificationResponse = await Task.Run(() => GetGcmVerificationCode(loginRequestProto));

            if (!verificationResponse.Success)
            {
                return(verificationResponse);
            }

            var verificationData = verificationResponse.Message;

            if (!verificationData.Contains("verification_code"))
            {
                return(new VerificationResult(false, "MCS server didn't contain verification_code field."));
            }
            var serverTime        = Regex.Match(verificationData, "\"server_time\":(.*?),").Groups[1].Value;
            var verificationToken = Regex.Match(verificationData, "\"verification_code\":\"(.*?)\"").Groups[1].Value;
            var verifiedPushToken = await jodelUser.VerifyPushTokenAsync(serverTime, verificationToken);

            return(!verifiedPushToken ? new VerificationResult(false, "Couldn't verify c2dm token.") : new VerificationResult(true, ""));
        }
예제 #4
0
 public SimplifiedRequest(JodelUser user, HttpMethod method, string url, string version = "v2", string postData = "") : base(user, method, url, version, postData)
 {
 }
예제 #5
0
 public JodelRequestFactory(JodelUser user)
 {
     User = user;
 }