SPTUser.php
Go to the documentation of this file.
00001 <?PHP 00002 00003 # 00004 # FILE: SPT--SPTUser.php 00005 # 00006 # METHODS PROVIDED: 00007 # SPTUser() 00008 # - constructor 00009 # SomeMethod($SomeParameter, $AnotherParameter) 00010 # - short description of method 00011 # 00012 # AUTHOR: 00013 # 00014 # Part of the Scout Portal Toolkit 00015 # Copyright 2004 Internet Scout Project 00016 # http://scout.wisc.edu 00017 # 00018 00019 class SPTUser extends User { 00020 # ---- PUBLIC INTERFACE -------------------------------------------------- 00021 # ---- user interface preference mnemonics 00022 # color avoidance flags 00023 const UIPREF_AVOID_RED = 1; 00024 const UIPREF_AVOID_REDGREEN = 2; 00025 const UIPREF_AVOID_BLUEYELLOW = 4; 00026 const UIPREF_AVOID_GREENYELLOW = 8; 00027 const UIPREF_AVOID_ORANGE = 16; 00028 const UIPREF_AVOID_REDBLACK = 32; 00029 const UIPREF_AVOID_PURPLEGREY = 64; 00030 const UIPREF_AVOID_USEMAXMONOCHR = 128; 00031 00032 # content display options 00033 const UIPREF_CONTENTDENSITY_NOPREFERENCE = 0; 00034 const UIPREF_CONTENTDENSITY_DETAILED = 1; 00035 const UIPREF_CONTENTDENSITY_OVERVIEW = 2; 00036 00037 # content view options 00038 const UIPREF_CONTENTVIEW_NOPREFERENCE = 0; 00039 const UIPREF_CONTENTVIEW_TEXTINTENSIVE = 1; 00040 const UIPREF_CONTENTVIEW_IMAGEINTENSIVE = 2; 00041 00042 # audio description options 00043 const UIPREF_AUDIODESCRIPTION_NONE = 0; 00044 const UIPREF_AUDIODESCRIPTION_STANDARD = 1; 00045 const UIPREF_AUDIODESCRIPTION_EXPANDED = 2; 00046 00047 # caption type options 00048 const UIPREF_CAPTIONTYPE_NONE = 0; 00049 const UIPREF_CAPTIONTYPE_VERBATIM = 1; 00050 const UIPREF_CAPTIONTYPE_REDUCEDREADINGLEVEL = 2; 00051 00052 # object constructor 00053 function SPTUser($UserInfo = NULL) 00054 { 00055 global $Session; 00056 00057 # create database handle for parent and local use 00058 $DB = new SPTDatabase(); 00059 $this->DB = $DB; 00060 00061 # if no user info supplied 00062 if ($UserInfo == NULL) 00063 { 00064 # if session is available in global context 00065 if (isset($Session)) 00066 { 00067 # call parent constructor with global session 00068 $this->User($Session); 00069 } 00070 else 00071 { 00072 # call parent constructor with our own session 00073 $OurSession = new Session($this->DB); 00074 $this->User($OurSession); 00075 } 00076 } 00077 else 00078 { 00079 # call parent constructor with our DB handle 00080 $this->User($this->DB, $UserInfo); 00081 } 00082 00083 # if user is logged in 00084 if ($this->IsLoggedIn()) 00085 { 00086 # if user already has a UI preferences record in DB 00087 $DB->Query("SELECT * FROM UserUIPreferences WHERE UserId = '".$this->Id()."'"); 00088 if ($DB->NumRowsSelected()) 00089 { 00090 # load in UI preferences 00091 $this->UserUIPreferencesCache = $DB->FetchRow(); 00092 } 00093 else 00094 { 00095 # add UI preferences record to DB for user 00096 $DB->Query("INSERT INTO UserUIPreferences (UserId) VALUES (".$this->Id().")"); 00097 } 00098 } 00099 } 00100 00101 # user interface / accessibility preferences 00102 function PrefFontSize($NewValue = DB_NOVALUE) 00103 { return $this->UUPUpdateValue("FontSize", $NewValue); } 00104 function PrefFontTypeFace($NewValue = DB_NOVALUE) 00105 { return $this->UUPUpdateValue("FontTypeFace", $NewValue); } 00106 function PrefFontColor($NewValue = DB_NOVALUE) 00107 { return $this->UUPUpdateValue("FontColor", $NewValue); } 00108 function PrefBackgroundColor($NewValue = DB_NOVALUE) 00109 { return $this->UUPUpdateValue("BackgroundColor", $NewValue); } 00110 function PrefColorAvoidanceFlags($NewValue = DB_NOVALUE) 00111 { return $this->UUPUpdateValue("ColorAvoidanceFlags", $NewValue); } 00112 function PrefContentDensity($NewValue = DB_NOVALUE) 00113 { return $this->UUPUpdateValue("ContentDensity", $NewValue); } 00114 function PrefContentView($NewValue = DB_NOVALUE) 00115 { return $this->UUPUpdateValue("ContentView", $NewValue); } 00116 function PrefAudioDescriptionLevel($NewValue = DB_NOVALUE) 00117 { return $this->UUPUpdateValue("AudioDescriptionLevel", $NewValue); } 00118 function PrefAudioDescriptionLanguage($NewValue = DB_NOVALUE) 00119 { return $this->UUPUpdateValue("AudioDescriptionLanguage", $NewValue); } 00120 function PrefVisualDescriptionLanguage($NewValue = DB_NOVALUE) 00121 { return $this->UUPUpdateValue("VisualDescriptionLanguage", $NewValue); } 00122 function PrefImageDescriptionLanguage($NewValue = DB_NOVALUE) 00123 { return $this->UUPUpdateValue("ImageDescriptionLanguage", $NewValue); } 00124 function PrefUseGraphicAlternatives($NewValue = DB_NOVALUE) 00125 { return $this->UUPUpdateValue("UseGraphicAlternatives", $NewValue); } 00126 function PrefSignLanguage($NewValue = DB_NOVALUE) 00127 { return $this->UUPUpdateValue("SignLanguage", $NewValue); } 00128 function PrefCaptionType($NewValue = DB_NOVALUE) 00129 { return $this->UUPUpdateValue("CaptionType", $NewValue); } 00130 function PrefCaptionRate($NewValue = DB_NOVALUE) 00131 { return $this->UUPUpdateValue("CaptionRate", $NewValue); } 00132 00142 static function GetCryptKey() 00143 { 00144 $DB = new Database(); 00145 00146 # Clear all keys more than two days old 00147 $DB->Query("DELETE FROM LoginKeys WHERE NOW() - CreationTime > 172800"); 00148 $DB->Query("DELETE FROM UsedLoginTokens WHERE NOW()-KeyCTime > 172800"); 00149 00150 # Get the most recently generated key 00151 $DB->Query("SELECT NOW()-CreationTime as Age," 00152 ."KeyPair FROM LoginKeys " 00153 ."ORDER BY Age ASC LIMIT 1"); 00154 $Row = $DB->FetchRow(); 00155 00156 # If there is no key in the database, or the key is too old 00157 if ( ($Row===FALSE) || ($Row["Age"]>=86400) ) 00158 { 00159 # Generate a new OpenSSL format keypair 00160 $KeyPair = openssl_pkey_new( 00161 array( 00162 'private_key_bits' => 512, # Make this a Sysadmin pref later? 00163 'private_key_type' => OPENSSL_KEYTYPE_RSA 00164 )); 00165 00166 # Serialize it for storage 00167 openssl_pkey_export($KeyPair, $KeyPairDBFormat); 00168 00169 # And stick it into the database 00170 $DB->Query("INSERT INTO LoginKeys " 00171 ."(KeyPair, CreationTime) VALUES (" 00172 ."\"".addslashes($KeyPairDBFormat)."\"," 00173 ."NOW())"); 00174 } 00175 else 00176 { 00177 # If we do have a current key in the database, 00178 # Convert it to openssl format for usage 00179 $KeyPair = openssl_pkey_get_private( $Row["KeyPair"] ); 00180 } 00181 00182 return $KeyPair; 00183 } 00184 00191 static function ExtractPubKeyParameters($KeyPair) 00192 { 00193 # Export the keypair as an ASCII signing request (which contains the data we want) 00194 openssl_csr_export(openssl_csr_new(array(), $KeyPair), $Export, false); 00195 00196 $Modulus = ""; 00197 $Exponent = ""; 00198 00199 $Patterns = array( 00200 '/Modulus \([0-9]+ bit\):(.*)Exponent: [0-9]+ \(0x([0-9a-f]+)\)/ms', 00201 '/Public-Key: \([0-9]+ bit\).*Modulus:(.*)Exponent: [0-9]+ \(0x([0-9a-f]+)\)/ms', 00202 ); 00203 00204 foreach ($Patterns as $Pattern) 00205 { 00206 if (preg_match($Pattern, $Export, $Matches)) 00207 { 00208 $Modulus = $Matches[1]; 00209 $Exponent = $Matches[2]; 00210 break; 00211 } 00212 } 00213 00214 # Clean newlines and whitespace out of the modulus 00215 $Modulus = preg_replace("/[^0-9a-f]/","",$Modulus); 00216 00217 # Return key material 00218 return array( "Modulus" => $Modulus, "Exponent" => $Exponent ); 00219 } 00220 00221 # ---- PRIVATE INTERFACE ------------------------------------------------- 00222 00223 var $DB; 00224 var $UserUIPreferencesCache; 00225 00226 function UUPUpdateValue($FieldName, $NewValue) 00227 { 00228 return $this->DB->UpdateValue("UserUIPreferences", $FieldName, 00229 $NewValue, "UserId = '".$this->Id()."'", 00230 $this->UserUIPreferencesCache); 00231 } 00232 } 00233 00234 ?>