Open-Transactions  0.93.0-ge03d287
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
OTPaths.hpp
Go to the documentation of this file.
1 /************************************************************
2  *
3  * OTPaths.hpp
4  *
5  */
6 
7 /************************************************************
8  -----BEGIN PGP SIGNED MESSAGE-----
9  Hash: SHA1
10 
11  * OPEN TRANSACTIONS
12  *
13  * Financial Cryptography and Digital Cash
14  * Library, Protocol, API, Server, CLI, GUI
15  *
16  * -- Anonymous Numbered Accounts.
17  * -- Untraceable Digital Cash.
18  * -- Triple-Signed Receipts.
19  * -- Cheques, Vouchers, Transfers, Inboxes.
20  * -- Basket Currencies, Markets, Payment Plans.
21  * -- Signed, XML, Ricardian-style Contracts.
22  * -- Scripted smart contracts.
23  *
24  * Copyright (C) 2010-2013 by "Fellow Traveler" (A pseudonym)
25  *
26  * EMAIL:
28  *
29  * BITCOIN: 1NtTPVVjDsUfDWybS4BwvHpG2pdS9RnYyQ
30  *
31  * KEY FINGERPRINT (PGP Key in license file):
32  * 9DD5 90EB 9292 4B48 0484 7910 0308 00ED F951 BB8E
33  *
34  * OFFICIAL PROJECT WIKI(s):
35  * https://github.com/FellowTraveler/Moneychanger
36  * https://github.com/FellowTraveler/Open-Transactions/wiki
37  *
38  * WEBSITE:
39  * http://www.OpenTransactions.org/
40  *
41  * Components and licensing:
42  * -- Moneychanger..A Java client GUI.....LICENSE:.....GPLv3
43  * -- otlib.........A class library.......LICENSE:...LAGPLv3
44  * -- otapi.........A client API..........LICENSE:...LAGPLv3
45  * -- opentxs/ot....Command-line client...LICENSE:...LAGPLv3
46  * -- otserver......Server Application....LICENSE:....AGPLv3
47  * Github.com/FellowTraveler/Open-Transactions/wiki/Components
48  *
49  * All of the above OT components were designed and written by
50  * Fellow Traveler, with the exception of Moneychanger, which
51  * was contracted out to Vicky C ([email protected]).
52  * The open-source community has since actively contributed.
53  *
54  * -----------------------------------------------------
55  *
56  * LICENSE:
57  * This program is free software: you can redistribute it
58  * and/or modify it under the terms of the GNU Affero
59  * General Public License as published by the Free Software
60  * Foundation, either version 3 of the License, or (at your
61  * option) any later version.
62  *
63  * ADDITIONAL PERMISSION under the GNU Affero GPL version 3
64  * section 7: (This paragraph applies only to the LAGPLv3
65  * components listed above.) If you modify this Program, or
66  * any covered work, by linking or combining it with other
67  * code, such other code is not for that reason alone subject
68  * to any of the requirements of the GNU Affero GPL version 3.
69  * (==> This means if you are only using the OT API, then you
70  * don't have to open-source your code--only your changes to
71  * Open-Transactions itself must be open source. Similar to
72  * LGPLv3, except it applies to software-as-a-service, not
73  * just to distributing binaries.)
74  *
75  * Extra WAIVER for OpenSSL, Lucre, and all other libraries
76  * used by Open Transactions: This program is released under
77  * the AGPL with the additional exemption that compiling,
78  * linking, and/or using OpenSSL is allowed. The same is true
79  * for any other open source libraries included in this
80  * project: complete waiver from the AGPL is hereby granted to
81  * compile, link, and/or use them with Open-Transactions,
82  * according to their own terms, as long as the rest of the
83  * Open-Transactions terms remain respected, with regard to
84  * the Open-Transactions code itself.
85  *
86  * Lucre License:
87  * This code is also "dual-license", meaning that Ben Lau-
88  * rie's license must also be included and respected, since
89  * the code for Lucre is also included with Open Transactions.
90  * See Open-Transactions/src/otlib/lucre/LUCRE_LICENSE.txt
91  * The Laurie requirements are light, but if there is any
92  * problem with his license, simply remove the Lucre code.
93  * Although there are no other blind token algorithms in Open
94  * Transactions (yet. credlib is coming), the other functions
95  * will continue to operate.
96  * See Lucre on Github: https://github.com/benlaurie/lucre
97  * -----------------------------------------------------
98  * You should have received a copy of the GNU Affero General
99  * Public License along with this program. If not, see:
100  * http://www.gnu.org/licenses/
101  *
102  * If you would like to use this software outside of the free
103  * software license, please contact FellowTraveler.
104  * (Unfortunately many will run anonymously and untraceably,
105  * so who could really stop them?)
106  *
107  * DISCLAIMER:
108  * This program is distributed in the hope that it will be
109  * useful, but WITHOUT ANY WARRANTY; without even the implied
110  * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
111  * PURPOSE. See the GNU Affero General Public License for
112  * more details.
113 
114  -----BEGIN PGP SIGNATURE-----
115  Version: GnuPG v1.4.9 (Darwin)
116 
117  iQIcBAEBAgAGBQJRSsfJAAoJEAMIAO35UbuOQT8P/RJbka8etf7wbxdHQNAY+2cC
118  vDf8J3X8VI+pwMqv6wgTVy17venMZJa4I4ikXD/MRyWV1XbTG0mBXk/7AZk7Rexk
119  KTvL/U1kWiez6+8XXLye+k2JNM6v7eej8xMrqEcO0ZArh/DsLoIn1y8p8qjBI7+m
120  aE7lhstDiD0z8mwRRLKFLN2IH5rAFaZZUvj5ERJaoYUKdn4c+RcQVei2YOl4T0FU
121  LWND3YLoH8naqJXkaOKEN4UfJINCwxhe5Ke9wyfLWLUO7NamRkWD2T7CJ0xocnD1
122  sjAzlVGNgaFDRflfIF4QhBx1Ddl6wwhJfw+d08bjqblSq8aXDkmFA7HeunSFKkdn
123  oIEOEgyj+veuOMRJC5pnBJ9vV+7qRdDKQWaCKotynt4sWJDGQ9kWGWm74SsNaduN
124  TPMyr9kNmGsfR69Q2Zq/FLcLX/j8ESxU+HYUB4vaARw2xEOu2xwDDv6jt0j3Vqsg
125  x7rWv4S/Eh18FDNDkVRChiNoOIilLYLL6c38uMf1pnItBuxP3uhgY6COm59kVaRh
126  nyGTYCDYD2TK+fI9o89F1297uDCwEJ62U0Q7iTDp5QuXCoxkPfv8/kX6lS6T3y9G
127  M9mqIoLbIQ1EDntFv7/t6fUTS2+46uCrdZWbQ5RjYXdrzjij02nDmJAm2BngnZvd
128  kamH0Y/n11lCvo1oQxM+
129  =uSzz
130  -----END PGP SIGNATURE-----
131  **************************************************************/
132 
133 #ifndef OPENTXS_CORE_OTPATHS_HPP
134 #define OPENTXS_CORE_OTPATHS_HPP
135 
137 
138 // All directories have a trailing "/" while files do not. <== remember to
139 // enforce this!!!
140 
141 namespace opentxs
142 {
143 
144 class OTPaths
145 {
146 private:
147  EXPORT OTPaths();
148 
149  static OTSettings s_settings;
150 
151  static OTString s_strAppBinaryFolder;
152  static OTString s_strHomeFolder;
153  static OTString s_strAppDataFolder;
154  static OTString s_strGlobalConfigFile;
155  static OTString s_strPrefixFolder;
156  static OTString s_strScriptsFolder;
157 
158 public:
159  EXPORT ~OTPaths();
160 
161  EXPORT static const OTString& AppBinaryFolder(); // Adding this for Mac,
162  // since it's sandboxed.
163  // (Don't want to put
164  // scripts in data folder.)
165  EXPORT static void SetAppBinaryFolder(OTString strLocation); // Note:
166  // Android
167  // should set
168  // this as the
169  // res/raw
170  // folder.
171 
172  EXPORT static const OTString& HomeFolder(); // Adding this for Android,
173  // since it's sandboxed. Android
174  // will provide its own data
175  // folder here.
176  EXPORT static void SetHomeFolder(OTString strLocation); // The AppDataFolder
177  // (below) will be
178  // created from this
179  // folder, plus .ot
180  // or whatever.
181 
182  EXPORT static const OTString& AppDataFolder(); // eg. /home/user/.ot/
183  // (auto).
184  EXPORT static const OTString& GlobalConfigFile(); // ie. AppDataFolder() +
185  // ot_config.cfg
186  EXPORT static const OTString& PrefixFolder(); // If not set, will run
187  // LoadSetPrefixFolder with
188  // default values.
189  EXPORT static const OTString& ScriptsFolder(); // If not set, will run
190  // LoadSetScriptsFolder with
191  // default values.
192 
193  // The LoadSet Functions will update the static values.
194 
195  EXPORT static bool LoadSetPrefixFolder // eg. /usr/local/ (cannot be
196  // relative);
197  (OTSettings& config = s_settings, // optional
198  const OTString& strPrefixFolder = "" // optional
199  // const bool& bIsRelative = false
200  );
201 
202  EXPORT static bool LoadSetScriptsFolder // ie. PrefixFolder() + [if (NOT
203  // Android) "lib/opentxs/" ]
204  (OTSettings& config = s_settings, // optional
205  const OTString& strScriptsFolder = "", // optional
206  const bool& bIsRelative = true // optional
207  );
208 
209  EXPORT static bool Get(OTSettings& config, const OTString& strSection,
210  const OTString& strKey, OTString& out_strVar,
211  bool& out_bIsRelative, bool& out_bKeyExist);
212 
213  EXPORT static bool Set(OTSettings& config, const OTString& strSection,
214  const OTString& strKey, const OTString& strValue,
215  const bool& bIsRelative, bool& out_bIsNewOrUpdated,
216  const OTString& strComment = "");
217 
218  EXPORT static bool FixPath(const OTString& strPath,
219  OTString& out_strFixedPath,
220  const bool& bIsFolder);
221  EXPORT static bool PathExists(const OTString& strPath); // returns true if
222  // path exists.
223 
224  EXPORT static bool FileExists(const OTString& strFilePath,
225  int64_t& nFileLength); // returns true if file
226  // exists and its
227  // length.
228  EXPORT static bool FolderExists(const OTString& strFolderPath); // returns
229  // true if
230  // folder
231  // exists
232 
233  EXPORT static bool ConfirmCreateFolder(const OTString& strExactPath,
234  bool& out_Exists, bool& out_IsNew);
235 
236  EXPORT static bool ToReal(const OTString& strExactPath,
237  OTString& out_strCanonicalPath);
238  EXPORT static bool GetExecutable(OTString& strExecutablePath);
239  EXPORT static bool GetCurrentWorking(OTString& strCurrentWorkingPath);
240  EXPORT static bool GetHomeFromSystem(OTString& out_strHomeFolder);
241 
242 #ifdef _WIN32
243 
244  EXPORT static bool Win_GetInstallFolderFromRegistry(
245  OTString& out_InstallFolderPath);
246 
247 #endif
248 
249  // High Level Helper Functions
250  EXPORT static bool AppendFolder(
251  OTString& out_strPath, const OTString& strBasePath,
252  const OTString& strFolderName); // the trailing "/" is optional for the
253  // strFolderName
254  EXPORT static bool AppendFile(OTString& out_strPath,
255  const OTString& strBasePath,
256  const OTString& strFileName); // the trailing
257  // "/" is
258  // optional for
259  // the
260  // strFolderName
261 
262  EXPORT static bool RelativeToCanonical(OTString& out_strCanonicalPath,
263  const OTString& strBasePath,
264  const OTString& strRelativePath);
265 
266  EXPORT static bool BuildFolderPath(const OTString& strFolderPath,
267  bool& out_bFolderCreated); // will build
268  // all the
269  // folders to
270  // a path.
271  // Will return
272  // false if
273  // unable to
274  // build path.
275  EXPORT static bool BuildFilePath(const OTString& strFolderPath,
276  bool& out_bFolderCreated); // will build
277  // all the
278  // folders up to
279  // the file.
280  // Will return
281  // false if
282  // unable to
283  // build path.
284 
285 }; // class OTPaths
286 
287 } // namespace opentxs
288 
289 #endif // OPENTXS_CORE_OTPATHS_HPP
static EXPORT bool FileExists(const OTString &strFilePath, int64_t &nFileLength)
Definition: OTPaths.cpp:842
static EXPORT bool LoadSetPrefixFolder(OTSettings &config=s_settings, const OTString &strPrefixFolder="")
Definition: OTPaths.cpp:331
static EXPORT bool GetCurrentWorking(OTString &strCurrentWorkingPath)
static EXPORT bool Set(OTSettings &config, const OTString &strSection, const OTString &strKey, const OTString &strValue, const bool &bIsRelative, bool &out_bIsNewOrUpdated, const OTString &strComment="")
Definition: OTPaths.cpp:699
static EXPORT void SetAppBinaryFolder(OTString strLocation)
Definition: OTPaths.cpp:235
static EXPORT bool ToReal(const OTString &strExactPath, OTString &out_strCanonicalPath)
Definition: OTPaths.cpp:985
static EXPORT bool BuildFolderPath(const OTString &strFolderPath, bool &out_bFolderCreated)
Definition: OTPaths.cpp:1320
static EXPORT const OTString & PrefixFolder()
Definition: OTPaths.cpp:302
static EXPORT bool RelativeToCanonical(OTString &out_strCanonicalPath, const OTString &strBasePath, const OTString &strRelativePath)
Definition: OTPaths.cpp:1280
static EXPORT const OTString & AppDataFolder()
Definition: OTPaths.cpp:254
static EXPORT bool AppendFolder(OTString &out_strPath, const OTString &strBasePath, const OTString &strFolderName)
Definition: OTPaths.cpp:1212
static EXPORT bool FixPath(const OTString &strPath, OTString &out_strFixedPath, const bool &bIsFolder)
Definition: OTPaths.cpp:759
static EXPORT bool Get(OTSettings &config, const OTString &strSection, const OTString &strKey, OTString &out_strVar, bool &out_bIsRelative, bool &out_bKeyExist)
Definition: OTPaths.cpp:625
static EXPORT bool GetHomeFromSystem(OTString &out_strHomeFolder)
Definition: OTPaths.cpp:1155
static EXPORT void SetHomeFolder(OTString strLocation)
Definition: OTPaths.cpp:245
EXPORT ~OTPaths()
Definition: OTPaths.cpp:226
static EXPORT bool BuildFilePath(const OTString &strFolderPath, bool &out_bFolderCreated)
Definition: OTPaths.cpp:1369
static EXPORT bool LoadSetScriptsFolder(OTSettings &config=s_settings, const OTString &strScriptsFolder="", const bool &bIsRelative=true)
Definition: OTPaths.cpp:504
static EXPORT bool ConfirmCreateFolder(const OTString &strExactPath, bool &out_Exists, bool &out_IsNew)
Definition: OTPaths.cpp:921
static EXPORT const OTString & ScriptsFolder()
Definition: OTPaths.cpp:315
static EXPORT const OTString & AppBinaryFolder()
Definition: OTPaths.cpp:230
static EXPORT bool AppendFile(OTString &out_strPath, const OTString &strBasePath, const OTString &strFileName)
Definition: OTPaths.cpp:1245
static EXPORT bool GetExecutable(OTString &strExecutablePath)
static EXPORT bool FolderExists(const OTString &strFolderPath)
Definition: OTPaths.cpp:883
static EXPORT const OTString & HomeFolder()
Definition: OTPaths.cpp:240
static EXPORT bool PathExists(const OTString &strPath)
Definition: OTPaths.cpp:802
static EXPORT const OTString & GlobalConfigFile()
Definition: OTPaths.cpp:286