Collection of themes/skins for the Fossil SCM

⌈⌋ ⎇ branch:  Fossil Skins Extra


Hex Artifact Content

Artifact bc96deadfea1f507ffc15ea961a5e685f347287c:

  • Executable file extroot/cat — part of check-in [9adf5f84b6] at 2021-10-12 10:00:17 on branch trunk — extroot version of file dump handler; here just doing a redirect though (user: mario size: 1450)

0000: 23 21 2f 75 73 72 2f 62 69 6e 2f 70 68 70 2d 63  #!/usr/bin/php-c
0010: 67 69 20 2d 64 63 67 69 2e 66 6f 72 63 65 5f 72  gi -dcgi.force_r
0020: 65 64 69 72 65 63 74 3d 30 0a 3c 3f 70 68 70 0a  edirect=0.<?php.
0030: 23 20 65 6e 63 6f 64 69 6e 67 3a 20 75 74 66 2d  # encoding: utf-
0040: 38 0a 23 20 61 70 69 3a 20 63 67 69 0a 23 20 74  8.# api: cgi.# t
0050: 79 70 65 3a 20 63 6f 6e 66 69 67 0a 23 20 63 61  ype: config.# ca
0060: 74 65 67 6f 72 79 3a 20 61 64 6d 69 6e 0a 23 20  tegory: admin.# 
0070: 74 69 74 6c 65 3a 20 43 61 74 20 66 69 6c 65 0a  title: Cat file.
0080: 23 20 64 65 73 63 72 69 70 74 69 6f 6e 3a 20 4c  # description: L
0090: 6f 6f 6b 20 75 70 20 66 69 6c 65 6e 61 6d 65 20  ook up filename 
00a0: 61 6e 64 20 72 65 64 69 72 65 63 74 20 74 6f 20  and redirect to 
00b0: 2f 72 61 77 2f 55 55 49 44 0a 23 20 76 65 72 73  /raw/UUID.# vers
00c0: 69 6f 6e 3a 20 30 2e 31 0a 23 20 73 74 61 74 65  ion: 0.1.# state
00d0: 3a 20 62 65 74 61 0a 23 20 64 65 70 65 6e 64 73  : beta.# depends
00e0: 3a 20 70 68 70 3a 73 71 6c 69 74 65 0a 23 20 63  : php:sqlite.# c
00f0: 6f 6e 66 69 67 3a 20 2d 0a 23 0a 23 20 44 6f 65  onfig: -.#.# Doe
0100: 73 20 61 6e 20 69 6e 64 69 72 65 63 74 20 6c 6f  s an indirect lo
0110: 6f 6b 75 70 20 62 79 20 66 69 6c 65 6e 61 6d 65  okup by filename
0120: 2c 0a 23 20 74 68 65 6e 20 72 65 64 69 72 65 63  ,.# then redirec
0130: 74 73 20 74 6f 20 74 68 65 20 2f 72 61 77 2f 55  ts to the /raw/U
0140: 55 49 44 20 64 6f 77 6e 6c 6f 61 64 2e 0a 23 0a  UID download..#.
0150: 23 20 65 2e 67 2e 0a 23 20 20 20 20 68 74 74 70  # e.g..#    http
0160: 3a 2f 2f 66 6f 73 73 69 6c 2f 65 78 74 2f 72 61  ://fossil/ext/ra
0170: 77 2f 52 45 41 44 4d 45 2e 6d 64 0a 23 0a 23 20  w/README.md.#.# 
0180: 57 69 6c 6c 20 61 6c 77 61 79 73 20 6c 6f 6f 6b  Will always look
0190: 75 70 20 74 68 65 20 74 72 75 6e 6b 2f 74 69 70  up the trunk/tip
01a0: 20 75 75 69 64 2e 0a 23 0a 0a 0a 23 2d 2d 20 69   uuid..#...#-- i
01b0: 6e 69 74 0a 24 66 6e 20 3d 20 6c 74 72 69 6d 28  nit.$fn = ltrim(
01c0: 24 5f 53 45 52 56 45 52 5b 22 50 41 54 48 5f 49  $_SERVER["PATH_I
01d0: 4e 46 4f 22 5d 2c 20 22 2f 22 29 3b 0a 23 70 72  NFO"], "/");.#pr
01e0: 69 6e 74 5f 72 28 24 5f 53 45 52 56 45 52 29 3b  int_r($_SERVER);
01f0: 0a 0a 23 2d 2d 20 64 61 74 61 62 61 73 65 20 28  ..#-- database (
0200: 3d 3d 20 66 6f 73 73 69 6c 20 72 65 70 6f 29 0a  == fossil repo).
0210: 66 75 6e 63 74 69 6f 6e 20 64 62 28 24 73 71 6c  function db($sql
0220: 3d 22 22 2c 20 24 70 61 72 61 6d 73 3d 5b 5d 29  ="", $params=[])
0230: 20 7b 0a 20 20 20 20 67 6c 6f 62 61 6c 20 24 64   {.    global $d
0240: 62 3b 0a 20 20 20 20 69 66 20 28 65 6d 70 74 79  b;.    if (empty
0250: 28 24 64 62 29 29 20 7b 0a 20 20 20 20 20 20 20  ($db)) {.       
0260: 20 24 64 62 20 3d 20 6e 65 77 20 50 44 4f 28 22   $db = new PDO("
0270: 73 71 6c 69 74 65 3a 3a 6d 65 6d 6f 72 79 3a 22  sqlite::memory:"
0280: 29 3b 0a 20 20 20 20 20 20 20 20 24 64 62 2d 3e  );.        $db->
0290: 73 65 74 41 74 74 72 69 62 75 74 65 28 50 44 4f  setAttribute(PDO
02a0: 3a 3a 41 54 54 52 5f 45 52 52 4d 4f 44 45 2c 20  ::ATTR_ERRMODE, 
02b0: 50 44 4f 3a 3a 45 52 52 4d 4f 44 45 5f 57 41 52  PDO::ERRMODE_WAR
02c0: 4e 49 4e 47 29 3b 0a 20 20 20 20 20 20 20 20 24  NING);.        $
02d0: 64 62 2d 3e 71 75 65 72 79 28 22 41 54 54 41 43  db->query("ATTAC
02e0: 48 20 44 41 54 41 42 41 53 45 20 27 24 5f 53 45  H DATABASE '$_SE
02f0: 52 56 45 52 5b 46 4f 53 53 49 4c 5f 52 45 50 4f  RVER[FOSSIL_REPO
0300: 53 49 54 4f 52 59 5d 27 20 41 53 20 27 72 65 70  SITORY]' AS 'rep
0310: 6f 27 22 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  o'");.    }.    
0320: 69 66 20 28 24 70 61 72 61 6d 73 29 20 7b 0a 20  if ($params) {. 
0330: 20 20 20 20 20 20 20 24 73 74 6d 74 20 3d 20 24         $stmt = $
0340: 64 62 2d 3e 70 72 65 70 61 72 65 28 24 73 71 6c  db->prepare($sql
0350: 29 3b 0a 20 20 20 20 20 20 20 20 24 73 74 6d 74  );.        $stmt
0360: 2d 3e 65 78 65 63 75 74 65 28 24 70 61 72 61 6d  ->execute($param
0370: 73 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75  s);.        retu
0380: 72 6e 20 24 73 74 6d 74 2d 3e 66 65 74 63 68 41  rn $stmt->fetchA
0390: 6c 6c 28 50 44 4f 3a 3a 46 45 54 43 48 5f 41 53  ll(PDO::FETCH_AS
03a0: 53 4f 43 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  SOC);.    }.    
03b0: 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 72  else {.        r
03c0: 65 74 75 72 6e 20 24 64 62 2d 3e 71 75 65 72 79  eturn $db->query
03d0: 28 24 73 71 6c 29 3b 0a 20 20 20 20 7d 0a 7d 0a  ($sql);.    }.}.
03e0: 0a 0a 23 2d 2d 20 66 69 6e 64 20 75 75 69 64 0a  ..#-- find uuid.
03f0: 69 66 20 28 65 6d 70 74 79 28 24 66 6e 29 29 20  if (empty($fn)) 
0400: 7b 0a 20 20 20 20 64 69 65 28 22 41 63 63 65 73  {.    die("Acces
0410: 73 20 61 73 20 2f 65 78 74 2f 63 61 74 2f 66 6e  s as /ext/cat/fn
0420: 2e 74 78 74 22 29 3b 0a 7d 0a 24 72 20 3d 20 64  .txt");.}.$r = d
0430: 62 28 0a 20 20 20 20 22 53 45 4c 45 43 54 20 75  b(.    "SELECT u
0440: 75 69 64 0a 20 20 20 20 20 46 52 4f 4d 20 62 6c  uid.     FROM bl
0450: 6f 62 20 4c 45 46 54 20 4a 4f 49 4e 20 6d 6c 69  ob LEFT JOIN mli
0460: 6e 6b 20 4f 4e 20 62 6c 6f 62 2e 72 69 64 3d 6d  nk ON blob.rid=m
0470: 6c 69 6e 6b 2e 66 69 64 0a 20 20 20 20 20 20 20  link.fid.       
0480: 20 20 20 20 20 20 20 20 4c 45 46 54 20 4a 4f 49          LEFT JOI
0490: 4e 20 66 69 6c 65 6e 61 6d 65 20 4f 4e 20 6d 6c  N filename ON ml
04a0: 69 6e 6b 2e 66 6e 69 64 3d 66 69 6c 65 6e 61 6d  ink.fnid=filenam
04b0: 65 2e 66 6e 69 64 0a 20 20 20 20 20 57 48 45 52  e.fnid.     WHER
04c0: 45 20 6e 61 6d 65 20 3d 20 3f 0a 20 20 20 20 20  E name = ?.     
04d0: 4f 52 44 45 52 20 42 59 20 72 69 64 20 44 45 53  ORDER BY rid DES
04e0: 43 20 4c 49 4d 49 54 20 31 22 2c 0a 20 20 20 20  C LIMIT 1",.    
04f0: 5b 24 66 6e 5d 0a 29 3b 0a 69 66 20 28 24 72 20  [$fn].);.if ($r 
0500: 61 6e 64 20 24 75 75 69 64 20 3d 20 24 72 5b 30  and $uuid = $r[0
0510: 5d 5b 22 75 75 69 64 22 5d 29 20 7b 0a 20 20 20  ]["uuid"]) {.   
0520: 20 24 66 6e 20 3d 20 62 61 73 65 6e 61 6d 65 28   $fn = basename(
0530: 24 66 6e 29 3b 0a 20 20 20 20 68 65 61 64 65 72  $fn);.    header
0540: 28 22 4c 6f 63 61 74 69 6f 6e 3a 20 24 5f 53 45  ("Location: $_SE
0550: 52 56 45 52 5b 46 4f 53 53 49 4c 5f 55 52 49 5d  RVER[FOSSIL_URI]
0560: 2f 72 61 77 2f 24 75 75 69 64 3f 61 74 3d 24 66  /raw/$uuid?at=$f
0570: 6e 22 29 3b 0a 7d 0a 65 6c 73 65 20 7b 0a 20 20  n");.}.else {.  
0580: 20 20 68 65 61 64 65 72 28 22 53 74 61 74 75 73    header("Status
0590: 3a 20 34 30 34 20 4e 6f 74 20 66 6f 75 6e 64 22  : 404 Not found"
05a0: 29 3b 0a 7d 0a 0a 20 20 20 20                    );.}..