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 # Grep through the request to get out the desired key parameters
00197 preg_match('/Modulus \([0-9]+ bit\):(.*)Exponent: [0-9]+ \(0x([0-9a-f]+)\)/ms',
00198 $Export, $Matches);
00199 $Modulus = $Matches[1];
00200 $Exponent = $Matches[2];
00201
00202 # Clean newlines and whitespace out of the modulus
00203 $Modulus = preg_replace("/[^0-9a-f]/","",$Modulus);
00204
00205 # Return key material
00206 return array( "Modulus" => $Modulus, "Exponent" => $Exponent );
00207 }
00208
00209 # ---- PRIVATE INTERFACE -------------------------------------------------
00210
00211 var $DB;
00212 var $UserUIPreferencesCache;
00213
00214 function UUPUpdateValue($FieldName, $NewValue)
00215 {
00216 return $this->DB->UpdateValue("UserUIPreferences", $FieldName,
00217 $NewValue, "UserId = '".$this->Id()."'",
00218 $this->UserUIPreferencesCache);
00219 }
00220 }
00221
00222 ?>