From 6d28e3f62535bb637b08287585bf9c13dfd756d2 Mon Sep 17 00:00:00 2001 From: jrags <> Date: Wed, 1 Nov 2006 04:47:01 +0000 Subject: Update of new Security code, currently working on making TLogin functional so we can test the providers soon. --- .gitattributes | 12 +- demos/helloworld/protected/pages/Home.page | 2 +- demos/providers/index.php | 2 +- demos/providers/protected/application.xml | 74 +- demos/providers/protected/pages/Home.page | 2 +- demos/providers/protected/pages/Home.php | 20 +- framework/Security/TMembershipManager.php | 111 --- framework/TApplication.php | 192 ++--- framework/Web/Security/Principal/IIdentity.php | 24 + framework/Web/Security/Principal/IPrincipal.php | 19 + .../Web/Security/Principal/TGenericIdentity.php | 48 ++ .../Web/Security/Principal/TGenericPrincipal.php | 34 + framework/Web/Security/TCookieProtection.php | 27 + .../Web/Security/TDefaultAuthenticationModule.php | 15 + framework/Web/Security/TFormsAuthentication.php | 96 +++ .../Web/Security/TFormsAuthenticationModule.php | 126 +++ .../Web/Security/TFormsAuthenticationTicket.php | 124 +++ framework/Web/Security/TFormsIdentity.php | 71 ++ framework/Web/Security/TMembershipProvider.php | 1 - framework/Web/Security/TRoleManagerModule.php | 11 +- framework/Web/Security/TSqlMembershipProvider.php | 2 +- framework/Web/UI/WebControls/TLogin.php | 924 ++++++++++++++++++++- framework/Web/UI/WebControls/TLoginUtil.php | 173 ++++ 23 files changed, 1849 insertions(+), 261 deletions(-) delete mode 100644 framework/Security/TMembershipManager.php create mode 100644 framework/Web/Security/Principal/IIdentity.php create mode 100644 framework/Web/Security/Principal/IPrincipal.php create mode 100644 framework/Web/Security/Principal/TGenericIdentity.php create mode 100644 framework/Web/Security/Principal/TGenericPrincipal.php create mode 100644 framework/Web/Security/TCookieProtection.php create mode 100644 framework/Web/Security/TDefaultAuthenticationModule.php create mode 100644 framework/Web/Security/TFormsAuthentication.php create mode 100644 framework/Web/Security/TFormsAuthenticationModule.php create mode 100644 framework/Web/Security/TFormsAuthenticationTicket.php create mode 100644 framework/Web/Security/TFormsIdentity.php create mode 100644 framework/Web/UI/WebControls/TLoginUtil.php diff --git a/.gitattributes b/.gitattributes index 592c9f95..da378ed8 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1719,7 +1719,6 @@ framework/PradoBase.php -text framework/Security/IUserManager.php -text framework/Security/TAuthManager.php -text framework/Security/TAuthorizationRule.php -text -framework/Security/TMembershipManager.php -text framework/Security/TSecurityManager.php -text framework/Security/TUser.php -text framework/Security/TUserManager.php -text @@ -1827,8 +1826,18 @@ framework/Web/Javascripts/ratings/ratings.js -text framework/Web/Javascripts/rico/colors.js -text framework/Web/Javascripts/rico/extension.js -text framework/Web/Javascripts/rico/rico.js -text +framework/Web/Security/Principal/IIdentity.php -text +framework/Web/Security/Principal/IPrincipal.php -text +framework/Web/Security/Principal/TGenericIdentity.php -text +framework/Web/Security/Principal/TGenericPrincipal.php -text framework/Web/Security/TAnonymousIdentificationModule.php -text framework/Web/Security/TAuthorizationStoreRoleProvider.php -text +framework/Web/Security/TCookieProtection.php -text +framework/Web/Security/TDefaultAuthenticationModule.php -text +framework/Web/Security/TFormsAuthentication.php -text +framework/Web/Security/TFormsAuthenticationModule.php -text +framework/Web/Security/TFormsAuthenticationTicket.php -text +framework/Web/Security/TFormsIdentity.php -text framework/Web/Security/TMembership.php -text framework/Web/Security/TMembershipCreateStatus.php -text framework/Web/Security/TMembershipCreateUserException.php -text @@ -1936,6 +1945,7 @@ framework/Web/UI/WebControls/TLiteralColumn.php -text framework/Web/UI/WebControls/TLogin.php -text framework/Web/UI/WebControls/TLoginName.php -text framework/Web/UI/WebControls/TLoginStatus.php -text +framework/Web/UI/WebControls/TLoginUtil.php -text framework/Web/UI/WebControls/TLoginView.php -text framework/Web/UI/WebControls/TMarkdown.php -text framework/Web/UI/WebControls/TMultiView.php -text diff --git a/demos/helloworld/protected/pages/Home.page b/demos/helloworld/protected/pages/Home.page index 97702e67..fad60d4a 100644 --- a/demos/helloworld/protected/pages/Home.page +++ b/demos/helloworld/protected/pages/Home.page @@ -8,7 +8,7 @@ - + diff --git a/demos/providers/index.php b/demos/providers/index.php index 50bfe940..59c29c50 100644 --- a/demos/providers/index.php +++ b/demos/providers/index.php @@ -1,7 +1,7 @@ - - - + + + + + - - - + + + \ No newline at end of file diff --git a/demos/providers/protected/pages/Home.page b/demos/providers/protected/pages/Home.page index 10069478..27be9e58 100644 --- a/demos/providers/protected/pages/Home.page +++ b/demos/providers/protected/pages/Home.page @@ -1,4 +1,4 @@ -

Welcome to Prado!

+

Provider Demo

