public void ok(SessionClient client) { succeed = true; ClientsTests.client = client; Assert.AreEqual(uid, client.ssInf.uid); Assert.IsNotNull(client.ssInf.ssid); }
/// <summary> /// Login and return a client instance (with session managed by jserv). /// </summary> /// <param name="uid"></param> /// <paramref name="pswdPlain">password in plain</param> /// <param name="device"></param> /// <param name="onlogin"></param> /// <param name="err"></param> /// <throws>SQLException the request makes server generate wrong SQL.</throws> /// <throws>SemanticException Request can not parsed correctly</throws> /// <throws>GeneralSecurityException other error</throws> /// <throws>Exception, most likely the network failed</throws> /// <return>null if failed, a SessionClient instance if login succeed.</return> public static async Task <SessionClient> Login(string uid, string pswdPlain, string device, OnLogin onlogin, OnError err = null) { byte[] iv = AESHelper.getRandom(); string iv64 = AESHelper.Encode64(iv); if (uid == null || pswdPlain == null) { throw new SemanticException("user id and password can not be null."); } // string tk64 = AESHelper.Encrypt("-----------" + uid, pswdPlain, iv); string tk64 = AESHelper.Encrypt(uid, pswdPlain, iv); // formatLogin: {a: "login", logid: logId, pswd: tokenB64, iv: ivB64}; // AnsonMsg<? extends AnsonBody> reqv11 = new AnsonMsg<AnQueryReq>(Port.session);; AnsonMsg reqv11 = AnSessionReq.formatLogin(uid, tk64, iv64, device); string url = ServUrl(new Port(Port.session)); HttpServClient httpClient = new HttpServClient(); SessionClient[] inst = new SessionClient[1]; AnsonMsg msg = await httpClient.Post(url, reqv11).ConfigureAwait(false); MsgCode code = msg.code; if (code != null && MsgCode.ok == code.code) { // create a logged in client inst[0] = new SessionClient(((AnSessionResp)msg.Body()[0]).ssInf); if (onlogin != null) { // onlogin.ok(new SessionClient(((AnSessionResp)msg.Body()[0]).ssInf)); onlogin.ok(inst[0]); } if (AnClient.console) { Console.WriteLine(msg.ToString()); } } else if (err != null) { err.err(new MsgCode(code.code), ((AnsonResp)msg.Body(0)).Msg()); } else { throw new SemanticException( "loging failed\ncode: {0}\nerror: {1}", code, ((AnsonResp)msg.Body()[0]).Msg()); } return(inst[0]); }
static void UploadTransaction(CancellationTokenSource waker, SessionClient client, string p) { // string p = Path.get(filename); byte[] f = File.ReadAllBytes(p); string b64 = AESHelper.Encode64(f); AnsonMsg jmsg = client.Update(uri, "a_users"); AnUpdateReq upd = (AnUpdateReq)jmsg.Body(0); upd.Nv("nationId", "CN") .WhereEq("userId", "admin") // .post(((UpdateReq) new UpdateReq(null, "a_attach") .Post(AnUpdateReq.formatDelReq(uri, null, "a_attaches") .WhereEq("busiTbl", "a_users") .WhereEq("busiId", "admin") .Post((AnInsertReq.formatInsertReq(null, "a_attaches", "a_attaches") .Cols("attName", "busiId", "busiTbl", "uri") .Nv("attName", "-Anclient.cs Test") // The parent pk can't be resulved, we must provide the value. // See https://odys-z.github.io/notes/semantics/best-practices.html#fk-ins-cate .Nv("busiId", "admin") .Nv("busiTbl", "a_users") .Nv("uri", b64)))); jmsg.Header(client.Header()); client.Console(jmsg); client.Commit(jmsg, //(code, data) => { // if (MsgCode.ok == code.code) // Utils.Logi(code.ToString()); // else Utils.Warn(data.ToString()); //}, // onErr: (c, err) => { Assert.Fail(string.Format(@"code: {0}, error: {1}", c, err.Msg())); }, // waker ); new OnUploadError()); succeed = true; waker.Cancel(); }
public void ok(SessionClient _client) { client = _client; UploadTransaction(waker, client, "Sun Yet-sen.jpg"); }