llurlwhitelist.cpp
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:5k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llurlwhitelist.cpp
  3.  * @author Callum Prentice
  4.  * @brief maintains a "white list" of acceptable URLS that are stored on disk
  5.  *
  6.  * $LicenseInfo:firstyear=2005&license=viewergpl$
  7.  * 
  8.  * Copyright (c) 2005-2010, Linden Research, Inc.
  9.  * 
  10.  * Second Life Viewer Source Code
  11.  * The source code in this file ("Source Code") is provided by Linden Lab
  12.  * to you under the terms of the GNU General Public License, version 2.0
  13.  * ("GPL"), unless you have obtained a separate licensing agreement
  14.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  15.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  16.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  17.  * 
  18.  * There are special exceptions to the terms and conditions of the GPL as
  19.  * it is applied to this Source Code. View the full text of the exception
  20.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  21.  * online at
  22.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  23.  * 
  24.  * By copying, modifying or distributing this software, you acknowledge
  25.  * that you have read and understood your obligations described above,
  26.  * and agree to abide by those obligations.
  27.  * 
  28.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  29.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  30.  * COMPLETENESS OR PERFORMANCE.
  31.  * $/LicenseInfo$
  32.  */
  33. #include "llviewerprecompiledheaders.h"
  34. #include "llurlwhitelist.h"
  35. #include <iostream>
  36. #include <fstream>
  37. LLUrlWhiteList* LLUrlWhiteList::sInstance = 0;
  38. ///////////////////////////////////////////////////////////////////////////////
  39. //
  40. LLUrlWhiteList::LLUrlWhiteList () :
  41. mLoaded ( false ),
  42. mFilename ( "url_whitelist.ini" ),
  43. mUrlList ( 0 ),
  44. mCurIndex ( 0 )
  45. {
  46. }
  47. ///////////////////////////////////////////////////////////////////////////////
  48. //
  49. LLUrlWhiteList::~LLUrlWhiteList ()
  50. {
  51. }
  52. ///////////////////////////////////////////////////////////////////////////////
  53. //static
  54. void LLUrlWhiteList::initClass ()
  55. {
  56.     if ( ! sInstance )
  57. {
  58.         sInstance = new LLUrlWhiteList ();
  59. }
  60. }
  61. //static
  62. void LLUrlWhiteList::cleanupClass ()
  63. {
  64. delete sInstance;
  65. sInstance = NULL;
  66. }
  67. LLUrlWhiteList* LLUrlWhiteList::getInstance ()
  68. {
  69. return sInstance;
  70. }
  71. ///////////////////////////////////////////////////////////////////////////////
  72. //
  73. bool LLUrlWhiteList::load ()
  74. {
  75. // don't load if we're already loaded
  76. if ( mLoaded )
  77. return ( true );
  78. // remove current entries before we load over them
  79. clear ();
  80. // build filename for each user
  81. std::string resolvedFilename = gDirUtilp->getExpandedFilename ( LL_PATH_PER_SL_ACCOUNT, mFilename );
  82. // open a file for reading
  83. llifstream file ( resolvedFilename );
  84. if ( file.is_open () )
  85. {
  86. // add each line in the file to the list
  87. std::string line;
  88. while ( std::getline ( file, line ) )
  89. {
  90. addItem ( line, false );
  91. };
  92. file.close ();
  93. // flag as loaded
  94. mLoaded = true;
  95. return true;
  96. };
  97. return false;
  98. }
  99. ///////////////////////////////////////////////////////////////////////////////
  100. //
  101. bool LLUrlWhiteList::save ()
  102. {
  103. // build filename for each user
  104. std::string resolvedFilename = gDirUtilp->getExpandedFilename ( LL_PATH_PER_SL_ACCOUNT, mFilename );
  105. if (resolvedFilename.empty())
  106. {
  107. llinfos << "No per-user dir for saving URL whitelist - presumably not logged in yet.  Skipping." << llendl;
  108. return false;
  109. }
  110. // open a file for writing
  111. llofstream file ( resolvedFilename );
  112. if ( file.is_open () )
  113. {
  114. // for each entry we have
  115. for ( string_list_t::iterator iter = mUrlList.begin (); iter != mUrlList.end (); ++iter )
  116. {
  117. file << ( *iter ) << std::endl;
  118. }
  119. file.close ();
  120. return true;
  121. };
  122. return false;
  123. }
  124. ///////////////////////////////////////////////////////////////////////////////
  125. //
  126. bool LLUrlWhiteList::clear ()
  127. {
  128. mUrlList.clear ();
  129. mCurIndex = 0;
  130. return true;
  131. }
  132. std::string url_cleanup(std::string pattern)
  133. {
  134. LLStringUtil::trim(pattern);
  135. S32 length = pattern.length();
  136. S32 position = 0;
  137. std::string::reverse_iterator it = pattern.rbegin();
  138. ++it; // skip last char, might be '/'
  139. ++position;
  140. for (; it < pattern.rend(); ++it)
  141. {
  142. char c = *it;
  143. if (c == '/')
  144. {
  145. // found second to last '/'
  146. S32 desired_length = length - position;
  147. LLStringUtil::truncate(pattern, desired_length);
  148. break;
  149. }
  150. ++position;
  151. }
  152. return pattern;
  153. }
  154. ///////////////////////////////////////////////////////////////////////////////
  155. //
  156. bool LLUrlWhiteList::addItem ( const std::string& itemIn, bool saveAfterAdd )
  157. {
  158. std::string item = url_cleanup(itemIn);
  159. mUrlList.push_back ( item );
  160. // use this when all you want to do is call addItem ( ... ) where necessary
  161. if ( saveAfterAdd )
  162. save ();
  163. return true;
  164. }
  165. ///////////////////////////////////////////////////////////////////////////////
  166. //
  167. bool LLUrlWhiteList::getFirst ( std::string& valueOut )
  168. {
  169. if ( mUrlList.size () == 0 )
  170. return false;
  171. mCurIndex = 0;
  172. valueOut = mUrlList[mCurIndex++];
  173. return true;
  174. }
  175. ///////////////////////////////////////////////////////////////////////////////
  176. //
  177. bool LLUrlWhiteList::getNext ( std::string& valueOut )
  178. {
  179. if ( mCurIndex >= mUrlList.size () )
  180. return false;
  181. valueOut = mUrlList[mCurIndex++];
  182. return true;
  183. }
  184. ///////////////////////////////////////////////////////////////////////////////
  185. //
  186. bool LLUrlWhiteList::containsMatch ( const std::string& patternIn )
  187. {
  188. return false;
  189. }