コード例 #1
0
        //--- Class Methods ---
        public void RequestLog_Insert(XUri requestUri, string requestVerb, string requestHostHeader, string origin, string serviceHost, string serviceFeature, DreamStatus responseStatus, string username, uint executionTime, string response) {
            string host = requestUri.HostPort;
            if( !host.Contains(":"))
                host = host + ":80";

            //Schema for request log in "trunk/product/deki/web/maintenance/apirequestlog.sql"
            Catalog.NewQuery(@" /* RequestLog_Insert */
insert delayed into requestlog (
 	`rl_requesthost`, `rl_requesthostheader`, `rl_requestpath`, `rl_requestparams`, `rl_requestverb`, 
 	`rl_dekiuser`, `rl_origin`, `rl_servicehost`, `rl_servicefeature`, `rl_responsestatus`, `rl_executiontime`, 
 	`rl_response`
 ) values (
 	?REQUESTHOST, ?REQUESTHOSTHEADER, ?REQUESTPATH, ?REQUESTPARAMS, ?REQUESTVERB, 
 	?DEKIUSER, ?ORIGIN, ?SERVICEHOST, ?SERVICEFEATURE, ?RESPONSESTATUS, ?EXECUTIONTIME, 
 	?RESPONSE
 );")
                .With("REQUESTHOST", host)
                .With("REQUESTHOSTHEADER", requestHostHeader)
                .With("REQUESTPATH", requestUri.Path)
                .With("REQUESTPARAMS", requestUri.Query)
                .With("REQUESTVERB", requestVerb)
                .With("DEKIUSER", username)
                .With("ORIGIN", origin == null ? String.Empty : origin.ToLowerInvariant())
                .With("SERVICEHOST", serviceHost)
                .With("SERVICEFEATURE", serviceFeature)
                .With("RESPONSESTATUS", (int)responseStatus)
                .With("EXECUTIONTIME", executionTime)
                .With("RESPONSE", response)
                .Execute();
        }
コード例 #2
0
        //--- Constructors ---

        /// <summary>
        /// Create a new message.
        /// </summary>
        /// <param name="status">Http status.</param>
        /// <param name="headers">Header collection.</param>
        public DreamMessage(DreamStatus status, DreamHeaders headers)
        {
            this.Status  = status;
            this.Headers = new DreamHeaders(headers);
            _bytes       = new byte[0];
            _noContent   = true;
        }
コード例 #3
0
 public DreamMessage SyncMixedPathArg(
     [Path] int x,
     [Path] bool y,
     [Path] DreamStatus z
     )
 {
     return(Response(new XDoc("r").Elem("x", x).Elem("y", y).Elem("z", z)));
 }
コード例 #4
0
ファイル: DreamFeatureTests.cs プロジェクト: yonglehou/DReAM
 public DreamMessage SyncQueryargsMixedPathArgNoAttr(
     int x,
     bool y,
     DreamStatus z
     )
 {
     return(Response(new XDoc("r").Elem("x", x).Elem("y", y).Elem("z", z)));
 }
コード例 #5
0
 public DreamMessage SyncMixedArgs(
     int x,
     bool y,
     [Path] DreamStatus z,
     [Query] Decimal v
     )
 {
     return(Response(new XDoc("r").Elem("x", x).Elem("y", y).Elem("z", z).Elem("v", v)));
 }
コード例 #6
0
 /// <summary>
 /// Assert that the status of the message is equal to an expected value.
 /// </summary>
 /// <param name="response">Response message.</param>
 /// <param name="status">Status to assert.</param>
 public static void AssertStatus(this DreamMessage response, DreamStatus status)
 {
     if(response.Status == status) {
         return;
     }
     Assert.Fail(
         string.Format("Request status was {0} instead of {1} failed:\r\n{2}",
         response.Status,
         status,
         (response.HasDocument
         ? string.Format("{0}: {1}", response.Status, response.ToDocument()["message"].AsText)
         : response.Status.ToString())));
 }
コード例 #7
0
        /// <summary>
        /// Create a new message.
        /// </summary>
        /// <param name="status">Http status.</param>
        /// <param name="headers">Header collection.</param>
        /// <param name="contentType">Content Mime-Type</param>
        /// <param name="contentLength">Content byte langth</param>
        /// <param name="stream">Stream to uas as the source for the message's content.</param>
        public DreamMessage(DreamStatus status, DreamHeaders headers, MimeType contentType, long contentLength, Stream stream)
        {
            this.Status  = status;
            this.Headers = new DreamHeaders(headers);
            if (contentLength != -1)
            {
                this.Headers.ContentLength = contentLength;
            }
            this.Headers.ContentType = contentType ?? MimeType.DefaultMimeType;

            // set stream
            _stream     = stream ?? Stream.Null;
            _streamOpen = !_stream.IsStreamMemorized();
        }
コード例 #8
0
        /// <summary>
        /// Create a new message.
        /// </summary>
        /// <param name="status">Http status.</param>
        /// <param name="headers">Header collection.</param>
        /// <param name="contentType">Content Mime-Type.</param>
        /// <param name="bytes">Message body.</param>
        public DreamMessage(DreamStatus status, DreamHeaders headers, MimeType contentType, byte[] bytes)
        {
            if (bytes == null)
            {
                throw new ArgumentNullException("bytes");
            }
            this.Status  = status;
            this.Headers = new DreamHeaders(headers);
            this.Headers.ContentLength = bytes.LongLength;
            this.Headers.ContentType   = contentType ?? MimeType.DefaultMimeType;

            // set bytes
            _bytes = bytes;
        }
コード例 #9
0
 /// <summary>
 /// Assert that the status of the message is equal to an expected value.
 /// </summary>
 /// <param name="response">Response message.</param>
 /// <param name="status">Status to assert.</param>
 public static void AssertStatus(this DreamMessage response, DreamStatus status)
 {
     if (response.Status == status)
     {
         return;
     }
     Assert.Fail(
         string.Format("Request status was {0} instead of {1} failed:\r\n{2}",
                       response.Status,
                       status,
                       (response.HasDocument
         ? string.Format("{0}: {1}", response.Status, response.ToDocument()["message"].AsText)
         : response.Status.ToString())));
 }
コード例 #10
0
        private static XDoc GetDefaultErrorResponse(DreamStatus status, string title, string message)
        {
            XDoc         result  = new XDoc("error");
            DreamContext context = DreamContext.CurrentOrNull;

            if ((context != null) && (context.Env.Self != null))
            {
                result.WithXslTransform(context.AsPublicUri(context.Env.Self).At("resources", "error.xslt").Path);
            }
            result.Elem("status", (int)status).Elem("title", title).Elem("message", message);
            if (context != null)
            {
                result.Elem("uri", context.Uri);
            }
            return(result);
        }
コード例 #11
0
ファイル: DreamServiceTestUtil.cs プロジェクト: sdether/DReAM
 /// <summary>
 /// Assert that the status of the message is equal to an expected value.
 /// </summary>
 /// <param name="response">Response message.</param>
 /// <param name="status">Status to assert.</param>
 /// <param name="failureMessage">Failure message.</param>
 public static void AssertStatus(this DreamMessage response, DreamStatus status, string failureMessage)
 {
     if(response.Status == status) {
         return;
     }
     if(!string.IsNullOrEmpty(failureMessage)) {
         failureMessage = failureMessage + "\r\n";
     }
     Assert.Fail(
         string.Format("{0}Request status was {1} instead of {2}:\r\n{3}",
         failureMessage,
         response.Status,
         status,
         (response.HasDocument
         ? string.Format("{0}: {1}", response.Status, response.ToDocument()["message"].AsText)
         : response.Status.ToString())));
 }
コード例 #12
0
ファイル: DreamServiceTestUtil.cs プロジェクト: heran/DReAM
 /// <summary>
 /// Assert that the status of the message is equal to an expected value.
 /// </summary>
 /// <param name="response">Response message.</param>
 /// <param name="status">Status to assert.</param>
 /// <param name="failureMessage">Failure message.</param>
 public static void AssertStatus(this DreamMessage response, DreamStatus status, string failureMessage)
 {
     if (response.Status == status)
     {
         return;
     }
     if (!string.IsNullOrEmpty(failureMessage))
     {
         failureMessage = failureMessage + "\r\n";
     }
     Assert.Fail(
         string.Format("{0}Request status was {1} instead of {2}:\r\n{3}",
                       failureMessage,
                       response.Status,
                       status,
                       (response.HasDocument
         ? string.Format("{0}: {1}", response.Status, response.ToDocument()["message"].AsText)
         : response.Status.ToString())));
 }
コード例 #13
0
        private static XDoc GetFeatureOverview(XDoc feature)
        {
            // generate a document containing the overview information for a feature
            XDoc overviewDoc = new XDoc("html");

            overviewDoc.Start("h2").Value("Overview").End();
            overviewDoc.Add(GetWarning());
            overviewDoc.Start("p").Start("strong").Value(feature["access"].Contents + ".  ").End().Value(feature["description"].Contents).End();
            XDoc uriParams   = new XDoc("uriParams");
            XDoc queryParams = new XDoc("queryParams");

            foreach (XDoc param in feature["param"])
            {
                string paramName = param["name"].Contents;
                if (paramName.StartsWith("{"))
                {
                    if (feature["pattern"].Contents.Contains(paramName))
                    {
                        param["name"].ReplaceValue(paramName.Trim(new char[] { '{', '}' }));
                        uriParams.Add(param);
                    }
                }
                else
                {
                    queryParams.Add(param);
                }
            }
            overviewDoc.Start("h5").Value("Uri Parameters").End();
            overviewDoc.Add(GetTable(new string[] { "Name", "Type", "Description" }, uriParams["param"]));
            overviewDoc.Start("h5").Value("Query Parameters").End();
            overviewDoc.Add(GetTable(new string[] { "Name", "Type", "Description" }, queryParams["param"]));
            overviewDoc.Start("h5").Value("Return Codes").End();
            XDoc statusesDoc = new XDoc("statuses");

            foreach (XDoc statusDoc in feature["status"])
            {
                DreamStatus status = (DreamStatus)statusDoc["@value"].AsInt;
                statusesDoc.Start("status").Elem("name", status.ToString()).Elem("value", (int)status).Elem("description", statusDoc.Contents).End();
            }
            overviewDoc.Add(GetTable(new string[] { "Name", "Value", "Description" }, statusesDoc["status"]));
            return(overviewDoc);
        }
コード例 #14
0
        /// <summary>
        /// Create a new message.
        /// </summary>
        /// <param name="status">Http status.</param>
        /// <param name="headers">Header collection.</param>
        /// <param name="contentType">Content Mime-Type.</param>
        /// <param name="doc">Message body.</param>
        public DreamMessage(DreamStatus status, DreamHeaders headers, MimeType contentType, XDoc doc)
        {
            if (doc == null)
            {
                throw new ArgumentNullException("doc");
            }
            this.Status  = status;
            this.Headers = new DreamHeaders(headers);

            // check if document is empty
            if (doc.IsEmpty)
            {
                // we store empty XML documents as text content; it causes less confusion for browsers
                this.Headers.ContentType   = MimeType.TEXT;
                this.Headers.ContentLength = 0L;
                _doc   = doc;
                _bytes = new byte[0];
            }
            else
            {
                this.Headers.ContentType = contentType ?? MimeType.XML;
                _doc = doc.Clone();
            }
        }
コード例 #15
0
ファイル: DreamFeatureTests.cs プロジェクト: aaronmars/DReAM
 public DreamMessage SyncQueryargsEnumPathArgNoAttr(
     DreamStatus x
     )
 {
     return Response(new XDoc("r").Elem("x", x));
 }
コード例 #16
0
ファイル: dreammessage.cs プロジェクト: bjorg/DReAM
        /// <summary>
        /// Create a new message.
        /// </summary>
        /// <param name="status">Http status.</param>
        /// <param name="headers">Header collection.</param>
        /// <param name="contentType">Content Mime-Type.</param>
        /// <param name="bytes">Message body.</param>
        public DreamMessage(DreamStatus status, DreamHeaders headers, MimeType contentType, byte[] bytes) {
            if(bytes == null) {
                throw new ArgumentNullException("bytes");
            }
            this.Status = status;
            this.Headers = new DreamHeaders(headers);
            this.Headers.ContentLength = bytes.LongLength;
            this.Headers.ContentType = contentType ?? MimeType.DefaultMimeType;

            // set bytes
            _bytes = bytes;
        }
コード例 #17
0
ファイル: dreammessage.cs プロジェクト: bjorg/DReAM
 /// <summary>
 /// Create a new message.
 /// </summary>
 /// <param name="status">Http status.</param>
 /// <param name="headers">Header collection.</param>
 /// <param name="contentType">Content Mime-Type.</param>
 /// <param name="text">Message body.</param>
 public DreamMessage(DreamStatus status, DreamHeaders headers, MimeType contentType, string text)
     : this(status, headers, contentType, contentType.CharSet.GetBytes(text)) { }
コード例 #18
0
ファイル: dreammessage.cs プロジェクト: bjorg/DReAM
 /// <summary>
 /// Create a new message.
 /// </summary>
 /// <param name="status">Http status.</param>
 /// <param name="headers">Header collection.</param>
 /// <param name="doc">Message body.</param>
 public DreamMessage(DreamStatus status, DreamHeaders headers, XDoc doc) : this(status, headers, MimeType.XML, doc) { }
コード例 #19
0
ファイル: dreammessage.cs プロジェクト: bjorg/DReAM
        /// <summary>
        /// Create a new message.
        /// </summary>
        /// <param name="status">Http status.</param>
        /// <param name="headers">Header collection.</param>
        /// <param name="contentType">Content Mime-Type</param>
        /// <param name="contentLength">Content byte langth</param>
        /// <param name="stream">Stream to uas as the source for the message's content.</param>
        public DreamMessage(DreamStatus status, DreamHeaders headers, MimeType contentType, long contentLength, Stream stream) {
            this.Status = status;
            this.Headers = new DreamHeaders(headers);
            if(contentLength != -1) {
                this.Headers.ContentLength = contentLength;
            }
            this.Headers.ContentType = contentType ?? MimeType.DefaultMimeType;

            // set stream
            _stream = stream ?? Stream.Null;
            _streamOpen = !_stream.IsStreamMemorized();
        }
コード例 #20
0
ファイル: attributes.cs プロジェクト: maximmass/DReAM
 //--- Constructors ---
 /// <summary>
 /// Create new attribute.
 /// </summary>
 /// <param name="status">Status message for Feature.</param>
 /// <param name="description">Description of scenario under which Status is returned.</param>
 public DreamFeatureStatusAttribute(DreamStatus status, string description)
 {
     _status = status;
     _description = description;
 }
コード例 #21
0
 public DreamMessage SyncEnumPathArg(
     [Path] DreamStatus x
     )
 {
     return(Response(new XDoc("r").Elem("x", x)));
 }
コード例 #22
0
 /// <summary>
 /// Create a new message.
 /// </summary>
 /// <param name="status">Http status.</param>
 /// <param name="headers">Header collection.</param>
 /// <param name="contentType">Content Mime-Type.</param>
 /// <param name="text">Message body.</param>
 public DreamMessage(DreamStatus status, DreamHeaders headers, MimeType contentType, string text)
     : this(status, headers, contentType, contentType.CharSet.GetBytes(text))
 {
 }
コード例 #23
0
ファイル: dreammessage.cs プロジェクト: bjorg/DReAM
 private static XDoc GetDefaultErrorResponse(DreamStatus status, string title, string message) {
     XDoc result = new XDoc("error");
     DreamContext context = DreamContext.CurrentOrNull;
     if((context != null) && (context.Env.Self != null)) {
         result.WithXslTransform(context.AsPublicUri(context.Env.Self).At("resources", "error.xslt").Path);
     }
     result.Elem("status", (int)status).Elem("title", title).Elem("message", message);
     if(context != null) {
         result.Elem("uri", context.Uri);
     }
     return result;
 }
コード例 #24
0
        //--- Constructors ---

        /// <summary>
        /// Create new attribute.
        /// </summary>
        /// <param name="status">Status message for Feature.</param>
        /// <param name="description">Description of scenario under which Status is returned.</param>
        public DreamFeatureStatusAttribute(DreamStatus status, string description)
        {
            _status      = status;
            _description = description;
        }
コード例 #25
0
 public void RequestLog_Insert(XUri requestUri, string requestVerb, string requestHostHeader, string origin, string serviceHost, string serviceFeature, DreamStatus responseStatus, string username, uint executionTime, string response) {
     _next.RequestLog_Insert(requestUri, requestVerb, requestHostHeader, origin, serviceHost, serviceFeature, responseStatus, username, executionTime, response);
 }
コード例 #26
0
 /// <summary>
 /// Create a new message.
 /// </summary>
 /// <param name="status">Http status.</param>
 /// <param name="headers">Header collection.</param>
 /// <param name="doc">Message body.</param>
 public DreamMessage(DreamStatus status, DreamHeaders headers, XDoc doc) : this(status, headers, MimeType.XML, doc)
 {
 }
コード例 #27
0
ファイル: DreamServiceTestUtil.cs プロジェクト: heran/DReAM
 /// <summary>
 /// Assert that the status of the message is equal to an expected value.
 /// </summary>
 /// <param name="response">Response message.</param>
 /// <param name="status">Status to assert.</param>
 public static void AssertStatus(this DreamMessage response, DreamStatus status)
 {
     AssertStatus(response, status, null);
 }
コード例 #28
0
        //--- Class Methods ---
        public void RequestLog_Insert(XUri requestUri, string requestVerb, string requestHostHeader, string origin, string serviceHost, string serviceFeature, DreamStatus responseStatus, string username, uint executionTime, string response)
        {
            string host = requestUri.HostPort;

            if (!host.Contains(":"))
            {
                host = host + ":80";
            }

            //Schema for request log in "trunk/product/deki/web/maintenance/apirequestlog.sql"
            Catalog.NewQuery(@" /* RequestLog_Insert */
insert delayed into requestlog (
    `rl_requesthost`, `rl_requesthostheader`, `rl_requestpath`, `rl_requestparams`, `rl_requestverb`, 
    `rl_dekiuser`, `rl_origin`, `rl_servicehost`, `rl_servicefeature`, `rl_responsestatus`, `rl_executiontime`, 
    `rl_response`
 ) values (
    ?REQUESTHOST, ?REQUESTHOSTHEADER, ?REQUESTPATH, ?REQUESTPARAMS, ?REQUESTVERB, 
    ?DEKIUSER, ?ORIGIN, ?SERVICEHOST, ?SERVICEFEATURE, ?RESPONSESTATUS, ?EXECUTIONTIME, 
    ?RESPONSE
 );")
            .With("REQUESTHOST", host)
            .With("REQUESTHOSTHEADER", requestHostHeader)
            .With("REQUESTPATH", requestUri.Path)
            .With("REQUESTPARAMS", requestUri.Query)
            .With("REQUESTVERB", requestVerb)
            .With("DEKIUSER", username)
            .With("ORIGIN", origin == null ? String.Empty : origin.ToLowerInvariant())
            .With("SERVICEHOST", serviceHost)
            .With("SERVICEFEATURE", serviceFeature)
            .With("RESPONSESTATUS", (int)responseStatus)
            .With("EXECUTIONTIME", executionTime)
            .With("RESPONSE", response)
            .Execute();
        }
コード例 #29
0
ファイル: DreamFeatureTests.cs プロジェクト: aaronmars/DReAM
 public DreamMessage SyncQueryargsMixedPathArgNoAttr(
     int x,
     bool y,
     DreamStatus z
     )
 {
     return Response(new XDoc("r").Elem("x", x).Elem("y", y).Elem("z", z));
 }
コード例 #30
0
ファイル: dreammessage.cs プロジェクト: bjorg/DReAM
        //--- Constructors ---

        /// <summary>
        /// Create a new message.
        /// </summary>
        /// <param name="status">Http status.</param>
        /// <param name="headers">Header collection.</param>
        public DreamMessage(DreamStatus status, DreamHeaders headers) {
            this.Status = status;
            this.Headers = new DreamHeaders(headers);
            _bytes = new byte[0];
            _noContent = true;
        }
コード例 #31
0
ファイル: DreamFeatureTests.cs プロジェクト: aaronmars/DReAM
 public DreamMessage SyncQueryargsNullableEnumPathArgNoAttr(
     DreamStatus? x
     )
 {
     var v = x.HasValue ? x.ToString() : "null";
     return Response(new XDoc("r").Elem("x", v));
 }
コード例 #32
0
ファイル: dreammessage.cs プロジェクト: bjorg/DReAM
        /// <summary>
        /// Create a new message.
        /// </summary>
        /// <param name="status">Http status.</param>
        /// <param name="headers">Header collection.</param>
        /// <param name="contentType">Content Mime-Type.</param>
        /// <param name="doc">Message body.</param>
        public DreamMessage(DreamStatus status, DreamHeaders headers, MimeType contentType, XDoc doc) {
            if(doc == null) {
                throw new ArgumentNullException("doc");
            }
            this.Status = status;
            this.Headers = new DreamHeaders(headers);

            // check if document is empty
            if(doc.IsEmpty) {

                // we store empty XML documents as text content; it causes less confusion for browsers
                this.Headers.ContentType = MimeType.TEXT;
                this.Headers.ContentLength = 0L;
                _doc = doc;
                _bytes = new byte[0];
            } else {
                this.Headers.ContentType = contentType ?? MimeType.XML;
                _doc = doc.Clone();
            }
        }
コード例 #33
0
ファイル: DreamServiceTestUtil.cs プロジェクト: sdether/DReAM
 /// <summary>
 /// Assert that the status of the message is equal to an expected value.
 /// </summary>
 /// <param name="response">Response message.</param>
 /// <param name="status">Status to assert.</param>
 public static void AssertStatus(this DreamMessage response, DreamStatus status)
 {
     AssertStatus(response, status, null);
 }
コード例 #34
0
ファイル: DreamFeatureTests.cs プロジェクト: yonglehou/DReAM
 public DreamMessage SyncQueryargsEnumPathArgNoAttr(
     DreamStatus x
     )
 {
     return(Response(new XDoc("r").Elem("x", x)));
 }