示例#1
0
        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);
        }
示例#2
0
        // 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();
            }
        }