1f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski<?php
2f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski# Copyright (C) 2010 The Android Open Source Project
3f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski#
4f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski# Licensed under the Apache License, Version 2.0 (the "License");
5f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski# you may not use this file except in compliance with the License.
6f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski# You may obtain a copy of the License at
7f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski#
8f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski# http://www.apache.org/licenses/LICENSE-2.0
9f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski#
10f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski# Unless required by applicable law or agreed to in writing, software
11f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski# distributed under the License is distributed on an "AS IS" BASIS,
12f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski# See the License for the specific language governing permissions and
14f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski# limitations under the License.
15f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski
16f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski###############################################################################
17f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski
18f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski# Show the source of the test.
19f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski#
20f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski# Usage:
21f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski#   view_source.php?src=PATH
22f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski#   where
23f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski#     PATH - relative path in the LayoutTests dir
24f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski
25f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski  # Global variables
26f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski  # The server document root is LayoutTests/http/tests. See run_apache2.py.
27f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski  $rootDir = realpath($_SERVER['DOCUMENT_ROOT'] . '..' . DIRECTORY_SEPARATOR . '..');
28f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski
29f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski  function getAbsolutePath($relPath) {
30f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski    global $rootDir;
31f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski    return $rootDir . DIRECTORY_SEPARATOR . $relPath;
32f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski  }
33f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski
34f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski  function main() {
35f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski    global $rootDir;
36f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski
37f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski    # Very primitive check if path tries to go above DOCUMENT_ROOT or is absolute
38f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski    if (strpos($_GET['src'], "..") !== False ||
39f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski        substr($_GET['src'], 0, 1) == DIRECTORY_SEPARATOR) {
40f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski      return;
41f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski    }
42f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski
43040564aa02a28de2f85453902fcde0325b911d9bSteve Block    # If we don't want realpath to append any prefixes we need to pass it an absolute path
44f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski    $src = realpath(getAbsolutePath($_GET['src']));
45f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski
46f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski    echo "<html><body>";
47f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski    # TODO: Add link following and syntax highlighting for html and js.
48040564aa02a28de2f85453902fcde0325b911d9bSteve Block    highlight_string(file_get_contents($src));
49f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski    echo "</body></html>";
50f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski  }
51f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski
52f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski  main();
53f5929f20b546de2c377c9ae2be2f3d0054f1b3e0Maksymilian Osowski?>
54