\ No newline at end of file diff --git a/demos/providers/protected/pages/Home.php b/demos/providers/protected/pages/Home.php index bbcbc20b..0c6320e4 100644 --- a/demos/providers/protected/pages/Home.php +++ b/demos/providers/protected/pages/Home.php @@ -6,22 +6,22 @@ class Home extends TPage Prado::using('System.Util.TVarDumper'); Prado::using('System.Web.Security.TSqlMembershipProvider'); Prado::using('System.Configuration.TProtectedConfiguration'); - // TRoles::CreateRole('test'); - // TMembership::ValidateUser('test','test'); - // echo TVarDumper::dump(TProtectedConfiguration::getDefaultProvider(),10,true); - // echo TVarDumper::dump($this->Application->getModule('ProtectedConfiguration'),10,true); - // Access by provider id // $MembershipProvider = $this->Application->getModule('MembershipProvider')->getProvider('SqlMembershipProvider'); - // or just get the default provider - $MembershipProvider = $this->Application->getModule('MembershipProvider')->Provider; - // $RoleProvider = $this->Application->getModule('RoleProvider')->Provider; + + /* @VAR $MembershipProvider TSqlMembershipProvider */ + // $MembershipProvider = $this->Application->getModule('MembershipProvider')->Provider; + // echo TVarDumper::dump($MembershipProvider,10,true); + /* @VAR $RoleProvider TSqlRoleProvider */ - echo TVarDumper::dump($MembershipProvider,10,true); - echo TVarDumper::dump($MembershipProvider->getMembershipUser('testUser'),10,true); + // $RoleProvider = $this->Application->getModule('RoleProvider')->Provider; // echo TVarDumper::dump($RoleProvider,10,true); + + /* @VAR $FormsAuthentication TFormsAuthenticationModule */ + $FormsAuthentication = $this->Application->getModule('FormsAuthentication'); + // echo TVarDumper::dump($FormsAuthentication,10,true); } } ?> \ No newline at end of file diff --git a/framework/Security/TMembershipManager.php b/framework/Security/TMembershipManager.php deleted file mode 100644 index b5986ac5..00000000 --- a/framework/Security/TMembershipManager.php +++ /dev/null @@ -1,111 +0,0 @@ - \ No newline at end of file diff --git a/framework/TApplication.php b/framework/TApplication.php index 9e1026bf..5f4e8ec8 100644 --- a/framework/TApplication.php +++ b/framework/TApplication.php @@ -146,19 +146,19 @@ class TApplication extends TComponent * @var array list of events that define application lifecycles */ private static $_steps=array( - 'onBeginRequest', - 'onAuthentication', - 'onAuthenticationComplete', - 'onAuthorization', - 'onAuthorizationComplete', - 'onLoadState', - 'onLoadStateComplete', - 'onPreRunService', - 'runService', - 'onSaveState', - 'onSaveStateComplete', - 'onPreFlushOutput', - 'flushOutput' + 'onBeginRequest', + 'onAuthentication', + 'onAuthenticationComplete', + 'onAuthorization', + 'onAuthorizationComplete', + 'onLoadState', + 'onLoadStateComplete', + 'onPreRunService', + 'runService', + 'onSaveState', + 'onSaveStateComplete', + 'onPreFlushOutput', + 'flushOutput' ); /** @@ -291,16 +291,16 @@ class TApplication extends TComponent // determine configuration path and file if(($this->_basePath=realpath($basePath))===false) - throw new TConfigurationException('application_basepath_invalid',$basePath); + throw new TConfigurationException('application_basepath_invalid',$basePath); if(is_file($this->_basePath)) { $this->_configFile=$this->_basePath; $this->_basePath=dirname($this->_basePath); } else if(is_file($this->_basePath.'/'.self::CONFIG_FILE)) - $this->_configFile=$this->_basePath.'/'.self::CONFIG_FILE; + $this->_configFile=$this->_basePath.'/'.self::CONFIG_FILE; else - $this->_configFile=null; + $this->_configFile=null; // determine runtime path $this->_runtimePath=$this->_basePath.'/'.self::RUNTIME_PATH; @@ -313,13 +313,13 @@ class TApplication extends TComponent if(!is_dir($this->_runtimePath)) { if(@mkdir($this->_runtimePath)===false) - throw new TConfigurationException('application_runtimepath_failed',$this->_runtimePath); + throw new TConfigurationException('application_runtimepath_failed',$this->_runtimePath); chmod($this->_runtimePath, 0777); //make it deletable } } } else - throw new TConfigurationException('application_runtimepath_invalid',$this->_runtimePath); + throw new TConfigurationException('application_runtimepath_invalid',$this->_runtimePath); $this->_cacheFile=$cacheConfig ? $this->_runtimePath.'/'.self::CONFIGCACHE_FILE : null; @@ -343,9 +343,9 @@ class TApplication extends TComponent while($this->_step<$n) { if($this->_mode===self::STATE_OFF) - throw new THttpException(503,'application_service_unavailable'); + throw new THttpException(503,'application_service_unavailable'); if($this->_requestCompleted) - break; + break; $method=self::$_steps[$this->_step]; Prado::trace("Executing $method()",'System.TApplication'); $this->$method(); @@ -403,9 +403,9 @@ class TApplication extends TComponent { $this->_stateChanged=true; if($value===$defaultValue) - unset($this->_globals[$key]); + unset($this->_globals[$key]); else - $this->_globals[$key]=$value; + $this->_globals[$key]=$value; } /** @@ -438,7 +438,7 @@ class TApplication extends TComponent protected function saveGlobals() { if(!$this->_stateChanged) - return; + return; $this->getApplicationStatePersister()->save($this->_globals); } @@ -524,9 +524,9 @@ class TApplication extends TComponent public function setModule($id,IModule $module) { if(isset($this->_modules[$id])) - throw new TConfigurationException('application_moduleid_duplicated',$id); + throw new TConfigurationException('application_moduleid_duplicated',$id); else - $this->_modules[$id]=$module; + $this->_modules[$id]=$module; } /** @@ -765,7 +765,7 @@ class TApplication extends TComponent public function getGlobalization($createIfNotExists=true) { if($this->_globalization===null && $createIfNotExists) - $this->_globalization=new TGlobalization; + $this->_globalization=new TGlobalization; return $this->_globalization; } @@ -783,7 +783,7 @@ class TApplication extends TComponent public function getAuthorizationRules() { if($this->_authRules===null) - $this->_authRules=new TAuthorizationRuleCollection; + $this->_authRules=new TAuthorizationRuleCollection; return $this->_authRules; } @@ -821,7 +821,7 @@ class TApplication extends TComponent fclose($fp); } else - syslog(LOG_WARNING, 'Prado application config cache file "'.$this->_cacheFile.'" cannot be created.'); + syslog(LOG_WARNING, 'Prado application config cache file "'.$this->_cacheFile.'" cannot be created.'); } } else @@ -831,13 +831,13 @@ class TApplication extends TComponent // set path aliases and using namespaces foreach($config->getAliases() as $alias=>$path) - Prado::setPathOfAlias($alias,$path); + Prado::setPathOfAlias($alias,$path); foreach($config->getUsings() as $using) - Prado::using($using); + Prado::using($using); // set application properties foreach($config->getProperties() as $name=>$value) - $this->setSubProperty($name,$value); + $this->setSubProperty($name,$value); // load parameters $this->_parameters=new TMap; @@ -847,11 +847,11 @@ class TApplication extends TComponent { $component=Prado::createComponent($parameter[0]); foreach($parameter[1] as $name=>$value) - $component->setSubProperty($name,$value); + $component->setSubProperty($name,$value); $this->_parameters->add($id,$component); } else - $this->_parameters->add($id,$parameter); + $this->_parameters->add($id,$parameter); } // load and init modules specified in app config @@ -863,13 +863,13 @@ class TApplication extends TComponent $module=Prado::createComponent($moduleConfig[0]); if(is_string($id)) - $this->setModule($id,$module); + $this->setModule($id,$module); foreach($moduleConfig[1] as $name=>$value) - $module->setSubProperty($name,$value); + $module->setSubProperty($name,$value); $modules[]=array($module,$moduleConfig[2]); } foreach($modules as $module) - $module[0]->init($module[1]); + $module[0]->init($module[1]); // load service $services=$config->getServices(); @@ -879,20 +879,20 @@ class TApplication extends TComponent $request->setAvailableServices($serviceIDs); if(($serviceID=$request->getServiceID())===null) - $serviceID=self::PAGE_SERVICE_ID; + $serviceID=self::PAGE_SERVICE_ID; if(isset($services[$serviceID])) { $serviceConfig=$services[$serviceID]; $service=Prado::createComponent($serviceConfig[0]); if(!($service instanceof IService)) - throw new THttpException(500,'application_service_unknown',$serviceID); + throw new THttpException(500,'application_service_unknown',$serviceID); $this->_service=$service; foreach($serviceConfig[1] as $name=>$value) - $service->setSubProperty($name,$value); + $service->setSubProperty($name,$value); $service->init($serviceConfig[2]); } else - $this->_service=$this->getPageService(); + $this->_service=$this->getPageService(); } /** @@ -990,7 +990,7 @@ class TApplication extends TComponent public function runService() { if($this->_service) - $this->_service->run(); + $this->_service->run(); } /** @@ -1112,7 +1112,7 @@ class TApplicationConfiguration extends TComponent // application properties foreach($dom->getAttributes() as $name=>$value) - $this->_properties[$name]=$value; + $this->_properties[$name]=$value; // paths if(($pathsNode=$dom->getElementByTagName('paths'))!==null) @@ -1123,24 +1123,24 @@ class TApplicationConfiguration extends TComponent { $path=str_replace('\\','/',$path); if(preg_match('/^\\/|.:\\/|.:\\\\/',$path)) // if absolute path - $p=realpath($path); + $p=realpath($path); else - $p=realpath($configPath.'/'.$path); + $p=realpath($configPath.'/'.$path); if($p===false || !is_dir($p)) - throw new TConfigurationException('appconfig_aliaspath_invalid',$id,$path); + throw new TConfigurationException('appconfig_aliaspath_invalid',$id,$path); if(isset($this->_aliases[$id])) - throw new TConfigurationException('appconfig_alias_redefined',$id); + throw new TConfigurationException('appconfig_alias_redefined',$id); $this->_aliases[$id]=$p; } else - throw new TConfigurationException('appconfig_alias_invalid'); + throw new TConfigurationException('appconfig_alias_invalid'); } foreach($pathsNode->getElementsByTagName('using') as $usingNode) { if(($namespace=$usingNode->getAttribute('namespace'))!==null) - $this->_usings[]=$namespace; + $this->_usings[]=$namespace; else - throw new TConfigurationException('appconfig_using_invalid'); + throw new TConfigurationException('appconfig_using_invalid'); } } @@ -1153,12 +1153,12 @@ class TApplicationConfiguration extends TComponent $id=$properties->itemAt('id'); $type=$properties->remove('class'); if($type===null) - throw new TConfigurationException('appconfig_moduletype_required',$id); + throw new TConfigurationException('appconfig_moduletype_required',$id); $node->setParent(null); if($id===null) - $this->_modules[]=array($type,$properties->toArray(),$node); + $this->_modules[]=array($type,$properties->toArray(),$node); else - $this->_modules[$id]=array($type,$properties->toArray(),$node); + $this->_modules[$id]=array($type,$properties->toArray(),$node); } } @@ -1169,9 +1169,9 @@ class TApplicationConfiguration extends TComponent { $properties=$node->getAttributes(); if(($id=$properties->itemAt('id'))===null) - throw new TConfigurationException('appconfig_serviceid_required'); + throw new TConfigurationException('appconfig_serviceid_required'); if(($type=$properties->remove('class'))===null) - throw new TConfigurationException('appconfig_servicetype_required',$id); + throw new TConfigurationException('appconfig_servicetype_required',$id); $node->setParent(null); $this->_services[$id]=array($type,$properties->toArray(),$node); } @@ -1184,67 +1184,67 @@ class TApplicationConfiguration extends TComponent { $properties=$node->getAttributes(); if(($id=$properties->remove('id'))===null) - throw new TConfigurationException('appconfig_parameterid_required'); + throw new TConfigurationException('appconfig_parameterid_required'); if(($type=$properties->remove('class'))===null) { if(($value=$properties->remove('value'))===null) - $this->_parameters[$id]=$node; + $this->_parameters[$id]=$node; else - $this->_parameters[$id]=$value; + $this->_parameters[$id]=$value; } else - $this->_parameters[$id]=array($type,$properties->toArray()); + $this->_parameters[$id]=array($type,$properties->toArray()); } } - } +} - /** +/** * @return array list of application initial property values, indexed by property names */ - public function getProperties() - { - return $this->_properties; - } +public function getProperties() +{ + return $this->_properties; +} - /** +/** * @return array list of path aliases, indexed by alias names */ - public function getAliases() - { - return $this->_aliases; - } +public function getAliases() +{ + return $this->_aliases; +} - /** +/** * @return array list of namespaces to be used */ - public function getUsings() - { - return $this->_usings; - } +public function getUsings() +{ + return $this->_usings; +} - /** +/** * @return array list of module configurations */ - public function getModules() - { - return $this->_modules; - } +public function getModules() +{ + return $this->_modules; +} - /** +/** * @return array list of service configurations */ - public function getServices() - { - return $this->_services; - } +public function getServices() +{ + return $this->_services; +} - /** +/** * @return array list of parameters */ - public function getParameters() - { - return $this->_parameters; - } +public function getParameters() +{ + return $this->_parameters; +} } /** @@ -1290,13 +1290,13 @@ class TApplicationStatePersister extends TModule implements IStatePersister public function load() { if(($cache=$this->getApplication()->getCache())!==null && ($value=$cache->get(self::CACHE_NAME))!==false) - return unserialize($value); + return unserialize($value); else { if(($content=@file_get_contents($this->getStateFilePath()))!==false) - return unserialize($content); + return unserialize($content); else - return null; + return null; } } @@ -1311,17 +1311,17 @@ class TApplicationStatePersister extends TModule implements IStatePersister if(($cache=$this->getApplication()->getCache())!==null) { if($cache->get(self::CACHE_NAME)===$content) - $saveFile=false; + $saveFile=false; else - $cache->set(self::CACHE_NAME,$content); + $cache->set(self::CACHE_NAME,$content); } if($saveFile) { $fileName=$this->getStateFilePath(); if(version_compare(phpversion(),'5.1.0','>=')) - file_put_contents($fileName,$content,LOCK_EX); + file_put_contents($fileName,$content,LOCK_EX); else - file_put_contents($fileName,$content); + file_put_contents($fileName,$content); } } diff --git a/framework/Web/Security/Principal/IIdentity.php b/framework/Web/Security/Principal/IIdentity.php new file mode 100644 index 00000000..89bc0f70 --- /dev/null +++ b/framework/Web/Security/Principal/IIdentity.php @@ -0,0 +1,24 @@ + + * @version $Id: IIdentity.php 1398 2006-09-08 19:31:03Z xue $ + * @package System.Web.Security.Principal + * @since 3.1 + */ +interface IIdentity +{ + private $_authenticationType; + private $_isAuthenticated; + private $_name; + + public function getAuthenticationType(); + public function setAuthenticationType($value); + public function getIsAuthenticated(); + public function setIsAuthenticated($value); + public function getName(); + public function setName($value); +} +?> \ No newline at end of file diff --git a/framework/Web/Security/Principal/IPrincipal.php b/framework/Web/Security/Principal/IPrincipal.php new file mode 100644 index 00000000..9503387a --- /dev/null +++ b/framework/Web/Security/Principal/IPrincipal.php @@ -0,0 +1,19 @@ + + * @version $Id: IIdentity.php 1398 2006-09-08 19:31:03Z xue $ + * @package System.Web.Security.Principal + * @since 3.1 + */ +interface IPrincipal +{ + private $_identity; + + public function getIdentity(); + public function setIdentity($value); + public function isInRole($role); +} +?> \ No newline at end of file diff --git a/framework/Web/Security/Principal/TGenericIdentity.php b/framework/Web/Security/Principal/TGenericIdentity.php new file mode 100644 index 00000000..037ebc42 --- /dev/null +++ b/framework/Web/Security/Principal/TGenericIdentity.php @@ -0,0 +1,48 @@ + + * @version $Id: TGenericIdentity.php 1398 2006-09-08 19:31:03Z xue $ + * @package System.Web.Security.Principal + * @since 3.1 + */ +Prado::using('System.Web.Security.Principal.IIdentity'); +class TGenericIdentity implements IIdentity +{ + private $_authenticationType; + private $_isAuthenticated; + private $_name; + + public function getAuthenticationType() + { + return $this->_authenticationType; + } + public function setAuthenticationType($value) + { + $this->_authenticationType = TPropertyValue::ensureString($value); + } + public function getIsAuthenticated() + { + return $this->_isAuthenticated; + } + public function setIsAuthenticated($value) + { + $this->_isAuthenticated = TPropertyValue::ensureBoolean($value); + } + public function getName() + { + return $this->_name; + } + public function setName($value) + { + $this->_name = TPropertyValue::ensureString($value); + } + + public function __construct($name, $type=null) + { + + } +} +?> \ No newline at end of file diff --git a/framework/Web/Security/Principal/TGenericPrincipal.php b/framework/Web/Security/Principal/TGenericPrincipal.php new file mode 100644 index 00000000..8e07388e --- /dev/null +++ b/framework/Web/Security/Principal/TGenericPrincipal.php @@ -0,0 +1,34 @@ + + * @version $Id: TGenericPrincipal.php 1398 2006-09-08 19:31:03Z xue $ + * @package System.Web.Security.Principal + * @since 3.1 + */ +Prado::using('System.Web.Security.Principal.IPrincipal'); +class TGenericPrincipal implements IPrincipal +{ + private $_identity; + + public function getIdentity() + { + return $this->_identity; + } + public function setIdentity($value) + { + $this->_identity = TPropertyValue::ensureString($value); + } + + public function __construct($name, $type=null) + { + + } + public function isInRole($role) + { + + } +} +?> \ No newline at end of file diff --git a/framework/Web/Security/TCookieProtection.php b/framework/Web/Security/TCookieProtection.php new file mode 100644 index 00000000..2a757898 --- /dev/null +++ b/framework/Web/Security/TCookieProtection.php @@ -0,0 +1,27 @@ + + * @version $Id: TCookieProtection.php 1398 2006-09-08 19:31:03Z xue $ + * @package System.Web.Security + * @since 3.1 + */ +class TCookieProtection extends TEnumerable +{ + const All='All'; + const Encryption='Encryption'; + const None='None'; + const Validation='Validation'; +} +?> \ No newline at end of file diff --git a/framework/Web/Security/TDefaultAuthenticationModule.php b/framework/Web/Security/TDefaultAuthenticationModule.php new file mode 100644 index 00000000..03d6e758 --- /dev/null +++ b/framework/Web/Security/TDefaultAuthenticationModule.php @@ -0,0 +1,15 @@ + + * @version $Id: TDefaultAuthenticationModule.php 1398 2006-09-08 19:31:03Z xue $ + * @package System.Web.Security + * @since 3.1 + */ +final class TDefaultAuthenticationModule extends TModule +{ + +} +?> \ No newline at end of file diff --git a/framework/Web/Security/TFormsAuthentication.php b/framework/Web/Security/TFormsAuthentication.php new file mode 100644 index 00000000..5830d7eb --- /dev/null +++ b/framework/Web/Security/TFormsAuthentication.php @@ -0,0 +1,96 @@ + + * @version $Id: TFormsAuthentication.php 1398 2006-09-08 19:31:03Z xue $ + * @package System.Web.Security + * @since 3.1 + */ +final class TFormsAuthentication +{ + private static $_cookieDomain; + private static $_cookieMode; + private static $_cookiesSupported; + private static $_defaultUrl; + private static $_enableCrossAppRedirects; + private static $_formsCookieName; + private static $_formsCookiePath; + private static $_loginUrl; + private static $_requireSSL; + private static $_slidingExpiration; + + public static function getCookiePath() + { + return self::$_cookieDomain; + } + public static function setCookiePath($value) + { + self::$_cookieDomain = TPropertyValue::ensureString($value); + } + + public function __construct() + { + + } + + public static Authenticate($name, $password); + public static Decrypt($encryptedTicket); + public static Encrypt($ticket); + private static Encrypt($ticket, $hexEncodedTicket); + public static GetAuthCookie( $$userName, $createPersistentCookie); + public static GetAuthCookie( $$userName, $createPersistentCookie, strCookiePath); + private static GetAuthCookie( $userName, $createPersistentCookie, strCookiePath, hexEncodedTicket); + public static GetLoginPage( $extraQuery); + public static GetLoginPage( $extraQuery, $reuseReturnUrl); + public static GetRedirectUrl( $userName, $createPersistentCookie); + public static GetReturnUrl( $useDefaultIfAbsent); + public static HashPasswordForStoringInConfigFile($password, $passwordFormat); + public static Initialize(); + private static ernalAuthenticate( $name, $password); + private static IsPathWithinAppRoot($context, $path); + private static MakeTicketoBinaryBlob($ticket); + public static RedirectFromLoginPage($userName, $createPersistentCookie); + public static RedirectFromLoginPage($userName, $createPersistentCookie, $strCookiePath); + public static RedirectToLoginPage(); + public static RedirectToLoginPage($extraQuery); + private static RemoveQSVar($ref $strUrl, $posQ, $token, $sep, $lenAtStartToLeave); + public static RemoveQueryVariableFromUrl( $strUrl, $QSVar); + public static RenewTicketIfOld($tOld); + public static SetAuthCookie( $userName, $createPersistentCookie); + public static SetAuthCookie( $userName, $createPersistentCookie, $strCookiePath); + public static SignOut(); + + // Properties + public static CookieDomain { get; } + public static HttpCookieMode CookieMode { get; } + public static CookiesSupported { get; } + public static DefaultUrl { get; } + public static EnableCrossAppRedirects { get; } + public static FormsCookieName { get; } + public static FormsCookiePath { get; } + public static LoginUrl { get; } + public static RequireSSL { get; } + public static SlidingExpiration { get; } + + // Fields + private static _CookieDomain; + private static HttpCookieMode _CookieMode; + private static _DefaultUrl; + private static _EnableCrossAppRedirects; + private static _FormsCookiePath; + private static _FormsName; + private static _Initialized; + private static object _lockObject; + private static _LoginUrl; + private static FormsProtectionEnum _Protection; + private static _RequireSSL; + private static _SlidingExpiration; + private static _Timeout; + private const CONFIG_DEFAULT_COOKIE = ".ASPXAUTH"; + private const MAC_LENGTH = 20; + private const MAX_TICKET_LENGTH = 0x1000; + ernal const RETURN_URL = "ReturnUrl"; +} +?> \ No newline at end of file diff --git a/framework/Web/Security/TFormsAuthenticationModule.php b/framework/Web/Security/TFormsAuthenticationModule.php new file mode 100644 index 00000000..df0d5300 --- /dev/null +++ b/framework/Web/Security/TFormsAuthenticationModule.php @@ -0,0 +1,126 @@ + + * @version $Id: TFormsAuthenticationModule.php 1398 2006-09-08 19:31:03Z xue $ + * @package System.Web.Security + * @since 3.1 + */ +final class TFormsAuthenticationModule extends TModule +{ + /** + * @var boolean if the module has been initialized + */ + private $_initialized=false; + + private static $_fAuthChecked=false; + private static $_fAuthRequired=false; + private $_fFormsInit; + private $_formsName; + private $_loginUrl; + const CONFIG_DEFAULT_COOKIE = ".ASPXAUTH"; + const CONFIG_DEFAULT_LOGINURL = "login.aspx"; + + //Is this the best way to do it?? i dont see how the forms module knows about the provider + private $_defaultProvider; + + public function getDefaultProvider() + { + return $this->_defaultProvider; + } + public function setDefaultProvider($value) + { + $this->_defaultProvider = TPropertyValue::ensureString($value); + } + + public function __construct() + { + + } + /** + * Initializes this module. + * This method is required by the IModule interface. + * @param TXmlElement configuration for this module, can be null + * @throws TConfigurationException if user manager does not exist or is not IUserManager + */ + public function init($config) + { + $this->getApplication()->attachEventHandler('OnAuthentication',array($this,'doAuthentication')); + $this->getApplication()->attachEventHandler('OnEndRequest',array($this,'leave')); + $this->getApplication()->attachEventHandler('OnAuthorization',array($this,'doAuthorization')); + $this->_initialized=true; + } + + private static function extractTicketFromCookie($context, $name) + { + + } + /** + * Performs authentication. + * This is the event handler attached to application's Authentication event. + * Do not call this method directly. + * @param mixed sender of the Authentication event + * @param mixed event parameter + */ + public function doAuthentication($sender,$param) + { + Prado::using('System.Util.TVarDumper'); +// echo TVarDumper::dump(__METHOD__,10,true); + } + /** + * Performs login redirect if authorization fails. + * This is the event handler attached to application's EndRequest event. + * Do not call this method directly. + * @param mixed sender of the event + * @param mixed event parameter + */ + public function leave($sender,$param) + { + Prado::using('System.Util.TVarDumper'); +// echo TVarDumper::dump(__METHOD__,10,true); + } + /** + * Performs authorization. + * This is the event handler attached to application's Authorization event. + * Do not call this method directly. + * @param mixed sender of the Authorization event + * @param mixed event parameter + */ + public function doAuthorization($sender,$param) + { + Prado::using('System.Util.TVarDumper'); +// echo TVarDumper::dump(__METHOD__,10,true); + } +} +//public sealed class FormsAuthenticationModule : IHttpModule +//{ +// // Events +// public event FormsAuthenticationEventHandler Authenticate; +// +// // Methods +// [SecurityPermission(SecurityAction.Demand, Unrestricted=true)] +// public FormsAuthenticationModule(); +// public void Dispose(); +// private static FormsAuthenticationTicket +//ExtractTicketFromCookie(HttpContext context, string name, out bool +//cookielessTicket); +// public void Init(HttpApplication app); +// private void OnAuthenticate(FormsAuthenticationEventArgs e); +// private void OnEnter(object source, EventArgs eventArgs); +// private void OnLeave(object source, EventArgs eventArgs); +// private static void Trace(string str); +// +// // Fields +// private FormsAuthenticationEventHandler _eventHandler; +// private static bool _fAuthChecked; +// private static bool _fAuthRequired; +// private bool _fFormsInit; +// private string _FormsName; +// private string _LoginUrl; +// private const string CONFIG_DEFAULT_COOKIE = ".ASPXAUTH"; +// private const string CONFIG_DEFAULT_LOGINURL = "login.aspx"; +//} +?> \ No newline at end of file diff --git a/framework/Web/Security/TFormsAuthenticationTicket.php b/framework/Web/Security/TFormsAuthenticationTicket.php new file mode 100644 index 00000000..e53b68b2 --- /dev/null +++ b/framework/Web/Security/TFormsAuthenticationTicket.php @@ -0,0 +1,124 @@ + + * @version $Id: TFormsAuthenticationTicket.php 1398 2006-09-08 19:31:03Z xue $ + * @package System.Web.Security + * @since 3.1 + */ +final class TFormsAuthenticationTicket +{ + private $_cookiePath; + private $_expiration; + private $_expired; + private $_isPersistent; + private $_issueDate; + private $_name; + private $_userData; + private $_version; + + public function getCookiePath() + { + return $this->_cookiePath; + } + public function setCookiePath($value) + { + $this->_cookiePath = TPropertyValue::ensureString($value); + } + public function getExpiration() + { + return $this->_expiration; + } + public function setExpiration($value) + { + $this->_expiration = TPropertyValue::ensureString($value); + } + public function getExpired() + { + return $this->_expired; + } + public function setExpired($value) + { + $this->_expired = TPropertyValue::ensureString($value); + } + public function getIsPersistent() + { + return $this->_isPersistent; + } + public function setIsPersistent($value) + { + $this->_isPersistent = TPropertyValue::ensureString($value); + } + public function getIssueDate() + { + return $this->_issueDate; + } + public function setIssueDate($value) + { + $this->_issueDate = TPropertyValue::ensureString($value); + } + public function getName() + { + return $this->_name; + } + public function setName($value) + { + $this->_name = TPropertyValue::ensureString($value); + } + public function getUserData() + { + return $this->_userData; + } + public function setUserData($value) + { + $this->_userData = TPropertyValue::ensureString($value); + } + public function getVersion() + { + return $this->_version; + } + public function setVersion($value) + { + $this->_version = TPropertyValue::ensureString($value); + } + + public function __construct() + { + + } +} +//public sealed class FormsAuthenticationTicket +//{ +// // Methods +// public FormsAuthenticationTicket(string name, bool isPersistent, +//int timeout); +// public FormsAuthenticationTicket(int version, string name, +//DateTime issueDate, DateTime expiration, bool isPersistent, string +//userData); +// public FormsAuthenticationTicket(int version, string name, +//DateTime issueDate, DateTime expiration, bool isPersistent, string +//userData, string cookiePath); +// +// // Properties +// public string CookiePath { get; } +// public DateTime Expiration { get; } +// public bool Expired { get; } +// public bool IsPersistent { get; } +// public DateTime IssueDate { get; } +// public string Name { get; } +// public string UserData { get; } +// public int Version { get; } +// +// // Fields +// private string _CookiePath; +// private DateTime _Expiration; +// private bool _IsPersistent; +// private DateTime _IssueDate; +// private string _Name; +// private string _UserData; +// private int _Version; +//} +?> \ No newline at end of file diff --git a/framework/Web/Security/TFormsIdentity.php b/framework/Web/Security/TFormsIdentity.php new file mode 100644 index 00000000..f4d00f82 --- /dev/null +++ b/framework/Web/Security/TFormsIdentity.php @@ -0,0 +1,71 @@ + + * @version $Id: TFormsIdentity.php 1398 2006-09-08 19:31:03Z xue $ + * @package System.Web.Security + * @since 3.1 + */ +Prado::using('System.Web.Security.Principal.IIdentity'); +final class TFormsIdentity implements IIdentity +{ + private $_authenticationType; + private $_isAuthenticated=false; + private $_name; + private $_ticket; + + public function getAuthenticationType() + { + return $this->_authenticationType; + } + public function setAuthenticationType($value) + { + $this->_authenticationType = TPropertyValue::ensureString($value); + } + public function getIsAuthenticated() + { + return $this->_isAuthenticated; + } + public function setIsAuthenticated($value) + { + $this->_isAuthenticated = TPropertyValue::ensureBoolean($value); + } + public function getName() + { + return $this->_name; + } + public function setName($value) + { + $this->_name = TPropertyValue::ensureString($value); + } + public function getTicket() + { + return $this->_ticket; + } + public function setTicket($value) + { + $this->_ticket = TPropertyValue::ensureString($value); + } + + public function __construct() + { + + } +} +//public sealed class FormsIdentity : IIdentity +//{ +// // Methods +// public FormsIdentity(FormsAuthenticationTicket ticket); +// +// // Properties +// public string AuthenticationType { get; } +// public bool IsAuthenticated { get; } +// public string Name { get; } +// public FormsAuthenticationTicket Ticket { get; } +// +// // Fields +// private FormsAuthenticationTicket _Ticket; +//} +?> \ No newline at end of file diff --git a/framework/Web/Security/TMembershipProvider.php b/framework/Web/Security/TMembershipProvider.php index 6a54819d..446d59d9 100644 --- a/framework/Web/Security/TMembershipProvider.php +++ b/framework/Web/Security/TMembershipProvider.php @@ -117,7 +117,6 @@ abstract class TMembershipProvider extends TProviderBase throw new TConfigurationException('membershipprovider_configfile_invalid',$this->_configFile); } $this->loadConfig($config); -// $this->getApplication()->attachEventHandler('OnEndRequest',array($this,'collectLogs')); } /** * Loads configuration from an XML element diff --git a/framework/Web/Security/TRoleManagerModule.php b/framework/Web/Security/TRoleManagerModule.php index 7f6181e0..79c6b7a5 100644 --- a/framework/Web/Security/TRoleManagerModule.php +++ b/framework/Web/Security/TRoleManagerModule.php @@ -1,5 +1,14 @@ + * @version $Id: TRoleManagerModule.php 1398 2006-09-08 19:31:03Z xue $ + * @package System.Web.Security + * @since 3.1 + */ +final class TRoleManagerModule extends TModule { } diff --git a/framework/Web/Security/TSqlMembershipProvider.php b/framework/Web/Security/TSqlMembershipProvider.php index 6bd677f7..87e9015f 100644 --- a/framework/Web/Security/TSqlMembershipProvider.php +++ b/framework/Web/Security/TSqlMembershipProvider.php @@ -57,7 +57,7 @@ class TSqlMembershipProvider extends TMembershipProvider public function getMembershipUser($username=null,$providerUserKey=null,$userIsOnline=false) { Prado::using('System.Web.Security.TMembershipUser'); -// return new TMembershipUser($this->getID()); + return new TMembershipUser($this->getID()); } public function getUserNameByEmail($email) { diff --git a/framework/Web/UI/WebControls/TLogin.php b/framework/Web/UI/WebControls/TLogin.php index 3b3be585..470caee2 100644 --- a/framework/Web/UI/WebControls/TLogin.php +++ b/framework/Web/UI/WebControls/TLogin.php @@ -3,13 +3,933 @@ * TLogin class. * Provides user interface (UI) elements for logging in to a Web site.. * + * The TLogin control is a composite control that provides all the common UI elements + * needed to authenticate a user on a Web site. The following three elements are + * required for all login scenarios: + * A unique user name to identify the user. + * A password to verify the identity of the user. + * A login button to send the login information to the server. + * The TLogin control also provides the following optional UI elements that support additional functions: + * A link for a password reminder. + * A Remember Me checkbox for retaining the login information between sessions. + * A Help link for users who are having trouble logging in. + * A Register New User link that redirects users to a registration page. + * Instruction text that appears on the login form. + * Custom error text that appears when the user clicks the login button without filling in the user name or password fields. + * Custom error text that appears if the login fails. + * A custom action that occurs when login succeeds. + * A way to hide the login control if the user is already logged in to the site. + * + * The TLogin control uses a membership provider to obtain user credentials. + * Unless you specify otherwise, the TLogin control uses the default membership + * provider defined in the Web.config file. To specify a different provider, + * set the MembershipProvider property to one of the membership provider + * names defined in your application's Web.config file. For more information, + * see Membership Providers. + * + * If you want to use a custom authentication service, you can use the OnAuthenticate + * method to call the service. + * + * Styles and Templates + * The appearance of the Login control is fully customizable through templates and + * style settings. All UI text messages are also customizable through properties + * of the TLogin class. The default interface text is automatically localized based + * on the locale setting on the server. + * + * If the TLogin control is customized with templates, then the AccessKey property + * and the TabIndex property are ignored. In this case, set the AccessKey property + * and the TabIndex property of each template child control directly. + * + * TLogin control properties represented by text boxes, such as UserName and Password, + * are accessible during all phases of the page life cycle. The control will pick up + * any changes made by the end user by means of the TextChanged event triggered by + * the textboxes. + * + * The following table lists the Login control style properties and explains which UI + * element each style property affects. For a list of which properties each style applies + * to, see the documentation for the individual style properties. + * + * Style property UI element affected + * BorderPadding The space between the control contents and the control's border. + * CheckBoxStyle Remember Me checkbox. + * FailureTextStyle Login failure text. + * InstructionTextStyle Instructional text on the page that tells users how to use the + * control. + * LabelStyle Labels for all input fields, such as text boxes. + * TextBoxStyle Text entry input fields. + * TitleTextStyle Title text. + * ValidatorTextStyle Text displayed to the user when a login attempt is unsuccessful + * due to validation errors + * HyperLinkStyle Links to other pages. + * LoginButtonStyle Login button. + * + * Validation Groupings + * The UserName and Password properties have RequiredFieldValidator controls associated + * with them to prevent users from submitting the page without providing required information. + * + * The TLogin control uses a validation group so that other fields on the same page as the TLogin + * control can be validated separately. By default, the ID property of the Login control is + * used as the name of the validation group. For example, a TLogin control with the ID "Login1" + * will use a validation group name of "Login1". If you want to set the validation group that + * the TLogin control is part of, you must template the control and change the validation group name. + * * @author Jason Ragsdale * @version $Id: TLogin.php 1398 2006-09-08 19:31:03Z xue $ * @package System.Web.UI.WebControls * @since 3.1 */ -class TLogin extends TCompositeControl +class TLogin extends TCompositeControl { - + private $_borderPadding=1; + private $_checkBoxStyle; + private $_convertingToTemplate=false; + private $_failureTextStyle; + private $_hyperLinkStyle; + private $_instructionTextStyle; + private $_labelStyle; + private $_layoutTemplate; + private $_loginButtonStyle; + private $_password; + private $_passwordInternal; + private $_tagKey; + private $_templateContainer; + private $_textBoxStyle; + private $_titleTextStyle; + private $_userNameInternal; + private $_validatorTextStyle; + + public function getBorderPadding() + { + return $this->getViewState('BorderPadding',1); + } + public function setBorderPadding($value) + { + $this->setViewState('BorderPadding',TPropertyValue::ensureInteger($value),1); + } + public function getCheckBoxStyle() + { + return $this->_checkBoxStyle; + } + public function getConvertingToTemplate() + { + return $this->_convertingToTemplate; + } + public function getCreateUserIconUrl() + { + return $this->getViewState('CreateUserIconUrl',''); + } + public function setCreateUserIconUrl($value) + { + $this->setViewState('CreateUserIconUrl',TPropertyValue::ensureString($value),''); + } + public function getCreateUserText() + { + return $this->getViewState('CreateUserText',''); + } + public function setCreateUserText($value) + { + $this->setViewState('CreateUserText',TPropertyValue::ensureString($value),''); + } + public function getCreateUserUrl() + { + return $this->getViewState('CreateUserUrl',''); + } + public function setCreateUserUrl($value) + { + $this->setViewState('CreateUserUrl',TPropertyValue::ensureString($value),''); + } + public function getDestinationPageUrl() + { + return $this->getViewState('DestinationPageUrl',''); + } + public function setDestinationPageUrl($value) + { + $this->setViewState('DestinationPageUrl',TPropertyValue::ensureString($value),''); + } + public function getDisplayRememberMe() + { + return $this->getViewState('DisplayRememberMe',true); + } + public function setDisplayRememberMe($value) + { + $this->setViewState('DisplayRememberMe',TPropertyValue::ensureBoolean($value),true); + } + public function getFailureAction() + { + return $this->getViewState('FailureAction',''); + } + public function setFailureAction($value) + { + $this->setViewState('FailureAction',TPropertyValue::ensureString($value),''); + } + public function getFailureText() + { + return $this->getViewState('FailureText',''); + } + public function setFailureText($value) + { + $this->setViewState('FailureText',TPropertyValue::ensureString($value),''); + } + public function getFailureTextStyle() + { + return $this->_failureTextStyle; + } + public function getHelpPageIconUrl() + { + return $this->getViewState('HelpPageIconUrl',''); + } + public function setHelpPageIconUrl($value) + { + $this->setViewState('HelpPageIconUrl',TPropertyValue::ensureString($value),''); + } + public function getHelpPageText() + { + return $this->getViewState('HelpPageText',''); + } + public function setHelpPageText($value) + { + $this->setViewState('HelpPageText',TPropertyValue::ensureString($value),''); + } + public function getHelpPageUrl() + { + return $this->getViewState('HelpPageUrl',''); + } + public function setHelpPageUrl($value) + { + $this->setViewState('HelpPageUrl',TPropertyValue::ensureString($value),''); + } + public function getHyperLinkStyle() + { + return $this->_hyperLinkStyle; + } + public function getInstructionText() + { + return $this->getViewState('InstructionText',''); + } + public function setInstructionText($value) + { + $this->setViewState('InstructionText',TPropertyValue::ensureString($value),''); + } + public function getInstructionTextStyle() + { + return $this->_instructionTextStyle; + } + public function getLabelStyle() + { + return $this->_labelStyle; + } + public function getLayoutTemplate() + { + return $this->_layoutTemplate; + } + public function setLayoutTemplate($value) + { + $this->_layoutTemplate = TPropertyValue::ensureString($value); + // parent::ChildControlsCreated=false; + } + public function getLoginButtonImageUrl() + { + return $this->getViewState('LoginButtonImageUrl',''); + } + public function setLoginButtonImageUrl($value) + { + $this->setViewState('LoginButtonImageUrl',TPropertyValue::ensureString($value),''); + } + public function getLoginButtonStyle() + { + return $this->_loginButtonStyle; + } + public function getLoginButtonText() + { + return $this->getViewState('LoginButtonText',''); + } + public function setLoginButtonText($value) + { + $this->setViewState('LoginButtonText',TPropertyValue::ensureString($value),''); + } + public function getLoginButtonType() + { + return $this->getViewState('LoginButtonType',''); + } + public function setLoginButtonType($value) + { + $this->setViewState('LoginButtonType',TPropertyValue::ensureString($value),''); + } + public function getMembershipProvider() + { + return $this->getViewState('MembershipProvider',''); + } + public function setMembershipProvider($value) + { + $this->setViewState('MembershipProvider',TPropertyValue::ensureString($value),''); + } + public function getOrientation() + { + return $this->getViewState('Orientation',''); + } + public function setOrientation($value) + { + $this->setViewState('Orientation',TPropertyValue::ensureString($value),''); + // parent::ChildControlsCreated=false; + //Do we need TOrientation? + } + public function getPassword() + { + return $this->_password; + } + public function getPasswordInternal() + { + return $this->_passwordInternal; + } + public function getPasswordLabelText() + { + return $this->getViewState('PasswordLabelText','LoginControls_DefaultPasswordLabelText'); + } + public function setPasswordLabelText($value) + { + $this->setViewState('PasswordLabelText',TPropertyValue::ensureString($value),'LoginControls_DefaultPasswordLabelText'); + } + public function getPasswordRecoveryIconUrl() + { + return $this->getViewState('PasswordRecoveryIconUrl',''); + } + public function setPasswordRecoveryIconUrl($value) + { + $this->setViewState('PasswordRecoveryIconUrl',TPropertyValue::ensureString($value),''); + } + public function getPasswordRecoveryText() + { + return $this->getViewState('PasswordRecoveryText',''); + } + public function setPasswordRecoveryText($value) + { + $this->setViewState('PasswordRecoveryText',TPropertyValue::ensureString($value),''); + } + public function getPasswordRecoveryUrl() + { + return $this->getViewState('PasswordRecoveryUrl',''); + } + public function setPasswordRecoveryUrl($value) + { + $this->setViewState('PasswordRecoveryUrl',TPropertyValue::ensureString($value),''); + } + public function getPasswordRequiredErrorMessage() + { + return $this->getViewState('PasswordRequiredErrorMessage','Login_DefaultPasswordRequiredErrorMessage'); + } + public function setPasswordRequiredErrorMessage($value) + { + $this->setViewState('PasswordRequiredErrorMessage',TPropertyValue::ensureString($value),'Login_DefaultPasswordRequiredErrorMessage'); + } + public function getRememberMeSet() + { + return $this->getViewState('RememberMeSet',false); + } + public function setRememberMeSet($value) + { + $this->setViewState('RememberMeSet',TPropertyValue::ensureBoolean($value),false); + } + public function getRememberMeText() + { + return $this->getViewState('RememberMeText','Login_DefaultRememberMeText'); + } + public function setRememberMeText($value) + { + $this->setViewState('RememberMeText',TPropertyValue::ensureString($value),'Login_DefaultRememberMeText'); + } + public function getTagKey() + { + //return HtmlTextWriterTag.Table; + } + public function getTemplateContainer() + { + $this->ensureChildControls(); + return $this->_templateContainer; + } + public function getTextBoxStyle() + { + return $this->_textBoxStyle; + } + public function getTextLayout() + { + return $this->getViewState('TextLayout',TLoginTextLayout::TextOnLeft); + } + public function setTextLayout($value) + { + $this->setViewState('TextLayout',TPropertyValue::ensureEnum($value,'TLoginTextLayout'),TLoginTextLayout::TextOnLeft); + // parent::ChildControlsCreated=false; + } + public function getTitleText() + { + return $this->getViewState('TitleText','Login_DefaultTitleText'); + } + public function setTitleText($value) + { + $this->setViewState('TitleText',TPropertyValue::ensureString($value),'Login_DefaultTitleText'); + } + public function getTitleTextStyle() + { + return $this->_titleTextStyle; + } + public function getUserName() + { + return $this->getViewState('UserName',''); + } + public function setUserName($value) + { + $this->setViewState('UserName',TPropertyValue::ensureString($value),''); + } + public function getUserNameInternal() + { + $this->_userNameInternal; + } + public function getUserNameLabelText() + { + return $this->getViewState('UserNameLabelText','Login_DefaultUserNameLabelText'); + } + public function setUserNameLabelText($value) + { + $this->setViewState('UserNameLabelText',TPropertyValue::ensureString($value),'Login_DefaultUserNameLabelText'); + } + public function getUserNameRequiredErrorMessage() + { + return $this->getViewState('UserNameRequiredErrorMessage','Login_DefaultUserNameRequiredErrorMessage'); + } + public function setUserNameRequiredErrorMessage($value) + { + $this->setViewState('UserNameRequiredErrorMessage',TPropertyValue::ensureString($value),'Login_DefaultUserNameRequiredErrorMessage'); + } + public function getValidatorTextStyle() + { + return $this->_validatorTextStyle; + } + public function getVisibleWhenLoggedIn() + { + return $this->getViewState('VisibleWhenLoggedIn',true); + } + public function setVisibleWhenLoggedIn($value) + { + $this->setViewState('VisibleWhenLoggedIn',TPropertyValue::ensureBoolean($value),true); + } + private function attemptLogin() + { + + } + private function authenticateUsingMembershipProvider($param) + { + // e.Authenticated = LoginUtil.GetProvider(this.MembershipProvider).ValidateUser(this.UserNameInternal,this.PasswordInternal); + } + private function getRedirectUrl() + { + + } + // protected function loadViewState($savedState) + // { + + // } + public function onAuthenticate($param) + { + // AuthenticateEventHandler handler1 = (AuthenticateEventHandler) base.Events[Login.EventAuthenticate]; + $handler1; + if ($handler1!==null) + { + $handler1($this,$param); + } + else + { + $this->authenticateUsingMembershipProvider($param); + } + } + public function onBubbleEvent($sender,$param) + { + // bool flag1 = false; + // if (e is CommandEventArgs) + // { + // CommandEventArgs args1 = (CommandEventArts) e; + // if (string.Equals(args1.CommandName,Login.LoginButtonCommandName,StringComparison.OrdinalIgnoreCase)) + // { + // this.AttemptLogin(); + // flag1=true; + // } + // } + // return flag1; + } + public function onLoggedIn($param) + { + // EventHandler handler1 = (EventHandler) base.Events[Login.EventLoggedIn]; + if ($handler1!==null) + { + $handler1($this,$param); + } + } + public function onLoggingIn($param) + { + // LoginCancelEventHandler handler1 = (LoginCancelEventHandler) base.Events[Login.EventLoggingIn]; + if ($handler1!==null) + { + $handler1($this,$param); + } + } + public function onLoginError($param) + { + // EventHandler handler1 = (EventHandler) base.Events[Login.EventLoginError]; + if ($handler1!==null) + { + $handler1($this,$param); + } + } + private function onLoginPage() + { + + } + public function onPreRender($param) + { + echo TVarDumper::dump(__METHOD__,10,true); + parent::onPreRender($param); + $this->setEditableChildProperties(); + $this->_templateContainer->setVisible(true); + // $this->getPage()->getRequest()->IsAuthenticated() is not created yet! + // $this->_templateContainer->Visible = ($this->getVisibleWhenLoggedIn() || !$this->getPage()->getRequest()->IsAuthenticated()) || $this->onLoginPage(); + } + private function passwordTextChanged($sender,$param) + { + $this->_password = $sender->Text; + } + private function redirectedFromFailedLogin() + { + + } + private function rememberMeCheckedChanged($sender,$param) + { + $this->_rememberMeSet = $sender->Checked; + } + public function render($writer) + { + echo TVarDumper::dump(__METHOD__,10,true); + if ($this->_templateContainer->getVisible()) + { + $this->setChildProperties(); + // $this->renderControl($writer); + // $this->render($writer); + } + } + public function createChildControls() + { + echo TVarDumper::dump(__METHOD__,10,true); + $this->getControls()->clear(); + $this->_templateContainer = new TLoginContainer($this); + $template1 = new TLoginTemplate($this); + $template1->instantiateIn($this->_templateContainer); + $this->_templateContainer->setVisible(true); + $this->getControls()->add($this->_templateContainer); + $this->setEditableChildProperties(); + } + // protected function saveViewState() + // { + + // } + public function setChildProperties() + { + echo TVarDumper::dump(__METHOD__,10,true); + $this->setCommonChildProperties(); + if ($this->_layoutTemplate === null) + { + $this->setDefaultTemplateChildProperties(); + } + } + private function setCommonChildProperties() + { + echo TVarDumper::dump(__METHOD__,10,true); + /* @VAR $container1 TLoginContainer */ + $container1 = $this->_templateContainer; + + } + private function setDefaultTemplateChildProperties() + { + echo TVarDumper::dump(__METHOD__,10,true); + /* @VAR $container1 TLoginContainer */ + $container1 = $this->_templateContainer; + $container1->getBorderTable()->setCellPadding = $this->getBorderPadding(); + $container1->getBorderTable()->setCellSpacing = 0; + $literal1 = $container1->getTitle(); + $text1 = $this->getTitleText(); + if (strlen($text1)>0) + { + $literal1->setText($text1); + } + } + private function setEditableChildProperties() + { + + } + protected function trackViewState() + { + + } + private function userNameTextChanged($sender,$param) + { + $this->_userName = $sender->Text; + } +} + +class TLoginTemplate implements ITemplate +{ + private $_owner; + + public function __construct($owner) + { + echo TVarDumper::dump(__METHOD__,10,true); + $this->_owner=$owner; + } + + private function createControls(TLoginContainer $loginContainer) + { + echo TVarDumper::dump(__METHOD__,10,true); + $text1 = $this->_owner->getUniqueID(); + $literal1 = new TLiteral(); + $loginContainer->setTitle($literal1); + $literal2 = new TLiteral(); + $loginContainer->setInstruction($literal2); + $box1 = new TTextBox(); + $box1->setID('UserName'); + $loginContainer->setUserNameTextBox($box1); + $label1 = new TLabel(); + $loginContainer->setUserNameLabel($label1); + $flag1 = true; + $validator1 = new TRequiredFieldValidator(); + $validator1->setID('UserNameRequired'); + $validator1->setValidationGroup($text1); + $validator1->setControlToValidate($box1->getID()); + $validator1->setDisplay(TValidatorDisplayStyle::Fixed); + $validator1->setText('LoginControls_DefaultRequiredFieldValidatorText'); + $validator1->setEnabled($flag1); + $validator1->setVisible($flag1); + $loginContainer->setUserNameRequired($validator1); + } + private function layoutControls(TLoginContainer $loginContainer) + { + echo TVarDumper::dump(__METHOD__,10,true); + // $orientation1 = $this->_owner->getOrientation(); + // $layout1 = new TLoginTextLayout(); + // if (($orientation1 === tl)) + // $test = new TLogin(); + $this->layoutHorizontalTextOnLeft($loginContainer); + + } + private function layoutHorizontalTextOnLeft(TLoginContainer $loginContainer) + { + echo TVarDumper::dump(__METHOD__,10,true); + $table1 = new TTable(); + $table1->setCellPadding(0); + $row1 = new TTableRow(); + $cell1 = new TTableCell(); + $cell1->setColumnSpan(6); + $cell1->setHorizontalAlign(THorizontalAlign::Center); + $cell1->getControls()->add($loginContainer->getTitle()); + $row1->getCells()->add($cell1); + $table1->getRows()->add($row1); + + $row1 = new TTableRow();//Disapperingtablerow + $cell1 = new TTableCell(); + $cell1->setColumnSpan(6); + $cell1->setHorizontalAlign(THorizontalAlign::Center); + $cell1->getControls()->add($loginContainer->getInstruction()); + $row1->getCells()->add($cell1); + $table1->getRows()->add($row1); + + $row1 = new TTableRow();//Disapperingtablerow + $cell1 = new TTableCell(); + // if ($this->_owner->getConvertingToTemplate) + // { + // $loginContainer->getUserNameLabel()->RenderAsLabel = true; + // } + $cell1->getControls()->add($loginContainer->getUserNameLabel()); + $row1->getCells()->add($cell1); + + $cell1 = new TTableCell(); + $cell1->getControls()->add($loginContainer->getUserNameTextBox()); + $cell1->getControls()->add($loginContainer->getUserNameRequired()); + $row1->getCells()->add($cell1); + + $loginContainer->setLayoutTable($table1); + // $loginContainer->setBorderTable($table2); + // $loginContainer->getControls()->add($table2); + $loginContainer->getControls()->add($table1); + } + private function layoutHorizontalTextOnTop(TLoginContainer $loginContainer) + { + echo TVarDumper::dump(__METHOD__,10,true); + } + private function layoutVerticalTextOnLeft(TLoginContainer $loginContainer) + { + echo TVarDumper::dump(__METHOD__,10,true); + } + private function layoutVerticalTextOnTop(TLoginContainer $loginContainer) + { + echo TVarDumper::dump(__METHOD__,10,true); + } + public function instantiateIn($parent) + { + echo TVarDumper::dump(__METHOD__,10,true); + $this->createControls($parent); + $this->layoutControls($parent); + } + +} + +Prado::using('System.Web.UI.WebControls.TLoginUtil'); +class TLoginContainer extends TGenericContainer +{ + private $_convertingToTemplate=false; + private $_createUserIcon; + private $_createUserLink; + private $_createUserLinkSeparator; + private $_failureTextLabel; + private $_helpPageIcon; + private $_helpPageLink; + private $_imageButton; + private $_instruction; + private $_linkButton; + private $_passwordLabel; + private $_passwordRecoveryIcon; + private $_passwordRecoveryLink; + private $_passwordRecoveryLinkSeparator; + private $_passwordRequired; + private $_passwordTextBox; + private $_pushButton; + private $_rememberMeCheckBox; + private $_title; + private $_userNameLabel; + private $_userNameRequired; + private $_userNameTextBox; + + public function getConvertingToTemplate() + { + return parent::getOwner()->getConvertingToTemplate(); + } + public function getCreateUserIcon() + { + return $this->_createUserIcon; + } + public function setCreateUserIcon(TImage $value) + { + $this->_createUserIcon = TPropertyValue::ensureObject($value); + } + public function getCreateUserLink() + { + return $this->_createUserLink; + } + public function setCreateUserLink(THyperLink $value) + { + $this->_createUserLink = TPropertyValue::ensureObject($value); + } + public function getCreateUserLinkSeparator() + { + return $this->_createUserLinkSeparator; + } + public function setCreateUserLinkSeparator(TLiteral $value) + { + $this->_createUserLinkSeparator = TPropertyValue::ensureObject($value); + } + public function getFailureTextLabel() + { + return $this->_failureTextLabel; + } + public function setFailureTextLabel(TControl $value) + { + $this->_failureTextLabel = TPropertyValue::ensureObject($value); + } + public function getHelpPageIcon() + { + return $this->_helpPageIcon; + } + public function setHelpPageIcon(TImage $value) + { + $this->_helpPageIcon = TPropertyValue::ensureObject($value); + } + public function getHelpPageLink() + { + return $this->_helpPageLink; + } + public function setHelpPageLink(THyperLink $value) + { + $this->_helpPageLink = TPropertyValue::ensureObject($value); + } + public function getImageButton() + { + return $this->_imageButton; + } + public function setImageButton(TImageButton $value) + { + $this->_imageButton = TPropertyValue::ensureObject($value); + } + public function getInstruction() + { + return $this->_instruction; + } + public function setInstruction(TLiteral $value) + { + $this->_instruction = TPropertyValue::ensureObject($value); + } + public function getLinkButton() + { + return $this->_linkButton; + } + public function setLinkButton(TLinkButton $value) + { + $this->_linkButton = TPropertyValue::ensureObject($value); + } + public function getPasswordLabel() + { + return $this->_passwordLabel; + } + public function setPasswordLabel(TLabel $value) + { + $this->_passwordLabel = TPropertyValue::ensureObject($value); + } + public function getPasswordRecoveryIcon() + { + return $this->_passwordRecoveryIcon; + } + public function setPasswordRecoveryIcon(TImage $value) + { + $this->_passwordRecoveryIcon = TPropertyValue::ensureObject($value); + } + public function getPasswordRecoveryLink() + { + return $this->_passwordRecoveryLink; + } + public function setPasswordRecoveryLink(THyperLink $value) + { + $this->_passwordRecoveryLink = TPropertyValue::ensureObject($value); + } + public function getPasswordRecoveryLinkSeparator() + { + return $this->_passwordRecoveryLinkSeparator; + } + public function setPasswordRecoveryLinkSeparator($value) + { + $this->_passwordRecoveryLinkSeparator = TPropertyValue::ensureObject($value); + } + public function getPasswordRequired() + { + return $this->_passwordRequired; + } + public function setPasswordRequired(TRequiredFieldValidator $value) + { + $this->_passwordRequired = TPropertyValue::ensureObject($value); + } + public function getPasswordTextBox() + { + return $this->_passwordTextBox; + } + public function setPasswordTextBox(TControl $value) + { + $this->_passwordTextBox = TPropertyValue::ensureObject($value); + } + public function getPushButton() + { + return $this->_pushButton; + } + public function setPushButton(TControl $value) + { + $this->_pushButton = TPropertyValue::ensureObject($value); + } + public function getRememberMeCheckBox() + { + return $this->_rememberMeCheckBox; + } + public function setRememberMeCheckBox(TControl $value) + { + $this->_rememberMeCheckBox = TPropertyValue::ensureObject($value); + } + public function getTitle() + { + return $this->_title; + } + public function setTitle(TLiteral $value) + { + $this->_title = TPropertyValue::ensureObject($value); + } + public function getUserNameLabel() + { + return $this->_userNameLabel; + } + public function setUserNameLabel(TLabel $value) + { + $this->_userNameLabel = TPropertyValue::ensureObject($value); + } + public function getUserNameRequired() + { + return $this->_userNameRequired; + } + public function setUserNameRequired(TRequiredFieldValidator $value) + { + $this->_userNameRequired = TPropertyValue::ensureObject($value); + } + public function getUserNameTextBox() + { + return $this->_userNameTextBox; + } + public function setUserNameTextBox(TControl $value) + { + $this->_userNameTextBox = TPropertyValue::ensureObject($value); + } +} + +/** + * TLoginFailureAction class. + * Determines the page that the user will go to when a login attempt is not successful. + * + * RedirectToLoginPage Redirects the user to the login page defined in the site's + * configuration files. + * Refresh Refreshes the current page so that the Login control can display + * an error message. + * + * @author Jason Ragsdale + * @version $Id: TLoginFailureAction.php 1398 2006-09-08 19:31:03Z xue $ + * @package System.Web.UI.WebControls + * @since 3.1 + */ +class TLoginFailureAction extends TEnumerable +{ + const RedirectToLoginPage='RedirectToLoginPage'; + const Refresh='Refresh'; +} +/** + * TLoginTextLayout class. + * Specifies the position of labels relative to their associated text boxes for the Login control. + * + * TextOnLeft Places labels to the left of the associated text entry fields. + * TextOnTop Places labels above the associated text entry fields. + * + * @author Jason Ragsdale + * @version $Id: TLoginTextLayout.php 1398 2006-09-08 19:31:03Z xue $ + * @package System.Web.UI.WebControls + * @since 3.1 + */ +class TLoginTextLayout extends TEnumerable +{ + const TextOnLeft='TextOnLeft'; + const TextOnTop='TextOnTop'; +} +/** + * TLogoutAction class. + * Indicates the page that the user will be directed to when he or she logs out of the Web site. + * + * Redirect Redirects the user to a specified URL. + * RedirectToLoginPage Redirects the user to the login page defined in the site's configuration files. + * Refresh Reloads the current page with the user logged out. + * + * @author Jason Ragsdale + * @version $Id: TLogoutAction.php 1398 2006-09-08 19:31:03Z xue $ + * @package System.Web.UI.WebControls + * @since 3.1 + */ +class TLogoutAction extends TEnumerable +{ + const Redirect='Redirect'; + const RedirectToLoginPage='RedirectToLoginPage'; + const Refresh='Refresh'; } ?> \ No newline at end of file diff --git a/framework/Web/UI/WebControls/TLoginUtil.php b/framework/Web/UI/WebControls/TLoginUtil.php new file mode 100644 index 00000000..073f580d --- /dev/null +++ b/framework/Web/UI/WebControls/TLoginUtil.php @@ -0,0 +1,173 @@ +'; + const _userNameReplacementKey='<%\s*UserName\s*%>'; + + // public function onSendingMailDelegate($param) + // { + // + // } + // public function onSendMailErrorDelegate($param) + // { + // + // } + public static function applyStyleToLiteral(TLiteral $literal,$text,$setTableCellVisible) + { + + } + public static function copyBorderStyles(TControl $control,$style) + { + if (($style!==null) && strlen($providerName)!==0) + { + $control->BorderStyle = $style->BorderStyle; + $control->BorderColor = $style->BorderColor; + $control->BorderWidth = $style->BorderWidth; + $control->BackColor = $style->BackColor; + $control->CssClass = $style->CssClass; + } + } + public static function copyStyleToInnerControl(TControl $control,$style) + { + if (($style!==null) && strlen($providerName)!==0) + { + $control->ForeColor = $style->ForeColor; + $control->Font = $style->Font; + } + } + private static function createMailMessage($email,$userName,$password,$mailDefinition,$defaultSubject,$defaultBody,$owner) + { + + } + public static function getProvider($providerName) + { + if (strlen($providerName)===0) + { + return TMembership::getProvider(); + } + $provider1 = TMembership::getProviders($providerName); + if ($provider1===null) + { + throw new TException('WebControl_CantFindProvider'); + } + return $provider1; + } + public static function getUser(TControl $c) + { + + } + public static function getUserName(TControl $c) + { + + } + public static function sendPasswordMail($email,$userName,$password,$mailDefinition,$defaultSubject,$defaultBody,$onSendmailDelegate,$onSendMailErrorDelegate,$owner) + { + + } + public static function setTableCellStyle(TControl $control,$style) + { + // $control1 = $control->Parent; + // if ($control1!==null) + // { + // $control1->ApplyStyle=$style; + // } + } + public static function setTableCellVisible(TControl $control,$visible) + { + $control1 = $control->Parent; + if ($control1!==null) + { + $control1->Visible=$visible; + } + } +} +class TDisappearingTableRow extends TTableRow +{ + public function render($writer) + { + // bool flag1 = false; + // foreach (TableCell cell1 in this.Cells) + // { + // if (cell1.Visible) + // { + // flag1=true; + // break; + // } + // } + // if (flag1) + // { + // base.Render(writer); + // } + } +} +class TGenericContainer extends TWebControl +{ + private $_borderTable; + private $_convertingToTemplate=false; + private $_layoutTable; + private $_owner; + private $_usingDefaultTemplate=false; + + public function getBorderTable() + { + return $this->_borderTable; + } + public function setBorderTable($value) + { + $this->_borderTable = $value; + } + public function getConvertingToTemplate() + { + return $this->_convertingToTemplate; + } + public function getLayoutTable() + { + return $this->_layoutTable; + } + public function setLayoutTable($value) + { + $this->_layoutTable = $value; + } + public function getOwner() + { + return $this->_owner; + } + public function getUsingDefaultTemplate() + { + return $this->_usingDefaultTemplate; + } + + public function __construct($owner) + { + $this->_owner=$owner; + } + public function findControl($id,$required,$errorResourceKey) + { + + } + protected function findOptionalControl($id) + { + + } + protected function findRequiredControl($id,$errorResourceKey) + { + + } + public function focus() + { + + } + public function render($writer) + { + + } + private function renderContentsInUnitTable($writer) + { + + } + protected function verifyControlNotPresent($id,$errorResourceKey) + { + + } +} +?> \ No newline at end of file -- cgit v1.2.3