public UniRx.IObservable <bool> DumpAutoLogin(string filename) { return(Observable.Range(0, 1) .Select(_ => { if (context.accept_equip == null) { throw new System.MissingFieldException("context", "accept_equip"); } var body = new AutoLoginFile(); body.token = context.token; using (var rsa = new System.Security.Cryptography.RSACryptoServiceProvider()) { rsa.FromXmlString(context.public_key); var encrypted = rsa.Encrypt(context.token_time.ToString()); body.password = Convert.ToBase64String(encrypted); } var json = Newtonsoft.Json.JsonConvert.SerializeObject(body); var pbkdf = new Rfc2898DeriveBytes(json, SecureHelper.APP_SALT.GetByte(Convert.FromBase64String), 3483); body.signature = Convert.ToBase64String(pbkdf.GetBytes(256)); JsonDB db = new JsonDB("account"); var obj = JToken.FromObject(body); db.Put(filename, obj); return true; })); }
UniRx.IObservable <Net.HTTPResult> LoginAsAuto(AccountLoginParam argc) { return(Observable.Range(0, 1) .SelectMany(_ => { JsonDB db = new JsonDB("account"); var obj = db.Get(argc.extension); if (obj.Type == JTokenType.Null) { throw new Sas.Exception(Sas.ERRNO.LOCAL_HOST_NOT_FIND_EXIST.ToErrCode()); } AutoLoginFile body = obj.ToObject <AutoLoginFile> (); ; var hashed = body.signature; body.signature = null; var json = Newtonsoft.Json.JsonConvert.SerializeObject(body); var pbkdf = new Rfc2898DeriveBytes(json, SecureHelper.APP_SALT.GetByte(Convert.FromBase64String), 3483); var signature = Convert.ToBase64String(pbkdf.GetBytes(256)); if (!string.Equals(signature, hashed)) { throw new Sas.Exception(Sas.ERRNO.LOCAL_HOST_SIGNATURE_ERR.ToErrCode()); } var param = new AccountLoginReqParam(); param.sns = SNS.AUTO.GetHashCode(); param.token = Convert.FromBase64String(body.password); var inst = context.requester.Post(context.server + "/Account/LoginAuto"); inst.mReq.Headers.Add("sas-accesstoken", body.token); return inst.Invoke(JObject.FromObject(param)); })); }