Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/bin/update-hashes.php
blob: 5d05833b994639cce94a575d8ff7e823da82bf97 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
<?php
/* ***** BEGIN LICENSE BLOCK *****
 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
 *
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * The Original Code is addons.mozilla.org site.
 *
 * The Initial Developer of the Original Code is
 * The Mozilla Foundation.
 * Portions created by the Initial Developer are Copyright (C) 2006
 * the Initial Developer. All Rights Reserved.
 *
 * Contributor(s):
 *   Mike Morgan <morgamic@mozilla.com>
 *   Justin Scott <fligtar@gmail.com>
 *   Reed Loden <reed@reedloden.com>
 *
 *
 *
 * Alternatively, the contents of this file may be used under the terms of
 * either the GNU General Public License Version 2 or later (the "GPL"), or
 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
 * in which case the provisions of the GPL or the LGPL are applicable instead
 * of those above. If you wish to allow use of your version of this file only
 * under the terms of either the GPL or the LGPL, and not to allow others to
 * use your version of this file under the terms of the MPL, indicate your
 * decision by deleting the provisions above and replace them with the notice
 * and other provisions required by the GPL or the LGPL. If you do not delete
 * the provisions above, a recipient may use your version of this file under
 * the terms of any one of the MPL, the GPL or the LGPL.
 *
 * ***** END LICENSE BLOCK ***** */

/**
 * The purpose of this script is to retro-actively update existing add-ons
 * with valid hashes.
 *
 * We may not necessarily use this, but it was written just in case we need
 * to run the update in the future.
 *
 * This script should not ever be accessed over HTTP, and instead run via cron.
 * Only sysadmins should be responsible for operating this script.
 *
 * @package amo
 * @subpackage bin
 */


// Before doing anything, test to see if we are calling this from the command
// line.  If this is being called from the web, HTTP environment variables will
// be automatically set by Apache.  If these are found, exit immediately.
if (isset($_SERVER['HTTP_HOST'])) {
    exit;
}

require_once('database.class.php');

// New database class
$db = new Database();

$versions = array();
$hashes = array();

$fileQry_sql = "SELECT
                   addons.id as addon_id,
                   translations.localized_string as name,
                   versions.version,
                   files.id as file_id,
                   files.filename,
                   files.hash,
                   files.size
                FROM files
                INNER JOIN versions ON files.version_id=versions.id
                INNER JOIN addons ON versions.addon_id=addons.id
                INNER JOIN translations ON addons.name=translations.id
                WHERE
                   translations.locale='en-US'";

$fileQry_result = $db->query($fileQry_sql);

while ($fileInfo = mysql_fetch_array($fileQry_result)) {

    $file = REPO_PATH."/{$fileInfo['addon_id']}/{$fileInfo['filename']}";

    // If the file exists, get its sum and update its record.
    if (file_exists($file) && is_file($file)) {
        $hash = hash_file("sha256", $file);
        $size = round((filesize($file) / 1024), 0); //in KB

        echo "{$fileInfo['name']} {$fileInfo['version']} (file {$fileInfo['file_id']}): ";
        if ('sha256:'.$hash != $fileInfo['hash'] || $size != $fileInfo['size']) {
            $hash_update_sql = "UPDATE files SET hash='sha256:{$hash}', size='{$size}' WHERE id={$fileInfo['file_id']}";
            $hash_update_result = $db->query($hash_update_sql, true);

            if ('sha256:'.$hash != $fileInfo['hash']) {
                echo "HASH - new: sha256:{$hash}; old: {$fileInfo['hash']}";
            }

            if ($size != $fileInfo['size']) {
                echo "SIZE - new: {$size} KB; old: {$fileInfo['size']} KB";
            }
            echo "\n";
        }
        else {
            echo "No update needed.\n";
        }
    }
}

// Close our db connection
$db->close();

exit;
?>