diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Grid/AssetInventoryServer/Extensions/BrowseFrontend.cs | 250 |
1 files changed, 125 insertions, 125 deletions
diff --git a/OpenSim/Grid/AssetInventoryServer/Extensions/BrowseFrontend.cs b/OpenSim/Grid/AssetInventoryServer/Extensions/BrowseFrontend.cs index ba4c4e2..8c70144 100644 --- a/OpenSim/Grid/AssetInventoryServer/Extensions/BrowseFrontend.cs +++ b/OpenSim/Grid/AssetInventoryServer/Extensions/BrowseFrontend.cs | |||
@@ -1,125 +1,125 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2008 Intel Corporation | 2 | * Copyright (c) 2008 Intel Corporation |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * Redistribution and use in source and binary forms, with or without | 4 | * Redistribution and use in source and binary forms, with or without |
5 | * modification, are permitted provided that the following conditions | 5 | * modification, are permitted provided that the following conditions |
6 | * are met: | 6 | * are met: |
7 | * | 7 | * |
8 | * -- Redistributions of source code must retain the above copyright | 8 | * -- Redistributions of source code must retain the above copyright |
9 | * notice, this list of conditions and the following disclaimer. | 9 | * notice, this list of conditions and the following disclaimer. |
10 | * -- Redistributions in binary form must reproduce the above copyright | 10 | * -- Redistributions in binary form must reproduce the above copyright |
11 | * notice, this list of conditions and the following disclaimer in the | 11 | * notice, this list of conditions and the following disclaimer in the |
12 | * documentation and/or other materials provided with the distribution. | 12 | * documentation and/or other materials provided with the distribution. |
13 | * -- Neither the name of the Intel Corporation nor the names of its | 13 | * -- Neither the name of the Intel Corporation nor the names of its |
14 | * contributors may be used to endorse or promote products derived from | 14 | * contributors may be used to endorse or promote products derived from |
15 | * this software without specific prior written permission. | 15 | * this software without specific prior written permission. |
16 | * | 16 | * |
17 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | 17 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
18 | * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | 18 | * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
19 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A | 19 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A |
20 | * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL OR ITS | 20 | * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL OR ITS |
21 | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | 21 | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
22 | * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | 22 | * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
23 | * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | 23 | * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR |
24 | * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | 24 | * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF |
25 | * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | 25 | * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING |
26 | * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | 26 | * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
27 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 27 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
28 | */ | 28 | */ |
29 | 29 | ||
30 | using System; | 30 | using System; |
31 | using System.Collections.Generic; | 31 | using System.Collections.Generic; |
32 | using System.Collections.Specialized; | 32 | using System.Collections.Specialized; |
33 | using System.Net; | 33 | using System.Net; |
34 | using System.Text; | 34 | using System.Text; |
35 | using System.Web; | 35 | using System.Web; |
36 | using ExtensionLoader; | 36 | using ExtensionLoader; |
37 | using OpenMetaverse; | 37 | using OpenMetaverse; |
38 | using HttpServer; | 38 | using HttpServer; |
39 | 39 | ||
40 | namespace OpenSim.Grid.AssetInventoryServer.Extensions | 40 | namespace OpenSim.Grid.AssetInventoryServer.Extensions |
41 | { | 41 | { |
42 | public class BrowseFrontend : IExtension<AssetInventoryServer> | 42 | public class BrowseFrontend : IExtension<AssetInventoryServer> |
43 | { | 43 | { |
44 | AssetInventoryServer server; | 44 | AssetInventoryServer server; |
45 | 45 | ||
46 | public BrowseFrontend() | 46 | public BrowseFrontend() |
47 | { | 47 | { |
48 | } | 48 | } |
49 | 49 | ||
50 | public void Start(AssetInventoryServer server) | 50 | public void Start(AssetInventoryServer server) |
51 | { | 51 | { |
52 | this.server = server; | 52 | this.server = server; |
53 | 53 | ||
54 | // Request for / or /?... | 54 | // Request for / or /?... |
55 | server.HttpServer.AddHandler("get", null, @"(^/$)|(^/\?.*)", BrowseRequestHandler); | 55 | server.HttpServer.AddHandler("get", null, @"(^/$)|(^/\?.*)", BrowseRequestHandler); |
56 | } | 56 | } |
57 | 57 | ||
58 | public void Stop() | 58 | public void Stop() |
59 | { | 59 | { |
60 | } | 60 | } |
61 | 61 | ||
62 | bool BrowseRequestHandler(IHttpClientContext client, IHttpRequest request, IHttpResponse response) | 62 | bool BrowseRequestHandler(IHttpClientContext client, IHttpRequest request, IHttpResponse response) |
63 | { | 63 | { |
64 | const int ASSETS_PER_PAGE = 25; | 64 | const int ASSETS_PER_PAGE = 25; |
65 | const string HEADER = "<html><head><title>Asset Server</title></head><body>"; | 65 | const string HEADER = "<html><head><title>Asset Server</title></head><body>"; |
66 | const string TABLE_HEADER = | 66 | const string TABLE_HEADER = |
67 | "<table><tr><th>Name</th><th>Description</th><th>Type</th><th>ID</th><th>Temporary</th><th>SHA-1</th></tr>"; | 67 | "<table><tr><th>Name</th><th>Description</th><th>Type</th><th>ID</th><th>Temporary</th><th>SHA-1</th></tr>"; |
68 | const string TABLE_FOOTER = "</table>"; | 68 | const string TABLE_FOOTER = "</table>"; |
69 | const string FOOTER = "</body></html>"; | 69 | const string FOOTER = "</body></html>"; |
70 | 70 | ||
71 | UUID authToken = Utils.GetAuthToken(request); | 71 | UUID authToken = Utils.GetAuthToken(request); |
72 | 72 | ||
73 | StringBuilder html = new StringBuilder(); | 73 | StringBuilder html = new StringBuilder(); |
74 | int start = 0; | 74 | int start = 0; |
75 | uint page = 0; | 75 | uint page = 0; |
76 | 76 | ||
77 | if (!String.IsNullOrEmpty(request.Uri.Query)) | 77 | if (!String.IsNullOrEmpty(request.Uri.Query)) |
78 | { | 78 | { |
79 | NameValueCollection query = HttpUtility.ParseQueryString(request.Uri.Query); | 79 | NameValueCollection query = HttpUtility.ParseQueryString(request.Uri.Query); |
80 | if (!String.IsNullOrEmpty(query["page"]) && UInt32.TryParse(query["page"], out page)) | 80 | if (!String.IsNullOrEmpty(query["page"]) && UInt32.TryParse(query["page"], out page)) |
81 | start = (int)page * ASSETS_PER_PAGE; | 81 | start = (int)page * ASSETS_PER_PAGE; |
82 | } | 82 | } |
83 | 83 | ||
84 | html.AppendLine(HEADER); | 84 | html.AppendLine(HEADER); |
85 | 85 | ||
86 | html.AppendLine("<p>"); | 86 | html.AppendLine("<p>"); |
87 | if (page > 0) | 87 | if (page > 0) |
88 | html.AppendFormat("<a href=\"{0}?page={1}\">< Previous Page</a> | ", request.Uri.AbsolutePath, page - 1); | 88 | html.AppendFormat("<a href=\"{0}?page={1}\">< Previous Page</a> | ", request.Uri.AbsolutePath, page - 1); |
89 | html.AppendFormat("<a href=\"{0}?page={1}\">Next Page ></a>", request.Uri.AbsolutePath, page + 1); | 89 | html.AppendFormat("<a href=\"{0}?page={1}\">Next Page ></a>", request.Uri.AbsolutePath, page + 1); |
90 | html.AppendLine("</p>"); | 90 | html.AppendLine("</p>"); |
91 | 91 | ||
92 | html.AppendLine(TABLE_HEADER); | 92 | html.AppendLine(TABLE_HEADER); |
93 | 93 | ||
94 | server.StorageProvider.ForEach( | 94 | server.StorageProvider.ForEach( |
95 | delegate(Metadata data) | 95 | delegate(Metadata data) |
96 | { | 96 | { |
97 | if (server.AuthorizationProvider.IsMetadataAuthorized(authToken, data.ID)) | 97 | if (server.AuthorizationProvider.IsMetadataAuthorized(authToken, data.ID)) |
98 | { | 98 | { |
99 | html.AppendLine(String.Format( | 99 | html.AppendLine(String.Format( |
100 | "<tr><td>{0}</td><td>{1}</td><td>{2}</td><td>{3}</td><td>{4}</td><td>{5}</td></tr>", | 100 | "<tr><td>{0}</td><td>{1}</td><td>{2}</td><td>{3}</td><td>{4}</td><td>{5}</td></tr>", |
101 | data.Name, data.Description, data.ContentType, data.ID, data.Temporary, | 101 | data.Name, data.Description, data.ContentType, data.ID, data.Temporary, |
102 | BitConverter.ToString(data.SHA1).Replace("-", String.Empty))); | 102 | BitConverter.ToString(data.SHA1).Replace("-", String.Empty))); |
103 | } | 103 | } |
104 | else | 104 | else |
105 | { | 105 | { |
106 | html.AppendLine(String.Format( | 106 | html.AppendLine(String.Format( |
107 | "<tr><td>[Protected Asset]</td><td> </td><td> </td><td>{0}</td><td>{1}</td><td> </td></tr>", | 107 | "<tr><td>[Protected Asset]</td><td> </td><td> </td><td>{0}</td><td>{1}</td><td> </td></tr>", |
108 | data.ID, data.Temporary)); | 108 | data.ID, data.Temporary)); |
109 | } | 109 | } |
110 | }, start, ASSETS_PER_PAGE | 110 | }, start, ASSETS_PER_PAGE |
111 | ); | 111 | ); |
112 | 112 | ||
113 | html.AppendLine(TABLE_FOOTER); | 113 | html.AppendLine(TABLE_FOOTER); |
114 | 114 | ||
115 | html.AppendLine(FOOTER); | 115 | html.AppendLine(FOOTER); |
116 | 116 | ||
117 | byte[] responseData = System.Text.Encoding.UTF8.GetBytes(html.ToString()); | 117 | byte[] responseData = System.Text.Encoding.UTF8.GetBytes(html.ToString()); |
118 | 118 | ||
119 | response.Status = HttpStatusCode.OK; | 119 | response.Status = HttpStatusCode.OK; |
120 | response.Body.Write(responseData, 0, responseData.Length); | 120 | response.Body.Write(responseData, 0, responseData.Length); |
121 | response.Body.Flush(); | 121 | response.Body.Flush(); |
122 | return true; | 122 | return true; |
123 | } | 123 | } |
124 | } | 124 | } |
125 | } | 125 | } |