public SessionResponseMessage(HttpRequestMessage request, Session session, JsonSerializerSettings settings, string secretKey, string sessionKey) : base(HttpStatusCode.OK) { var token = new SessionToken(session, settings, secretKey); token.Sign(); var serializedToken = token.Serialize(); if (request.Headers.Contains("Origin")) { Headers.Add("Access-Control-Allow-Origin", request.Headers.GetValues("Origin").First()); Headers.Add("Access-Control-Allow-Credentials", "true"); Headers.Add("Access-Control-Allow-Methods", "GET"); Headers.Add("Access-Control-Allow-Headers", "Content-Type"); } /*Headers.AddCookies(new[] { * new SessionCookie(sessionKey, request.RequestUri.Host.Replace("www", ""), serializedToken), * //new SessionCookie(TopiaSettings.DomainName, serializedToken) * });*/ Content = new StringContent(serializedToken); }
// LUCENENET specific - copy method not used /// <summary> /// Executes the replication task. /// </summary> /// <exception cref="InvalidOperationException">required parameters are missing</exception> public virtual void Perform(IReplicationRequest request, IReplicationResponse response) { string[] pathElements = GetPathElements(request); if (pathElements.Length != 2) { throw new InvalidOperationException("invalid path, must contain shard ID and action, e.g. */s1/update"); } if (!Enum.TryParse(pathElements[ACTION_IDX], true, out ReplicationAction action)) { throw new InvalidOperationException("Unsupported action provided: " + pathElements[ACTION_IDX]); } if (!replicators.TryGetValue(pathElements[SHARD_IDX], out IReplicator replicator)) { throw new InvalidOperationException("unrecognized shard ID " + pathElements[SHARD_IDX]); } // SOLR-8933 Don't close this stream. try { switch (action) { case ReplicationAction.OBTAIN: string sessionId = ExtractRequestParam(request, REPLICATE_SESSION_ID_PARAM); string fileName = ExtractRequestParam(request, REPLICATE_FILENAME_PARAM); string source = ExtractRequestParam(request, REPLICATE_SOURCE_PARAM); using (Stream stream = replicator.ObtainFile(sessionId, source, fileName)) stream.CopyTo(response.Body); break; case ReplicationAction.RELEASE: replicator.Release(ExtractRequestParam(request, REPLICATE_SESSION_ID_PARAM)); break; case ReplicationAction.UPDATE: string currentVersion = request.QueryParam(REPLICATE_VERSION_PARAM); SessionToken token = replicator.CheckForUpdate(currentVersion); if (token == null) { response.Body.Write(new byte[] { 0 }, 0, 1); // marker for null token } else { response.Body.Write(new byte[] { 1 }, 0, 1); token.Serialize(new DataOutputStream(response.Body)); } break; default: throw new ArgumentOutOfRangeException(); } } catch (Exception e) { response.StatusCode = 500; try { TextWriter writer = new StreamWriter(response.Body); JsonSerializer serializer = JsonSerializer.Create(JSON_SERIALIZER_SETTINGS); serializer.Serialize(writer, e, e.GetType()); } catch (Exception exception) { throw new IOException("Could not serialize", exception); } } finally { response.Flush(); } }