public void TestDefaultQuery() { var query = new ApprenticeshipSearchQuery(); var queryString = _sut.GetQueryString(query); queryString.Should().Be("?PageNumber=1&PageSize=25"); }
public async Task<IResponseResult<IPaginationCollection<T>>> GetAsync( TokenBase token, int? skip = null, int? limit = null, bool? withCount = null, string orderBy = null, SortDirection? sortDirection = null, string searchKeyword = null) { if (string.IsNullOrEmpty(searchKeyword) || string.IsNullOrEmpty(searchKeyword.Trim())) { return await this.ExecuteRequestAsync<PaginationCollection<T>>( HttpMethod.Get, $"{this.BaseUrl}/memberships/{this.MembershipId}/{this.Slug}", QueryStringHelper.GetQueryString(skip, limit, withCount, orderBy, sortDirection), HeaderCollection.Add("Authorization", token.ToString())); } else { return await this.ExecuteRequestAsync<PaginationCollection<T>>( HttpMethod.Get, $"{this.BaseUrl}/memberships/{this.MembershipId}/{this.Slug}/search", QueryStringHelper.GetQueryString(skip, limit, withCount, orderBy, sortDirection).Add("keyword", searchKeyword), HeaderCollection.Add("Authorization", token.ToString())); } }
private void BrowserNavigating(object sender, NavigatingEventArgs e) { //QQ 空间授权成功后直接返回token,不需要用code换取token if (currentType == SocialType.QZone && e.Uri.AbsoluteUri.Contains("access_token")) { //http://qzs.qq.com/open/mobile/login/proxy.html?&t=1363316329#&openid=&appid=100394029&access_token=D1600ED336D42D024DFB5A0618A56B8C&key=270e66a425575f5130efe0d416252469&serial=&token_key=&browser=0&browser_error=0&status_os=&sdkv=&status_machine= AccessToken token = new AccessToken(); token.Token = QueryStringHelper.GetQueryString(e.Uri, "access_token"); token.OpenId = QueryStringHelper.GetQueryString(e.Uri, "openid"); action(token); return; } if (!e.Uri.AbsoluteUri.Contains("code=") && !e.Uri.AbsoluteUri.Contains("code =")) { return; } var arguments = e.Uri.AbsoluteUri.Split('?'); string code = arguments[1]; if (currentType == SocialType.Tencent) { var sp = arguments[1].Split('&'); code = sp[0]; //open id client.Tag = sp[1].Split('=')[1]; } SocialKit.GetToken(currentType, client, code, (p) => { action(p); }); }
static async Task CallLogin(HttpClient client, JsonResponseConvert jsonResponseConvert) { string queryLoginServlet = "http://membersim.bseindia.com/stocks/LoginServlet?USBackOfficeId=&USLOGINID=SER_CT2-T9072&USPassword=ser.123456&USTransactionPassword=&version=1.3044&SecuritiesMaxSequenceId=1&NSEContractsMaxSequenceId=82&NcdexContractsMaxSequenceId=60&MCXContractsMaxSequenceId=139&BSEContractsMaxSequenceId=1&BSECurrencyContractsMaxSequenceId=1&NSECurrencyContractsMaxSequenceId=2125&enable2FA=Y&VenderCode=8_SER&SessionKey=&Thick Client=Y"; string query1 = QueryStringHelper.GetQueryString(new LoginServletModel()); Console.Write(query1); Console.WriteLine(); Console.WriteLine(); var construct = ConstructorHelper.GetConstructorData(new LoginServletModel()); Console.Write(construct); // query1 = "http://membersim.bseindia.com/stocks/LoginServlet?" + query1; bool equal = query1.Equals(queryLoginServlet); //CheckIdentity(queryLoginServlet, query1); var len = query1.Length; var other = query1.Substring(66); /* string loginServletResponse = await CallApi(client, queryLoginServlet); * LoginServletResponse deserializedLoginServletResponse = (LoginServletResponse)jsonResponseConvert.Deserialize(typeof(LoginServletResponse), loginServletResponse); * * string queryAuthenticationMode = "http://membersim.bseindia.com/stocks/AuthenticationMode?verificationMode=1&USLOGINID=SER_CT2-T9072&SessionKey=&Thick Client=Y"; * string authenticationModeResponse = await CallApi(client, queryAuthenticationMode); * AuthenticationModeResponse deserializedAuthenticationModeResponse = (AuthenticationModeResponse)jsonResponseConvert.Deserialize(typeof(AuthenticationModeResponse), authenticationModeResponse, '|'); */ }
public async Task <IActionResult> GetContentInfo(int desaId, string contentType, string contentSubtype = null) { var auth = GetAuth(desaId); if (auth == null) { return(StatusCode((int)HttpStatusCode.Forbidden, new Dictionary <string, string>() { { "message", "Invalid or no token" } })); } var changeId = QueryStringHelper.GetQueryString <int>(Request.Query, "changeId", 0); var clientChangeId = 0; if (changeId > 0) { clientChangeId = changeId; } var contentQuery = dbContext.SidekaContent .Where(sc => sc.DesaId == desaId) .Where(sc => sc.Type == contentType) .Where(sc => sc.ChangeId == clientChangeId); if (!string.IsNullOrWhiteSpace(contentSubtype)) { contentQuery = contentQuery.Where(sc => sc.Subtype == contentSubtype); } var content = await contentQuery.Select(c => new { OpendataPushError = c.OpendataPushError, OpendataDatePushed = c.OpendataDatePushed }).FirstOrDefaultAsync(); if (content == null) { return(StatusCode((int)HttpStatusCode.NotFound, new Dictionary <string, string>())); } var result = new Dictionary <string, object>() { }; result["opendata_date_pushed"] = content.OpendataDatePushed; result["opendata_push_error"] = content.OpendataPushError; return(Ok(result)); }
public async Task<IResponseResult<IPaginationCollection<T>>> QueryAsync( TokenBase token, string query, int? skip = null, int? limit = null, bool? withCount = null, string orderBy = null, SortDirection? sortDirection = null) { return await this.ExecuteRequestAsync<PaginationCollection<T>>( HttpMethod.Post, $"{this.BaseUrl}/memberships/{this.MembershipId}/{this.Slug}/_query", QueryStringHelper.GetQueryString(skip, limit, withCount, orderBy, sortDirection), HeaderCollection.Add("Authorization", token.ToString()), new JsonRequestBody(Newtonsoft.Json.JsonConvert.DeserializeObject(query))); }
public async Task <IResponseResult <IPaginationCollection <RevokedToken> > > GetRevokedTokensAsync( string userId, TokenBase token, int?skip = null, int?limit = null, bool?withCount = null, string orderBy = null, SortDirection?sortDirection = null) { var query = "{ 'where': { 'user_id': '" + userId + "', 'membership_id': '" + this.MembershipId + "', 'token_type': 'bearer_token' } }"; return(await this.ExecuteRequestAsync <PaginationCollection <RevokedToken> >( HttpMethod.Post, $"{this.BaseUrl}/memberships/{this.MembershipId}/revoked-tokens/_query", QueryStringHelper.GetQueryString(skip, limit, withCount, orderBy, sortDirection), HeaderCollection.Add("Authorization", token.ToString()), new JsonRequestBody(Newtonsoft.Json.JsonConvert.DeserializeObject(query)))); }
/// <summary> /// Removes a parameter from the specified URL. /// </summary> /// <param name="request">The request containing the URL to manage.</param> /// <param name="parameterName">Parameter to be removed.</param> /// <returns>The updated URL.</returns> public static string RemoveParameterFromUrl(HttpRequest request, string parameterName) { try { var qsh = new QueryStringHelper(request.Url.Query); qsh.RemoveByName(parameterName); var returnUri = new UriBuilder(request.Url.Scheme, request.Url.Host, request.Url.Port) { Path = request.Url.AbsolutePath, Query = qsh.GetQueryString() }; return returnUri.ToString(); } catch { return string.Empty; } }
/// <summary> /// Adds a Querystring parameter to the current Request's URL. /// </summary> /// <param name="request">The request containing the URL to manage.</param> /// <param name="parameterName">The key for the Querystring entry.</param> /// <param name="parameterValue">The value for the Querystring entry.</param> /// <returns>A URL concatenated with the new querystring parameter.</returns> public static string AddParameterToUrl(HttpRequest request, string parameterName, string parameterValue) { try { var qsh = new QueryStringHelper(request.Url.Query); qsh.AddOrReplace(parameterName, parameterValue); var returnUri = new UriBuilder(request.Url.Scheme, request.Url.Host, request.Url.Port) { Path = request.Url.AbsolutePath, Query = qsh.GetQueryString() }; return returnUri.ToString(); } catch { return string.Empty; } }
public async Task <IActionResult> GetContent(int desaId, string contentType, string contentSubtype = null) { Stopwatch sw = new Stopwatch(); sw.Start(); var auth = GetAuth(desaId); if (auth == null) { return(StatusCode((int)HttpStatusCode.Forbidden, new Dictionary <string, string>())); } var timestamp = QueryStringHelper.GetQueryString <int>(Request.Query, "timestamp", 0); var contentQuery = dbContext.SidekaContent .Where(sc => sc.DesaId == desaId) .Where(sc => sc.Timestamp > timestamp) .Where(sc => sc.Type == contentType) .Where(sc => sc.ApiVersion == "1.0"); if (!string.IsNullOrWhiteSpace(contentSubtype)) { contentQuery = contentQuery.Where(sc => sc.Subtype == contentSubtype); } var content = await contentQuery .OrderByDescending(sc => sc.Timestamp) .Select(sc => sc.Content) .FirstOrDefaultAsync(); if (string.IsNullOrWhiteSpace(content)) { return(StatusCode((int)HttpStatusCode.NotFound, new Dictionary <string, string>())); } sw.Stop(); await Logs((int)auth["user_id"], desaId, "", "get_content", contentType, contentSubtype, sw.Elapsed.Milliseconds); return(Ok(content)); }
/// <summary> /// Creates a fully formatted url for use with building page links. /// </summary> /// <param name="page">The page number.</param> /// <returns>The fully formatted url.</returns> private string CreateUrl(int page) { var request = HttpContext.Current.Request; var helper = new QueryStringHelper(request.Url.Query); helper.AddOrReplace("page", page.ToString(CultureInfo.InvariantCulture)); var returnUri = new UriBuilder(request.Url.Scheme, request.Url.Host, request.Url.Port) { Path = request.Url.AbsolutePath, Query = helper.GetQueryString() }; return returnUri.ToString(); }
public async Task <IActionResult> PostContentV2([FromBody] JObject contentJObject, int desaId, string contentType, string contentSubtype = null) { Stopwatch sw = new Stopwatch(); sw.Start(); string lockName = desaId + "_" + contentType + "_" + contentSubtype; object writeLock = writeLocks.GetOrAdd(lockName, new object()); lock (writeLock){ var auth = GetAuth(desaId); if (auth == null) { return(StatusCode((int)HttpStatusCode.Forbidden, new Dictionary <string, string>() { { "message", "Invalid or no token" } })); } var permission = contentType; if (new string[] { "perencanaan", "penganggaran", "spp", "penerimaan" }.Contains(contentType)) { permission = "keuangan"; } var roles = (List <string>)auth["roles"]; if (!roles.Contains("administrator") && !roles.Contains(permission)) { return(StatusCode((int)HttpStatusCode.Forbidden, new Dictionary <string, string>() { { "message", "Your account doesn't have the permission" } })); } var content = new SidekaContentViewModel(contentJObject); // Validate foreach (var column in content.Columns) { if (content.Diffs != null && content.Diffs.ContainsKey(column.Key)) { var index = 0; foreach (var diff in content.Diffs[column.Key]) { var location = string.Format("Diff {0} ({1}) tab {2}", index, "added", column.Key); var invalid = Validate(column.Value, diff.Added, location); if (invalid != null) { return(invalid); } location = string.Format("Diff {0} ({1}) tab {2}", index, "modified", column.Key); invalid = Validate(column.Value, diff.Modified, location); if (invalid != null) { return(invalid); } location = string.Format("Diff {0} ({1}) tab {2}", index, "deleted", column.Key); invalid = Validate(column.Value, diff.Deleted, location, false); if (invalid != null) { return(invalid); } } } if (content.Data != null && content.Data.ContainsKey(column.Key)) { var location = string.Format("Data tab {0}", column.Key); var invalid = Validate(column.Value, content.Data[column.Key], location); if (invalid != null) { return(invalid); } } } var clientChangeId = 0; var changeId = QueryStringHelper.GetQueryString <int>(Request.Query, "changeId", 0); if (changeId > 0) { clientChangeId = changeId; } // Find max change id var maxChangeIdQuery = dbContext.SidekaContent .Where(sc => sc.DesaId == desaId) .Where(sc => sc.Type == contentType); if (!string.IsNullOrWhiteSpace(contentSubtype)) { maxChangeIdQuery = maxChangeIdQuery.Where(sc => sc.Subtype == contentSubtype); } var maxChangeId = maxChangeIdQuery.Select(sc => sc.ChangeId).DefaultIfEmpty(0).Max(); // TODO: This is risky!! Consider changing change_id column to serial or autoincrement var newContent = new SidekaContentViewModel(); // Initialize new content to be saved foreach (var column in content.Columns) { newContent.Data[column.Key] = new List <object>().ToArray(); newContent.Columns[column.Key] = column.Value; if (content.Diffs != null && content.Diffs.ContainsKey(column.Key)) { newContent.Diffs[column.Key] = content.Diffs[column.Key]; } else { newContent.Diffs[column.Key] = new List <SidekaDiff>().ToArray(); } } var latestContentQuery = dbContext.SidekaContent .Where(sc => sc.DesaId == desaId) .Where(sc => sc.Type == contentType); if (!string.IsNullOrWhiteSpace(contentSubtype)) { latestContentQuery = latestContentQuery.Where(sc => sc.Subtype == contentSubtype); } var latestContentString = latestContentQuery .OrderByDescending(sc => sc.ChangeId) .Select(sc => sc.Content) .FirstOrDefault(); JObject latestContentJObject = null; if (string.IsNullOrWhiteSpace(latestContentString)) { latestContentJObject = new JObject { { "data", new JObject() }, { "columns", contentJObject["columns"] } }; } else { latestContentJObject = JsonConvert.DeserializeObject <JObject>(latestContentString); } var diffs = GetDiffsNewerThanClient(desaId, contentType, contentSubtype, clientChangeId, (JObject)contentJObject["columns"]); if (latestContentJObject["data"] is JArray && contentType == "penduduk") { newContent.Data["penduduk"] = MergeDiffs(newContent.Columns["penduduk"], newContent.Diffs["penduduk"], new List <object>().ToArray()); } else { var latestContent = new SidekaContentViewModel(latestContentJObject); foreach (var column in content.Columns) { // Initialize so the latest content have the same tab with the posted content if (!latestContent.Columns.ContainsKey(column.Key)) { latestContent.Columns[column.Key] = column.Value; } if (!latestContent.Data.ContainsKey(column.Key)) { latestContent.Data[column.Key] = new List <object>().ToArray(); } if (content.Data != null && content.Data[column.Key] != null && new string[] { "perencanaan", "penganggaran", "penerimaan", "spp" }.Contains(contentType)) { var invalid = ValidateDuplicatesData(column.Key, column.Value, content.Data[column.Key]); if (invalid != null) { return(invalid); } // Special case for client who posted data instead of diffs newContent.Data[column.Key] = content.Data[column.Key]; // Add new diffs to show that the content is rewritten var sidekaDiff = new SidekaDiff { Added = new List <object>().ToArray(), Modified = new List <object>().ToArray(), Deleted = new List <object>().ToArray(), Total = 0, Rewritten = true }; newContent.Diffs[column.Key].Append(sidekaDiff); } else if (newContent.Diffs[column.Key].Length > 0) { // There's diffs in the posted content for this tab, apply them to latest data var latestColumns = latestContent.Columns[column.Key]; var transformedLatestData = TransformData( latestContentJObject["columns"][column.Key], contentJObject["columns"][column.Key], latestContent.Data[column.Key]); var invalid = ValidateDuplicatesDiffs(column.Key, column.Value, content.Diffs[column.Key], transformedLatestData); if (invalid != null) { return(invalid); } var mergedData = MergeDiffs(column.Value, content.Diffs[column.Key], transformedLatestData); newContent.Data[column.Key] = mergedData; newContent.Columns[column.Key] = column.Value; } else { // There's no diffs in the posted content for this tab, use the old data newContent.Data[column.Key] = latestContent.Data[column.Key]; } } } var contentSize = ASCIIEncoding.Unicode.GetByteCount(JsonConvert.SerializeObject(newContent.Data)); var diffSize = ASCIIEncoding.Unicode.GetByteCount(JsonConvert.SerializeObject(newContent.Diffs)); int newChangeId = GetNextChangeId(desaId, contentType, contentSubtype); var sidekaContent = new SidekaContent { DesaId = desaId, Type = contentType, Subtype = contentSubtype, Content = JsonConvert.SerializeObject(newContent), DateCreated = DateTime.Now, CreatedBy = (int)auth["user_id"], ChangeId = newChangeId, ApiVersion = configuration.GetValue <string>("ApiVersion"), ContentSize = contentSize, DiffSize = diffSize }; dbContext.Add(sidekaContent); dbContext.SaveChanges(); var result = new Dictionary <string, object>() { { "success", true }, { "changeId", newChangeId }, { "change_id", newChangeId }, { "diffs", diffs }, { "columns", content.Columns }, }; sw.Stop(); Logs((int)auth["user_id"], desaId, "", "save_content", contentType, contentSubtype, sw.Elapsed.Milliseconds); return(Ok(result)); } }
public async Task <IActionResult> UpdateSizes(int desaId, string contentType, string contentSubtype = null) { var clientChangeId = 0; var changeId = QueryStringHelper.GetQueryString <int>(Request.Query, "changeId", 0); if (changeId > 0) { clientChangeId = changeId; } var contentQuery = dbContext.SidekaContent .Where(sc => sc.DesaId == desaId) .Where(sc => sc.Type == contentType) .Where(sc => sc.Subtype == contentSubtype) .Where(sc => sc.ChangeId >= clientChangeId); var sidekaContents = await contentQuery.OrderByDescending(sc => sc.ChangeId).ToListAsync(); var sizes = new List <Dictionary <string, int> >(); var result = new Dictionary <string, object>() { { "success", true }, { "content", sizes } }; foreach (var sidekaContent in sidekaContents) { var sidekaContentJObject = JsonConvert.DeserializeObject <JObject>(sidekaContent.Content); var sizeItem = new Dictionary <string, int>(); try { var content = new SidekaContentViewModel(sidekaContentJObject); var contentSize = ASCIIEncoding.Unicode.GetByteCount(JsonConvert.SerializeObject(content.Data)); var diffSize = ASCIIEncoding.Unicode.GetByteCount(JsonConvert.SerializeObject(content.Diffs)); sizeItem.Add("contentSize", contentSize); if (content.Diffs == null) { sizeItem.Add("diffSize", 0); } else { sizeItem.Add("diffSize", diffSize); } sidekaContent.ContentSize = contentSize; sidekaContent.DiffSize = diffSize; dbContext.Update(sidekaContent); await dbContext.SaveChangesAsync(); sizes.Add(sizeItem); } catch (Exception ex) { } } return(Ok(result)); }
public async Task <IActionResult> GetContentV2(int desaId, string contentType, string contentSubtype = null) { Stopwatch sw = new Stopwatch(); sw.Start(); var auth = GetAuth(desaId); if (auth == null) { return(StatusCode((int)HttpStatusCode.Forbidden, new Dictionary <string, string>() { { "message", "Invalid or no token" } })); } var clientChangeId = 0; var changeId = QueryStringHelper.GetQueryString <int>(Request.Query, "changeId", 0); if (changeId > 0) { clientChangeId = changeId; } var sizeComparison = await GetSizeComparison(desaId, contentType, contentSubtype, clientChangeId); Log.Information("After comparing sizes {0}", sw.Elapsed); var contentQuery = dbContext.SidekaContent .Where(sc => sc.DesaId == desaId) .Where(sc => sc.Type == contentType) .Where(sc => sc.ChangeId >= clientChangeId); if (!string.IsNullOrWhiteSpace(contentSubtype)) { contentQuery = contentQuery.Where(sc => sc.Subtype == contentSubtype); } var contentId = await contentQuery.OrderByDescending(sc => sc.ChangeId).Select(sc => sc.Id).FirstOrDefaultAsync(); if (contentId == 0) { return(StatusCode((int)HttpStatusCode.NotFound, new Dictionary <string, string>())); } var sidekaContent = await dbContext.SidekaContent.FindAsync(contentId); Log.Information("After querying sd contents {0}", sw.Elapsed); dynamic content = JsonConvert.DeserializeObject <JObject>(sidekaContent.Content); Log.Information("After deserialized {0}", sw.Elapsed); if (sidekaContent.ApiVersion == "1.0") { content["columns"] = JArray.FromObject(new string[] { "nik", "nama_penduduk", "tempat_lahir", "tanggal_lahir", "jenis_kelamin", "pendidikan", "agama", "status_kawin", "pekerjaan", "pekerjaan_ped", "kewarganegaraan", "kompetensi", "no_telepon", "email", "no_kitas", "no_paspor", "golongan_darah", "status_penduduk", "status_tinggal", "kontrasepsi", "difabilitas", "no_kk", "nama_ayah", "nama_ibu", "hubungan_keluarga", "nama_dusun", "rw", "rt", "alamat_jalan" }); } var returnData = new Dictionary <string, object>() { { "success", true }, { "changeId", sidekaContent.ChangeId }, { "apiVersion", sidekaContent.ApiVersion }, { "columns", content["columns"] }, // TODO: remove this later { "change_id", sidekaContent.ChangeId }, }; Dictionary <string, object> diffs = null; if (sidekaContent.ChangeId == clientChangeId) { returnData.Add("diffs", new List <object>()); } else if (clientChangeId == 0 || sizeComparison["contentSize"] < sizeComparison["diffSize"]) { returnData.Add("data", content["data"]); } else { diffs = GetDiffsNewerThanClient(desaId, contentType, contentSubtype, clientChangeId, (JObject)content["columns"]); Log.Information("After get diff {0}", sw.Elapsed); returnData.Add("diffs", diffs); } Log.Information("After preparing return data {0}", sw.Elapsed); sw.Stop(); await Logs((int)auth["user_id"], desaId, "", "get_content", contentType, contentSubtype, sw.Elapsed.Milliseconds); Log.Information("After inserting logs {0}", sw.Elapsed); return(Ok(returnData)); }