mirror of https://gitee.com/bigwinds/arangodb
Merge branch 'devel' of https://github.com/arangodb/arangodb into devel
This commit is contained in:
commit
1709d66841
|
@ -1,75 +1,75 @@
|
|||
# -*- mode: CMAKE; -*-
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# OPENSSL
|
||||
# ------------------------------------------------------------------------------
|
||||
|
||||
find_package(OpenSSL REQUIRED)
|
||||
|
||||
if (OPENSSL_VERSION)
|
||||
string(REPLACE "." ";" OPENSSL_VERSION_LIST ${OPENSSL_VERSION})
|
||||
list(GET OPENSSL_VERSION_LIST 0 OPENSSL_VERSION_MAJOR)
|
||||
list(GET OPENSSL_VERSION_LIST 1 OPENSSL_VERSION_MINOR)
|
||||
if ("${OPENSSL_VERSION_MAJOR}" GREATER 0 AND "${OPENSSL_VERSION_MINOR}" GREATER 0)
|
||||
option(USE_OPENSSL_NO_SSL2
|
||||
"do not use OPENSSL_NO_SSL2"
|
||||
ON
|
||||
)
|
||||
else ()
|
||||
option(USE_OPENSSL_NO_SSL2
|
||||
"do not use OPENSSL_NO_SSL2"
|
||||
OFF
|
||||
)
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
set(OPENSSL_VERSION
|
||||
"${OPENSSL_VERSION}"
|
||||
CACHE INTERNAL
|
||||
"OpenSSL: Version"
|
||||
)
|
||||
|
||||
set(OPENSSL_INCLUDE_DIR
|
||||
"${OPENSSL_INCLUDE_DIR}"
|
||||
CACHE INTERNAL
|
||||
"OpenSSL: Include Directory"
|
||||
)
|
||||
|
||||
if (WIN32 AND NOT SSL_NUGET)
|
||||
if (DEBUG)
|
||||
set(OPENSSL_EXT "d")
|
||||
else ()
|
||||
set(OPENSSL_EXT "")
|
||||
endif ()
|
||||
|
||||
if (NOT ${OPENSSL_LIB_DIR})
|
||||
set(OPENSSL_LIB_DIR "${OPENSSL_ROOT_DIR}/lib/VC")
|
||||
endif ()
|
||||
|
||||
message(STATUS "OPENSSL_LIB_DIR = ${OPENSSL_LIB_DIR}")
|
||||
message(STATUS "OPENSSL_ROOT_DIR = ${OPENSSL_ROOT_DIR}")
|
||||
|
||||
set(OPENSSL_LIBRARIES
|
||||
debug "${OPENSSL_LIB_DIR}/ssleay32MTd.lib;${OPENSSL_LIB_DIR}/libeay32MTd.lib"
|
||||
optimized "${OPENSSL_LIB_DIR}/ssleay32MT.lib;${OPENSSL_LIB_DIR}/libeay32MT.lib"
|
||||
CACHE INTERNAL
|
||||
"OpenSSL: libraries"
|
||||
)
|
||||
else ()
|
||||
set(OPENSSL_LIBRARIES
|
||||
"${OPENSSL_LIBRARIES}"
|
||||
CACHE INTERNAL
|
||||
"OpenSSL: libraries"
|
||||
)
|
||||
endif ()
|
||||
|
||||
if (WIN32 AND SSL_NUGET)
|
||||
#install (FILES ${LIB_EAY_DEBUG_DLL} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||
#install (FILES ${SSL_EAY_DEBUG_DLL} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||
set(OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin/$(Configuration)/")
|
||||
|
||||
install (FILES "${LIB_EAY_RELEASE_DLL}"
|
||||
RUNTIME DESTINATION "${OUTPUT_DIRECTORY}")
|
||||
install (FILES "${SSL_EAY_RELEASE_DLL}"
|
||||
RUNTIME DESTINATION "${OUTPUT_DIRECTORY}")
|
||||
endif()
|
||||
# -*- mode: CMAKE; -*-
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# OPENSSL
|
||||
# ------------------------------------------------------------------------------
|
||||
|
||||
find_package(OpenSSL REQUIRED)
|
||||
|
||||
if (OPENSSL_VERSION)
|
||||
string(REPLACE "." ";" OPENSSL_VERSION_LIST ${OPENSSL_VERSION})
|
||||
list(GET OPENSSL_VERSION_LIST 0 OPENSSL_VERSION_MAJOR)
|
||||
list(GET OPENSSL_VERSION_LIST 1 OPENSSL_VERSION_MINOR)
|
||||
if ("${OPENSSL_VERSION_MAJOR}" GREATER 0 AND "${OPENSSL_VERSION_MINOR}" GREATER 0)
|
||||
option(USE_OPENSSL_NO_SSL2
|
||||
"do not use OPENSSL_NO_SSL2"
|
||||
ON
|
||||
)
|
||||
else ()
|
||||
option(USE_OPENSSL_NO_SSL2
|
||||
"do not use OPENSSL_NO_SSL2"
|
||||
OFF
|
||||
)
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
set(OPENSSL_VERSION
|
||||
"${OPENSSL_VERSION}"
|
||||
CACHE INTERNAL
|
||||
"OpenSSL: Version"
|
||||
)
|
||||
|
||||
set(OPENSSL_INCLUDE_DIR
|
||||
"${OPENSSL_INCLUDE_DIR}"
|
||||
CACHE INTERNAL
|
||||
"OpenSSL: Include Directory"
|
||||
)
|
||||
|
||||
if (WIN32 AND NOT SSL_NUGET)
|
||||
if (DEBUG)
|
||||
set(OPENSSL_EXT "d")
|
||||
else ()
|
||||
set(OPENSSL_EXT "")
|
||||
endif ()
|
||||
|
||||
if (NOT ${OPENSSL_LIB_DIR})
|
||||
set(OPENSSL_LIB_DIR "${OPENSSL_ROOT_DIR}/lib/VC")
|
||||
endif ()
|
||||
|
||||
message(STATUS "OPENSSL_LIB_DIR = ${OPENSSL_LIB_DIR}")
|
||||
message(STATUS "OPENSSL_ROOT_DIR = ${OPENSSL_ROOT_DIR}")
|
||||
|
||||
set(OPENSSL_LIBRARIES
|
||||
debug "${OPENSSL_LIB_DIR}/ssleay32MTd.lib;${OPENSSL_LIB_DIR}/libeay32MTd.lib"
|
||||
optimized "${OPENSSL_LIB_DIR}/ssleay32MT.lib;${OPENSSL_LIB_DIR}/libeay32MT.lib"
|
||||
CACHE INTERNAL
|
||||
"OpenSSL: libraries"
|
||||
)
|
||||
else ()
|
||||
set(OPENSSL_LIBRARIES
|
||||
"${OPENSSL_LIBRARIES}"
|
||||
CACHE INTERNAL
|
||||
"OpenSSL: libraries"
|
||||
)
|
||||
endif ()
|
||||
|
||||
if (WIN32 AND SSL_NUGET)
|
||||
#install (FILES ${LIB_EAY_DEBUG_DLL} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||
#install (FILES ${SSL_EAY_DEBUG_DLL} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||
#message("FILES ${SSL_EAY_RELEASE_DLL} RUNTIME DESTINATION ${OUTPUT_DIRECTORY}")
|
||||
|
||||
install (FILES "${LIB_EAY_RELEASE_DLL}"
|
||||
DESTINATION "bin/")
|
||||
install (FILES "${SSL_EAY_RELEASE_DLL}"
|
||||
DESTINATION "bin/")
|
||||
endif()
|
||||
|
|
16
CHANGELOG
16
CHANGELOG
|
@ -1,5 +1,17 @@
|
|||
v3.0.0 (XXXX-XX-XX)
|
||||
-------------------
|
||||
v3.0.0-rc2 (2015-06-12)
|
||||
-----------------------
|
||||
|
||||
* added option `--server.max-packet-size` for client tools
|
||||
|
||||
* renamed option `--server.ssl-protocol` to `--ssl.protocol` in client tools
|
||||
(was already done for arangod, but overlooked for client tools)
|
||||
|
||||
* fix handling of `--ssl.protocol` value 5 (TLS v1.2) in client tools, which
|
||||
claimed to support it but didn't
|
||||
|
||||
|
||||
v3.0.0-rc1 (2015-06-10)
|
||||
-----------------------
|
||||
|
||||
* forward ported V8 Comparator bugfix for inline heuristics from
|
||||
https://github.com/v8/v8/commit/5ff7901e24c2c6029114567de5a08ed0f1494c81
|
||||
|
|
|
@ -119,6 +119,11 @@ configure_file(
|
|||
## OPERATION SYSTEM
|
||||
################################################################################
|
||||
|
||||
option(HOMEBREW
|
||||
"whether to install for homebrew"
|
||||
Off
|
||||
)
|
||||
|
||||
if (WIN32)
|
||||
set(WINDOWS TRUE)
|
||||
set(MSBUILD TRUE)
|
||||
|
|
|
@ -29,7 +29,7 @@ arangosh> users.grantDatabase("admin@testapp", "testdb");
|
|||
This grants the user access to the database *testdb*. `revokeDatabase`
|
||||
will revoke the right.
|
||||
|
||||
!SECTION Comparision to ArangoDB 2
|
||||
!SECTION Comparison to ArangoDB 2
|
||||
|
||||
ArangoDB 2 contained separate users per database. It was not possible
|
||||
to give an user access to two or more databases. This proved
|
||||
|
|
|
@ -16,20 +16,17 @@ Unfortunately, the JavaScript libraries are just in the process of being
|
|||
standardized. CommonJS has defined some important modules. ArangoDB implements
|
||||
the following
|
||||
|
||||
* "console" is a well known logging facility to all the JavaScript developers.
|
||||
- [console](Console.md) is a well known logging facility to all the JavaScript developers.
|
||||
ArangoDB implements most of the [Console API](http://wiki.commonjs.org/wiki/Console),
|
||||
with the exceptions of *profile* and *count*.
|
||||
|
||||
* "fs" provides a file system API for the manipulation of paths, directories,
|
||||
- [fs](FileSystem.md) provides a file system API for the manipulation of paths, directories,
|
||||
files, links, and the construction of file streams. ArangoDB implements
|
||||
most [Filesystem/A](http://wiki.commonjs.org/wiki/Filesystem/A) functions.
|
||||
|
||||
* Modules are implemented according to
|
||||
- Modules are implemented according to
|
||||
[Modules/1.1.1](http://wiki.commonjs.org/wiki/Modules)
|
||||
|
||||
* Packages are implemented according to
|
||||
[Packages/1.0](http://wiki.commonjs.org/wiki/Packages)
|
||||
|
||||
!SUBSECTION ArangoDB Specific Modules
|
||||
|
||||
A lot of the modules, however, are ArangoDB specific. These modules
|
||||
|
@ -39,75 +36,76 @@ are described in the following chapters.
|
|||
|
||||
ArangoDB also supports some [node](http://www.nodejs.org) modules.
|
||||
|
||||
* ["assert"](http://nodejs.org/api/assert.html) implements
|
||||
- [assert](http://nodejs.org/api/assert.html) implements
|
||||
assertion and testing functions.
|
||||
|
||||
* ["buffer"](http://nodejs.org/api/buffer.html) implements
|
||||
- [buffer](http://nodejs.org/api/buffer.html) implements
|
||||
a binary data type for JavaScript.
|
||||
|
||||
* ["path"](http://nodejs.org/api/path.html) implements
|
||||
- [path](http://nodejs.org/api/path.html) implements
|
||||
functions dealing with filenames and paths.
|
||||
|
||||
* ["punycode"](http://nodejs.org/api/punycode.html) implements
|
||||
- [punycode](http://nodejs.org/api/punycode.html) implements
|
||||
conversion functions for
|
||||
[punycode](http://en.wikipedia.org/wiki/Punycode) encoding.
|
||||
|
||||
* ["querystring"](http://nodejs.org/api/querystring.html)
|
||||
- [querystring](http://nodejs.org/api/querystring.html)
|
||||
provides utilities for dealing with query strings.
|
||||
|
||||
* ["stream"](http://nodejs.org/api/stream.html)
|
||||
- [stream](http://nodejs.org/api/stream.html)
|
||||
provides a streaming interface.
|
||||
|
||||
* ["url"](http://nodejs.org/api/url.html)
|
||||
- [url](http://nodejs.org/api/url.html)
|
||||
has utilities for URL resolution and parsing.
|
||||
|
||||
!SUBSECTION Bundled NPM Modules
|
||||
|
||||
The following [NPM modules](https://npmjs.org) are preinstalled.
|
||||
|
||||
* ["aqb"](https://github.com/arangodb/aqbjs)
|
||||
- [aqb](https://github.com/arangodb/aqbjs)
|
||||
is the ArangoDB Query Builder and can be used to construct
|
||||
AQL queries with a chaining JavaScript API.
|
||||
|
||||
* ["error-stack-parser"](http://www.stacktracejs.com)
|
||||
- [error-stack-parser](http://www.stacktracejs.com)
|
||||
|
||||
* ["expect.js"](https://github.com/Automattic/expect.js)
|
||||
- [expect.js](https://github.com/Automattic/expect.js)
|
||||
|
||||
* ["extendible"](https://github.com/3rd-Eden/extendible)
|
||||
- [extendible](https://github.com/3rd-Eden/extendible)
|
||||
|
||||
* ["foxx_generator"](https://github.com/moonglum/foxx_generator)
|
||||
- [foxx_generator](https://github.com/moonglum/foxx_generator)
|
||||
|
||||
* ["http-errors"](https://github.com/jshttp/http-errors)
|
||||
- [http-errors](https://github.com/jshttp/http-errors)
|
||||
|
||||
* ["i"](https://github.com/pksunkara/inflect)
|
||||
- [i (inflect)](https://github.com/pksunkara/inflect)
|
||||
|
||||
* ["joi"](https://github.com/hapijs/joi)
|
||||
- [joi](https://github.com/hapijs/joi)
|
||||
is a validation library that is used throughout the Foxx framework.
|
||||
|
||||
* ["js-yaml"](https://github.com/nodeca/js-yaml)
|
||||
- [js-yaml](https://github.com/nodeca/js-yaml)
|
||||
|
||||
* ["minimatch"](https://github.com/isaacs/minimatch)
|
||||
- [minimatch](https://github.com/isaacs/minimatch)
|
||||
|
||||
* ["qs"](https://github.com/hapijs/qs)
|
||||
- [qs](https://github.com/hapijs/qs)
|
||||
provides utilities for dealing with query strings using a different format
|
||||
than the **querystring** module.
|
||||
|
||||
* ["ramda"](http://ramdajs.com)
|
||||
- [ramda](http://ramdajs.com)
|
||||
|
||||
* ["semver"](https://github.com/npm/node-semver)
|
||||
- [semver](https://github.com/npm/node-semver)
|
||||
|
||||
* ["sinon"](http://sinonjs.org)
|
||||
- [sinon](http://sinonjs.org)
|
||||
|
||||
* ["underscore"](http://underscorejs.org)
|
||||
- [underscore](http://underscorejs.org)
|
||||
|
||||
!SUBSECTION Installing NPM Modules
|
||||
|
||||
You can install additional modules using `npm install`. Note the following limitations in ArangoDB's compatibility with node or browser modules:
|
||||
You can install additional modules using `npm install`. Note the following
|
||||
limitations in ArangoDB's compatibility with node or browser modules:
|
||||
|
||||
* modules must be implemented in pure JavaScript (no native extensions)
|
||||
* modules must be strictly synchronous (e.g. no setTimeout or promises)
|
||||
* only a subset of node's built-in modules are supported (see above)
|
||||
* the same limitations apply to each module's dependencies
|
||||
- modules must be implemented in pure JavaScript (no native extensions)
|
||||
- modules must be strictly synchronous (e.g. no setTimeout or promises)
|
||||
- only a subset of node's built-in modules are supported (see above)
|
||||
- the same limitations apply to each module's dependencies
|
||||
|
||||
!SUBSECTION require
|
||||
|
||||
|
@ -123,10 +121,10 @@ Assume that your module file is *test1.js* and contains
|
|||
|
||||
```js
|
||||
exports.func1 = function() {
|
||||
print("1");
|
||||
print("2");
|
||||
};
|
||||
|
||||
exports.const1 = 1;
|
||||
exports.const1 = 4;
|
||||
```
|
||||
|
||||
Then you can use *require* to load the file and access the exports.
|
||||
|
@ -136,10 +134,10 @@ unix> ./arangosh
|
|||
arangosh> var test1 = require("test1");
|
||||
|
||||
arangosh> test1.const1;
|
||||
1
|
||||
4
|
||||
|
||||
arangosh> test1.func1();
|
||||
1
|
||||
2
|
||||
```
|
||||
|
||||
*require* follows the specification
|
||||
|
@ -193,14 +191,14 @@ require("com/example/extension")
|
|||
then ArangoDB will try to locate the corresponding JavaScript as file as
|
||||
follows
|
||||
|
||||
* There is a cache for the results of previous *require* calls. First of
|
||||
- There is a cache for the results of previous *require* calls. First of
|
||||
all ArangoDB checks if *com/example/extension* is already in the modules
|
||||
cache. If it is, the export object for this module is returned. No further
|
||||
JavaScript is executed.
|
||||
|
||||
* ArangoDB will then check, if there is a file called **com/example/extension.js** in the system search path. If such a file exists, it is executed in a new module context and the value of *exports* object is returned. This value is also stored in the module cache.
|
||||
- ArangoDB will then check, if there is a file called **com/example/extension.js** in the system search path. If such a file exists, it is executed in a new module context and the value of *exports* object is returned. This value is also stored in the module cache.
|
||||
|
||||
* If no file can be found, ArangoDB will check if the collection *_modules*
|
||||
- If no file can be found, ArangoDB will check if the collection *_modules*
|
||||
contains a document of the form
|
||||
|
||||
```js
|
||||
|
|
|
@ -31,6 +31,12 @@ The following methods exists on the *_db* object:
|
|||
* [db._drop(name)](../../DataModeling/Collections/DatabaseMethods.md#drop)
|
||||
* [db._truncate(name)](../../DataModeling/Collections/DatabaseMethods.md#truncate)
|
||||
|
||||
*AQL*
|
||||
|
||||
* [db._createStatement(query)](../../../AQL/Invocation/WithArangosh.html#with-createstatement-arangostatement)
|
||||
* [db._query(query)](../../../AQL/Invocation/WithArangosh.html#with-dbquery)
|
||||
* [db._explain(query)](../../ReleaseNotes/NewFeatures28.md#miscellaneous-improvements)
|
||||
|
||||
*Document*
|
||||
|
||||
* [db._document(object)](../../DataModeling/Documents/DatabaseMethods.md#document)
|
||||
|
|
|
@ -209,7 +209,7 @@ const DOC_NOT_FOUND = errors.ERROR_ARANGO_DOCUMENT_NOT_FOUND.code;
|
|||
router.post('/entries', function (req, res) {
|
||||
const data = req.body;
|
||||
const meta = foxxColl.save(req.body);
|
||||
res.json(Object.assign(data, meta));
|
||||
res.send(Object.assign(data, meta));
|
||||
})
|
||||
.body(joi.object().required(), 'Entry to store in the collection.')
|
||||
.response(joi.object().required(), 'Entry stored in the collection.')
|
||||
|
@ -219,7 +219,7 @@ router.post('/entries', function (req, res) {
|
|||
router.get('/entries/:key', function (req, res) {
|
||||
try {
|
||||
const data = foxxColl.document(req.pathParams.key);
|
||||
res.json(data)
|
||||
res.send(data)
|
||||
} catch (e) {
|
||||
if (!e.isArangoError || e.errorNum !== DOC_NOT_FOUND) {
|
||||
throw e;
|
||||
|
@ -258,7 +258,7 @@ router.get('/entries', function (req, res) {
|
|||
FOR entry IN ${foxxColl}
|
||||
RETURN entry._key
|
||||
`);
|
||||
res.json(keys)
|
||||
res.send(keys);
|
||||
})
|
||||
.response(joi.array().items(
|
||||
joi.string().required()
|
||||
|
|
|
@ -1053,6 +1053,14 @@ and all client tools uses these APIs.
|
|||
In order to connect to earlier versions of ArangoDB with the client tools, an older
|
||||
version of the client tools needs to be kept installed.
|
||||
|
||||
!SUBSECTION Command-line options added
|
||||
|
||||
All client tools in 3.0 provide an option `--server.max-packet-size` for controlling
|
||||
the maximum size of HTTP packets to be handled by the client tools. The default value
|
||||
is 128 MB, as in previous versions of ArangoDB. In contrast to previous versions in
|
||||
which the value was hard-coded, the option is now configurable. It can be increased to
|
||||
make the client tools handle very large HTTP result messages sent by the server.
|
||||
|
||||
!SUBSECTION Command-line options changed
|
||||
|
||||
For all client tools, the option `--server.disable-authentication` was renamed to
|
||||
|
|
|
@ -173,12 +173,12 @@
|
|||
* [db](Appendix/References/DBObject.md)
|
||||
* [collection](Appendix/References/CollectionObject.md)
|
||||
* [JavaScript Modules](Appendix/JavaScriptModules/README.md)
|
||||
* ["console"](Appendix/JavaScriptModules/Console.md)
|
||||
* ["fs"](Appendix/JavaScriptModules/FS.md)
|
||||
* ["process"](Appendix/JavaScriptModules/Process.md)
|
||||
* ["request"](Appendix/JavaScriptModules/Request.md)
|
||||
* ["actions"](Appendix/JavaScriptModules/Actions.md)
|
||||
* ["queries"](Appendix/JavaScriptModules/Queries.md)
|
||||
* [console](Appendix/JavaScriptModules/Console.md)
|
||||
* [fs](Appendix/JavaScriptModules/FileSystem.md)
|
||||
* [process](Appendix/JavaScriptModules/Process.md)
|
||||
* [request](Appendix/JavaScriptModules/Request.md)
|
||||
* [actions](Appendix/JavaScriptModules/Actions.md)
|
||||
* [queries](Appendix/JavaScriptModules/Queries.md)
|
||||
* [Write-ahead log](Appendix/JavaScriptModules/WAL.md)
|
||||
* [Task Management](Appendix/JavaScriptModules/Tasks.md)
|
||||
* [Deprecated](Appendix/Deprecated/README.md)
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/user <<EOF
|
||||
{
|
||||
<span class="hljs-string">"user"</span> : <span class="hljs-string">"admin@example"</span>,
|
||||
<span class="hljs-string">"password"</span> : <span class="hljs-string">"secure"</span>
|
||||
}
|
||||
EOF
|
||||
|
||||
HTTP/<span class="hljs-number">1.1</span> <span class="hljs-number">201</span> Created
|
||||
content-type: application/json; charset=utf<span class="hljs-number">-8</span>
|
||||
|
||||
{
|
||||
<span class="hljs-string">"user"</span> : <span class="hljs-string">"admin@example"</span>,
|
||||
<span class="hljs-string">"active"</span> : <span class="hljs-literal">true</span>,
|
||||
<span class="hljs-string">"extra"</span> : {
|
||||
},
|
||||
<span class="hljs-string">"changePassword"</span> : <span class="hljs-literal">false</span>,
|
||||
<span class="hljs-string">"error"</span> : <span class="hljs-literal">false</span>,
|
||||
<span class="hljs-string">"code"</span> : <span class="hljs-number">201</span>
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
shell> curl -X DELETE --data-binary @- --dump - http://localhost:8529/_api/user/admin@ourapp <<EOF
|
||||
{
|
||||
}
|
||||
EOF
|
||||
|
||||
HTTP/<span class="hljs-number">1.1</span> <span class="hljs-number">202</span> Accepted
|
||||
content-type: application/json; charset=utf<span class="hljs-number">-8</span>
|
||||
|
||||
{
|
||||
<span class="hljs-string">"error"</span> : <span class="hljs-literal">false</span>,
|
||||
<span class="hljs-string">"code"</span> : <span class="hljs-number">202</span>
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
shell> curl --dump - http://localhost:8529/_api/user
|
||||
|
||||
HTTP/<span class="hljs-number">1.1</span> <span class="hljs-number">200</span> OK
|
||||
content-type: application/json; charset=utf<span class="hljs-number">-8</span>
|
||||
|
||||
{
|
||||
<span class="hljs-string">"result"</span> : [
|
||||
{
|
||||
<span class="hljs-string">"user"</span> : <span class="hljs-string">"root"</span>,
|
||||
<span class="hljs-string">"active"</span> : <span class="hljs-literal">true</span>,
|
||||
<span class="hljs-string">"extra"</span> : {
|
||||
},
|
||||
<span class="hljs-string">"changePassword"</span> : <span class="hljs-literal">false</span>
|
||||
},
|
||||
{
|
||||
<span class="hljs-string">"user"</span> : <span class="hljs-string">"admin@example"</span>,
|
||||
<span class="hljs-string">"active"</span> : <span class="hljs-literal">true</span>,
|
||||
<span class="hljs-string">"extra"</span> : {
|
||||
},
|
||||
<span class="hljs-string">"changePassword"</span> : <span class="hljs-literal">false</span>
|
||||
},
|
||||
{
|
||||
<span class="hljs-string">"user"</span> : <span class="hljs-string">"admin"</span>,
|
||||
<span class="hljs-string">"active"</span> : <span class="hljs-literal">true</span>,
|
||||
<span class="hljs-string">"extra"</span> : {
|
||||
},
|
||||
<span class="hljs-string">"changePassword"</span> : <span class="hljs-literal">false</span>
|
||||
},
|
||||
{
|
||||
<span class="hljs-string">"user"</span> : <span class="hljs-string">"tester"</span>,
|
||||
<span class="hljs-string">"active"</span> : <span class="hljs-literal">false</span>,
|
||||
<span class="hljs-string">"extra"</span> : {
|
||||
},
|
||||
<span class="hljs-string">"changePassword"</span> : <span class="hljs-literal">false</span>
|
||||
}
|
||||
],
|
||||
<span class="hljs-string">"error"</span> : <span class="hljs-literal">false</span>,
|
||||
<span class="hljs-string">"code"</span> : <span class="hljs-number">200</span>
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
shell> curl --dump - http://localhost:8529/_api/user/admin@theirapp
|
||||
|
||||
HTTP/<span class="hljs-number">1.1</span> <span class="hljs-number">200</span> OK
|
||||
content-type: application/json; charset=utf<span class="hljs-number">-8</span>
|
||||
|
||||
{
|
||||
<span class="hljs-string">"user"</span> : <span class="hljs-string">"admin@theirapp"</span>,
|
||||
<span class="hljs-string">"active"</span> : <span class="hljs-literal">true</span>,
|
||||
<span class="hljs-string">"extra"</span> : {
|
||||
},
|
||||
<span class="hljs-string">"changePassword"</span> : <span class="hljs-literal">false</span>,
|
||||
<span class="hljs-string">"error"</span> : <span class="hljs-literal">false</span>,
|
||||
<span class="hljs-string">"code"</span> : <span class="hljs-number">200</span>
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
shell> curl -X PUT --data-binary @- --dump - http://localhost:8529/_api/user/admin@secapp/database/_system <<EOF
|
||||
{
|
||||
<span class="hljs-string">"grant"</span> : <span class="hljs-string">"rw"</span>
|
||||
}
|
||||
EOF
|
||||
|
||||
HTTP/<span class="hljs-number">1.1</span> <span class="hljs-number">200</span> OK
|
||||
content-type: application/json; charset=utf<span class="hljs-number">-8</span>
|
||||
|
||||
{
|
||||
<span class="hljs-string">"_system"</span> : <span class="hljs-string">"rw"</span>,
|
||||
<span class="hljs-string">"error"</span> : <span class="hljs-literal">false</span>,
|
||||
<span class="hljs-string">"code"</span> : <span class="hljs-number">200</span>
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
shell> curl -X PUT --data-binary @- --dump - http://localhost:8529/_api/user/admin@myapp <<EOF
|
||||
{
|
||||
<span class="hljs-string">"password"</span> : <span class="hljs-string">"secure"</span>
|
||||
}
|
||||
EOF
|
||||
|
||||
HTTP/<span class="hljs-number">1.1</span> <span class="hljs-number">200</span> OK
|
||||
content-type: application/json; charset=utf<span class="hljs-number">-8</span>
|
||||
|
||||
{
|
||||
<span class="hljs-string">"user"</span> : <span class="hljs-string">"admin@myapp"</span>,
|
||||
<span class="hljs-string">"active"</span> : <span class="hljs-literal">true</span>,
|
||||
<span class="hljs-string">"extra"</span> : {
|
||||
},
|
||||
<span class="hljs-string">"changePassword"</span> : <span class="hljs-literal">false</span>,
|
||||
<span class="hljs-string">"error"</span> : <span class="hljs-literal">false</span>,
|
||||
<span class="hljs-string">"code"</span> : <span class="hljs-number">200</span>
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
shell> curl -X PATCH --data-binary @- --dump - http://localhost:8529/_api/user/admin@yourapp <<EOF
|
||||
{
|
||||
<span class="hljs-string">"password"</span> : <span class="hljs-string">"secure"</span>
|
||||
}
|
||||
EOF
|
||||
|
||||
HTTP/<span class="hljs-number">1.1</span> <span class="hljs-number">200</span> OK
|
||||
content-type: application/json; charset=utf<span class="hljs-number">-8</span>
|
||||
|
||||
{
|
||||
<span class="hljs-string">"user"</span> : <span class="hljs-string">"admin@yourapp"</span>,
|
||||
<span class="hljs-string">"active"</span> : <span class="hljs-literal">true</span>,
|
||||
<span class="hljs-string">"extra"</span> : {
|
||||
},
|
||||
<span class="hljs-string">"changePassword"</span> : <span class="hljs-literal">false</span>,
|
||||
<span class="hljs-string">"error"</span> : <span class="hljs-literal">false</span>,
|
||||
<span class="hljs-string">"code"</span> : <span class="hljs-number">200</span>
|
||||
}
|
|
@ -0,0 +1,42 @@
|
|||
arangosh> db.names.ensureIndex({ type: <span class="hljs-string">"persistent"</span>, fields: [ <span class="hljs-string">"first"</span> ] });
|
||||
{
|
||||
<span class="hljs-string">"id"</span> : <span class="hljs-string">"names/15880"</span>,
|
||||
<span class="hljs-string">"type"</span> : <span class="hljs-string">"persistent"</span>,
|
||||
<span class="hljs-string">"fields"</span> : [
|
||||
<span class="hljs-string">"first"</span>
|
||||
],
|
||||
<span class="hljs-string">"unique"</span> : <span class="hljs-literal">false</span>,
|
||||
<span class="hljs-string">"sparse"</span> : <span class="hljs-literal">false</span>,
|
||||
<span class="hljs-string">"isNewlyCreated"</span> : <span class="hljs-literal">true</span>,
|
||||
<span class="hljs-string">"code"</span> : <span class="hljs-number">201</span>
|
||||
}
|
||||
arangosh> db.names.save({ <span class="hljs-string">"first"</span> : <span class="hljs-string">"Tim"</span> });
|
||||
{
|
||||
<span class="hljs-string">"_id"</span> : <span class="hljs-string">"names/15883"</span>,
|
||||
<span class="hljs-string">"_key"</span> : <span class="hljs-string">"15883"</span>,
|
||||
<span class="hljs-string">"_rev"</span> : <span class="hljs-string">"15883"</span>
|
||||
}
|
||||
arangosh> db.names.save({ <span class="hljs-string">"first"</span> : <span class="hljs-string">"Tom"</span> });
|
||||
{
|
||||
<span class="hljs-string">"_id"</span> : <span class="hljs-string">"names/15887"</span>,
|
||||
<span class="hljs-string">"_key"</span> : <span class="hljs-string">"15887"</span>,
|
||||
<span class="hljs-string">"_rev"</span> : <span class="hljs-string">"15887"</span>
|
||||
}
|
||||
arangosh> db.names.save({ <span class="hljs-string">"first"</span> : <span class="hljs-string">"John"</span> });
|
||||
{
|
||||
<span class="hljs-string">"_id"</span> : <span class="hljs-string">"names/15890"</span>,
|
||||
<span class="hljs-string">"_key"</span> : <span class="hljs-string">"15890"</span>,
|
||||
<span class="hljs-string">"_rev"</span> : <span class="hljs-string">"15890"</span>
|
||||
}
|
||||
arangosh> db.names.save({ <span class="hljs-string">"first"</span> : <span class="hljs-string">"Tim"</span> });
|
||||
{
|
||||
<span class="hljs-string">"_id"</span> : <span class="hljs-string">"names/15893"</span>,
|
||||
<span class="hljs-string">"_key"</span> : <span class="hljs-string">"15893"</span>,
|
||||
<span class="hljs-string">"_rev"</span> : <span class="hljs-string">"15893"</span>
|
||||
}
|
||||
arangosh> db.names.save({ <span class="hljs-string">"first"</span> : <span class="hljs-string">"Tom"</span> });
|
||||
{
|
||||
<span class="hljs-string">"_id"</span> : <span class="hljs-string">"names/15896"</span>,
|
||||
<span class="hljs-string">"_key"</span> : <span class="hljs-string">"15896"</span>,
|
||||
<span class="hljs-string">"_rev"</span> : <span class="hljs-string">"15896"</span>
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
arangosh> db.ids.ensureIndex({ type: <span class="hljs-string">"persistent"</span>, fields: [ <span class="hljs-string">"name.first"</span>, <span class="hljs-string">"name.last"</span> ], unique: <span class="hljs-literal">true</span> });
|
||||
{
|
||||
<span class="hljs-string">"id"</span> : <span class="hljs-string">"ids/15941"</span>,
|
||||
<span class="hljs-string">"type"</span> : <span class="hljs-string">"persistent"</span>,
|
||||
<span class="hljs-string">"fields"</span> : [
|
||||
<span class="hljs-string">"name.first"</span>,
|
||||
<span class="hljs-string">"name.last"</span>
|
||||
],
|
||||
<span class="hljs-string">"unique"</span> : <span class="hljs-literal">true</span>,
|
||||
<span class="hljs-string">"sparse"</span> : <span class="hljs-literal">false</span>,
|
||||
<span class="hljs-string">"isNewlyCreated"</span> : <span class="hljs-literal">true</span>,
|
||||
<span class="hljs-string">"code"</span> : <span class="hljs-number">201</span>
|
||||
}
|
||||
arangosh> db.ids.save({ <span class="hljs-string">"name"</span> : { <span class="hljs-string">"first"</span> : <span class="hljs-string">"hans"</span>, <span class="hljs-string">"last"</span>: <span class="hljs-string">"hansen"</span> }});
|
||||
{
|
||||
<span class="hljs-string">"_id"</span> : <span class="hljs-string">"ids/15944"</span>,
|
||||
<span class="hljs-string">"_key"</span> : <span class="hljs-string">"15944"</span>,
|
||||
<span class="hljs-string">"_rev"</span> : <span class="hljs-string">"15944"</span>
|
||||
}
|
||||
arangosh> db.ids.save({ <span class="hljs-string">"name"</span> : { <span class="hljs-string">"first"</span> : <span class="hljs-string">"jens"</span>, <span class="hljs-string">"last"</span>: <span class="hljs-string">"jensen"</span> }});
|
||||
{
|
||||
<span class="hljs-string">"_id"</span> : <span class="hljs-string">"ids/15948"</span>,
|
||||
<span class="hljs-string">"_key"</span> : <span class="hljs-string">"15948"</span>,
|
||||
<span class="hljs-string">"_rev"</span> : <span class="hljs-string">"15948"</span>
|
||||
}
|
||||
arangosh> db.ids.save({ <span class="hljs-string">"name"</span> : { <span class="hljs-string">"first"</span> : <span class="hljs-string">"hans"</span>, <span class="hljs-string">"last"</span>: <span class="hljs-string">"jensen"</span> }});
|
||||
{
|
||||
<span class="hljs-string">"_id"</span> : <span class="hljs-string">"ids/15951"</span>,
|
||||
<span class="hljs-string">"_key"</span> : <span class="hljs-string">"15951"</span>,
|
||||
<span class="hljs-string">"_rev"</span> : <span class="hljs-string">"15951"</span>
|
||||
}
|
||||
arangosh> db.ids.save({ <span class="hljs-string">"name"</span> : { <span class="hljs-string">"first"</span> : <span class="hljs-string">"hans"</span>, <span class="hljs-string">"last"</span>: <span class="hljs-string">"hansen"</span> }});
|
||||
[ArangoError <span class="hljs-number">1210</span>: cannot create <span class="hljs-built_in">document</span>, unique constraint violated]
|
|
@ -0,0 +1,32 @@
|
|||
arangosh> db.ids.ensureIndex({ type: <span class="hljs-string">"persistent"</span>, fields: [ <span class="hljs-string">"myId"</span> ], unique: <span class="hljs-literal">true</span> });
|
||||
{
|
||||
<span class="hljs-string">"id"</span> : <span class="hljs-string">"ids/15959"</span>,
|
||||
<span class="hljs-string">"type"</span> : <span class="hljs-string">"persistent"</span>,
|
||||
<span class="hljs-string">"fields"</span> : [
|
||||
<span class="hljs-string">"myId"</span>
|
||||
],
|
||||
<span class="hljs-string">"unique"</span> : <span class="hljs-literal">true</span>,
|
||||
<span class="hljs-string">"sparse"</span> : <span class="hljs-literal">false</span>,
|
||||
<span class="hljs-string">"isNewlyCreated"</span> : <span class="hljs-literal">true</span>,
|
||||
<span class="hljs-string">"code"</span> : <span class="hljs-number">201</span>
|
||||
}
|
||||
arangosh> db.ids.save({ <span class="hljs-string">"myId"</span>: <span class="hljs-number">123</span> });
|
||||
{
|
||||
<span class="hljs-string">"_id"</span> : <span class="hljs-string">"ids/15962"</span>,
|
||||
<span class="hljs-string">"_key"</span> : <span class="hljs-string">"15962"</span>,
|
||||
<span class="hljs-string">"_rev"</span> : <span class="hljs-string">"15962"</span>
|
||||
}
|
||||
arangosh> db.ids.save({ <span class="hljs-string">"myId"</span>: <span class="hljs-number">456</span> });
|
||||
{
|
||||
<span class="hljs-string">"_id"</span> : <span class="hljs-string">"ids/15966"</span>,
|
||||
<span class="hljs-string">"_key"</span> : <span class="hljs-string">"15966"</span>,
|
||||
<span class="hljs-string">"_rev"</span> : <span class="hljs-string">"15966"</span>
|
||||
}
|
||||
arangosh> db.ids.save({ <span class="hljs-string">"myId"</span>: <span class="hljs-number">789</span> });
|
||||
{
|
||||
<span class="hljs-string">"_id"</span> : <span class="hljs-string">"ids/15969"</span>,
|
||||
<span class="hljs-string">"_key"</span> : <span class="hljs-string">"15969"</span>,
|
||||
<span class="hljs-string">"_rev"</span> : <span class="hljs-string">"15969"</span>
|
||||
}
|
||||
arangosh> db.ids.save({ <span class="hljs-string">"myId"</span>: <span class="hljs-number">123</span> });
|
||||
[ArangoError <span class="hljs-number">1210</span>: cannot create <span class="hljs-built_in">document</span>, unique constraint violated]
|
|
@ -0,0 +1,33 @@
|
|||
arangosh> db.ids.ensureIndex({ type: <span class="hljs-string">"skiplist"</span>, fields: [ <span class="hljs-string">"name.first"</span>, <span class="hljs-string">"name.last"</span> ], unique: <span class="hljs-literal">true</span> });
|
||||
{
|
||||
<span class="hljs-string">"id"</span> : <span class="hljs-string">"ids/16013"</span>,
|
||||
<span class="hljs-string">"type"</span> : <span class="hljs-string">"skiplist"</span>,
|
||||
<span class="hljs-string">"fields"</span> : [
|
||||
<span class="hljs-string">"name.first"</span>,
|
||||
<span class="hljs-string">"name.last"</span>
|
||||
],
|
||||
<span class="hljs-string">"unique"</span> : <span class="hljs-literal">true</span>,
|
||||
<span class="hljs-string">"sparse"</span> : <span class="hljs-literal">false</span>,
|
||||
<span class="hljs-string">"isNewlyCreated"</span> : <span class="hljs-literal">true</span>,
|
||||
<span class="hljs-string">"code"</span> : <span class="hljs-number">201</span>
|
||||
}
|
||||
arangosh> db.ids.save({ <span class="hljs-string">"name"</span> : { <span class="hljs-string">"first"</span> : <span class="hljs-string">"hans"</span>, <span class="hljs-string">"last"</span>: <span class="hljs-string">"hansen"</span> }});
|
||||
{
|
||||
<span class="hljs-string">"_id"</span> : <span class="hljs-string">"ids/16016"</span>,
|
||||
<span class="hljs-string">"_key"</span> : <span class="hljs-string">"16016"</span>,
|
||||
<span class="hljs-string">"_rev"</span> : <span class="hljs-string">"16016"</span>
|
||||
}
|
||||
arangosh> db.ids.save({ <span class="hljs-string">"name"</span> : { <span class="hljs-string">"first"</span> : <span class="hljs-string">"jens"</span>, <span class="hljs-string">"last"</span>: <span class="hljs-string">"jensen"</span> }});
|
||||
{
|
||||
<span class="hljs-string">"_id"</span> : <span class="hljs-string">"ids/16020"</span>,
|
||||
<span class="hljs-string">"_key"</span> : <span class="hljs-string">"16020"</span>,
|
||||
<span class="hljs-string">"_rev"</span> : <span class="hljs-string">"16020"</span>
|
||||
}
|
||||
arangosh> db.ids.save({ <span class="hljs-string">"name"</span> : { <span class="hljs-string">"first"</span> : <span class="hljs-string">"hans"</span>, <span class="hljs-string">"last"</span>: <span class="hljs-string">"jensen"</span> }});
|
||||
{
|
||||
<span class="hljs-string">"_id"</span> : <span class="hljs-string">"ids/16023"</span>,
|
||||
<span class="hljs-string">"_key"</span> : <span class="hljs-string">"16023"</span>,
|
||||
<span class="hljs-string">"_rev"</span> : <span class="hljs-string">"16023"</span>
|
||||
}
|
||||
arangosh> db.ids.save({ <span class="hljs-string">"name"</span> : { <span class="hljs-string">"first"</span> : <span class="hljs-string">"hans"</span>, <span class="hljs-string">"last"</span>: <span class="hljs-string">"hansen"</span> }});
|
||||
[ArangoError <span class="hljs-number">1210</span>: cannot create <span class="hljs-built_in">document</span>, unique constraint violated]
|
|
@ -21,6 +21,7 @@ def brTrim(text):
|
|||
|
||||
swagger = None
|
||||
fileFilter = None
|
||||
blockFilter = None
|
||||
dokuBlocks = [{},{}]
|
||||
thisVerb = {}
|
||||
route = ''
|
||||
|
@ -102,6 +103,15 @@ def getRestBodyParam():
|
|||
rc += addText
|
||||
return rc
|
||||
|
||||
def getRestDescription():
|
||||
#print >>sys.stderr, "RESTDESCRIPTION"
|
||||
if thisVerb['description']:
|
||||
#print >> sys.stderr, thisVerb['description']
|
||||
return thisVerb['description']
|
||||
else:
|
||||
#print >> sys.stderr, "ELSE"
|
||||
return ""
|
||||
|
||||
def getRestReplyBodyParam(param):
|
||||
rc = "\n**Reply Body**\n"
|
||||
|
||||
|
@ -115,31 +125,33 @@ def getRestReplyBodyParam(param):
|
|||
|
||||
|
||||
SIMPL_REPL_DICT = {
|
||||
"@RESTDESCRIPTION" : "",
|
||||
"@RESTURLPARAMETERS" : "\n**Path Parameters**\n",
|
||||
"@RESTQUERYPARAMETERS" : "\n**Query Parameters**\n",
|
||||
"@RESTHEADERPARAMETERS" : "\n**Header Parameters**\n",
|
||||
"@RESTRETURNCODES" : "\n**Return Codes**\n",
|
||||
"@PARAMS" : "\n**Parameters**\n",
|
||||
"@RESTPARAMS" : "",
|
||||
"@RESTURLPARAMS" : "\n**Path Parameters**\n",
|
||||
"@RESTQUERYPARAMS" : "\n**Query Parameters**\n",
|
||||
"@RESTBODYPARAM" : getRestBodyParam,
|
||||
"@RESTREPLYBODY" : getRestReplyBodyParam,
|
||||
"@RESTQUERYPARAM" : "@RESTPARAM",
|
||||
"@RESTURLPARAM" : "@RESTPARAM",
|
||||
"@PARAM" : "@RESTPARAM",
|
||||
"@RESTHEADERPARAM" : "@RESTPARAM",
|
||||
"@EXAMPLES" : "\n**Examples**\n",
|
||||
"@RESTPARAMETERS" : ""
|
||||
"\\" : "\\\\",
|
||||
"@RESTDESCRIPTION" : getRestDescription,
|
||||
"@RESTURLPARAMETERS" : "\n**Path Parameters**\n",
|
||||
"@RESTQUERYPARAMETERS" : "\n**Query Parameters**\n",
|
||||
"@RESTHEADERPARAMETERS" : "\n**Header Parameters**\n",
|
||||
"@RESTRETURNCODES" : "\n**Return Codes**\n",
|
||||
"@PARAMS" : "\n**Parameters**\n",
|
||||
"@RESTPARAMS" : "",
|
||||
"@RESTURLPARAMS" : "\n**Path Parameters**\n",
|
||||
"@RESTQUERYPARAMS" : "\n**Query Parameters**\n",
|
||||
"@RESTBODYPARAM" : "", #getRestBodyParam,
|
||||
"@RESTREPLYBODY" : getRestReplyBodyParam,
|
||||
"@RESTQUERYPARAM" : "@RESTPARAM",
|
||||
"@RESTURLPARAM" : "@RESTPARAM",
|
||||
"@PARAM" : "@RESTPARAM",
|
||||
"@RESTHEADERPARAM" : "@RESTPARAM",
|
||||
"@EXAMPLES" : "\n**Examples**\n",
|
||||
"@RESTPARAMETERS" : ""
|
||||
}
|
||||
SIMPLE_RX = re.compile(
|
||||
r'''
|
||||
\\| # the backslash...
|
||||
@RESTDESCRIPTION| # -> <empty>
|
||||
@RESTURLPARAMETERS| # -> \n**Path Parameters**\n
|
||||
@RESTQUERYPARAMETERS| # -> \n**Query Parameters**\n
|
||||
@RESTHEADERPARAMETERS| # -> \n**Header Parameters**\n
|
||||
@RESTBODYPARAM| # -> call post body param
|
||||
@RESTBODYPARAM| # empty now, comes with the post body -> call post body param
|
||||
@RESTRETURNCODES| # -> \n**Return Codes**\n
|
||||
@PARAMS| # -> \n**Parameters**\n
|
||||
@RESTPARAMS| # -> <empty>
|
||||
|
@ -157,7 +169,7 @@ r'''
|
|||
|
||||
def SimpleRepl(match):
|
||||
m = match.group(0)
|
||||
#print 'xxxxx ' + m
|
||||
# print 'xxxxx [%s]' % m
|
||||
try:
|
||||
n = SIMPL_REPL_DICT[m]
|
||||
if n == None:
|
||||
|
@ -210,7 +222,7 @@ RX = [
|
|||
# Error codes replace
|
||||
(re.compile(r"(####)#+"), r""),
|
||||
# (re.compile(r"- (\w+):\s*@LIT{(.+)}"), r"\n*\g<1>* - **\g<2>**:"),
|
||||
(re.compile(r"(.+),(\d+),\"(.+)\",\"(.+)\""), r"\n*\g<2>* - **\g<3>**: \g<4>"),
|
||||
(re.compile(r"(.+),(\d+),\"(.+)\",\"(.+)\""), r"\n- *\g<2>* - **\g<1>** - **\g<3>**: \n \g<4>"),
|
||||
|
||||
(re.compile(r"TODOSWAGGER.*"),r"")
|
||||
]
|
||||
|
@ -231,7 +243,7 @@ RX2 = [
|
|||
|
||||
match_RESTHEADER = re.compile(r"@RESTHEADER\{(.*)\}")
|
||||
match_RESTRETURNCODE = re.compile(r"@RESTRETURNCODE\{(.*)\}")
|
||||
have_RESTBODYPARAM = re.compile(r"@RESTBODYPARAM")
|
||||
have_RESTBODYPARAM = re.compile(r"@RESTBODYPARAM|@RESTDESCRIPTION")
|
||||
have_RESTREPLYBODY = re.compile(r"@RESTREPLYBODY")
|
||||
have_RESTSTRUCT = re.compile(r"@RESTSTRUCT")
|
||||
remove_MULTICR = re.compile(r'\n\n\n*')
|
||||
|
@ -275,6 +287,7 @@ def replaceCode(lines, blockName):
|
|||
foundRestBodyParam = False
|
||||
foundRestReplyBodyParam = False
|
||||
lineR = lines.split('\n')
|
||||
#print lineR
|
||||
l = len(lineR)
|
||||
r = 0
|
||||
while (r < l):
|
||||
|
@ -283,10 +296,13 @@ def replaceCode(lines, blockName):
|
|||
if foundRestBodyParam:
|
||||
lineR[r] = ''
|
||||
else:
|
||||
lineR[r] = '@RESTBODYPARAM'
|
||||
lineR[r] = '@RESTDESCRIPTION'
|
||||
foundRestBodyParam = True
|
||||
r+=1
|
||||
while (len(lineR[r]) > 1):
|
||||
while ((len(lineR[r]) > 0) and
|
||||
((lineR[r][0] != '@') or
|
||||
have_RESTBODYPARAM.search(lineR[r]))):
|
||||
# print "xxx - %d %s" %(len(lineR[r]), lineR[r])
|
||||
lineR[r] = ''
|
||||
r+=1
|
||||
|
||||
|
@ -316,7 +332,8 @@ def replaceCode(lines, blockName):
|
|||
r+=1
|
||||
r+=1
|
||||
lines = "\n".join(lineR)
|
||||
|
||||
#print "x" * 70
|
||||
#print lines
|
||||
lines = SIMPLE_RX.sub(SimpleRepl, lines)
|
||||
|
||||
for (oneRX, repl) in RX2:
|
||||
|
@ -389,9 +406,10 @@ def findStartCode(fd,full_path):
|
|||
#print textFile
|
||||
|
||||
match = re.findall(r'@startDocuBlock\s*(\w+)', textFile)
|
||||
if match:
|
||||
if match:
|
||||
for find in match:
|
||||
#print "8"*80
|
||||
#print find
|
||||
textFile = replaceText(textFile, full_path, find)
|
||||
#print textFile
|
||||
|
||||
|
@ -407,10 +425,11 @@ def findStartCode(fd,full_path):
|
|||
outFD.truncate()
|
||||
outFD.write(textFile)
|
||||
outFD.close()
|
||||
|
||||
#JSF_put_api_replication_synchronize
|
||||
|
||||
def replaceText(text, pathOfFile, searchText):
|
||||
''' reads the mdpp and generates the md '''
|
||||
#print '7'*80
|
||||
global dokuBlocks
|
||||
if not searchText in dokuBlocks[0]:
|
||||
print >> sys.stderr, "Failed to locate the docublock '%s' for replacing it into the file '%s'\n have:" % (searchText, pathOfFile)
|
||||
|
@ -418,7 +437,9 @@ def replaceText(text, pathOfFile, searchText):
|
|||
print >> sys.stderr, '*' * 80
|
||||
print >> sys.stderr, text
|
||||
exit(1)
|
||||
#print '7'*80
|
||||
#print dokuBlocks[0][searchText]
|
||||
#print '7'*80
|
||||
rc= re.sub("@startDocuBlock\s+"+ searchText + "(?:\s+|$)", dokuBlocks[0][searchText], text)
|
||||
return rc
|
||||
|
||||
|
@ -495,10 +516,24 @@ def loadDokuBlocks():
|
|||
|
||||
#if state == STATE_SEARCH_START:
|
||||
# print dokuBlocks[thisBlockType].keys()
|
||||
|
||||
|
||||
if blockFilter != None:
|
||||
remainBlocks= {}
|
||||
print "filtering blocks"
|
||||
for oneBlock in dokuBlocks[0]:
|
||||
if blockFilter.match(oneBlock) != None:
|
||||
print "found block %s" % oneBlock
|
||||
#print dokuBlocks[0][oneBlock]
|
||||
remainBlocks[oneBlock] = dokuBlocks[0][oneBlock]
|
||||
dokuBlocks[0] = remainBlocks
|
||||
|
||||
for oneBlock in dokuBlocks[0]:
|
||||
try:
|
||||
#print "processing %s" % oneBlock
|
||||
dokuBlocks[0][oneBlock] = replaceCode(dokuBlocks[0][oneBlock], oneBlock)
|
||||
#print "6"*80
|
||||
#print dokuBlocks[0][oneBlock]
|
||||
#print "6"*80
|
||||
except:
|
||||
print >>sys.stderr, "while parsing :\n" + oneBlock
|
||||
raise
|
||||
|
@ -521,6 +556,9 @@ if __name__ == '__main__':
|
|||
if len(sys.argv) > 4 and sys.argv[4].strip() != '':
|
||||
print "filtering " + sys.argv[4]
|
||||
fileFilter = re.compile(sys.argv[4])
|
||||
if len(sys.argv) > 5 and sys.argv[5].strip() != '':
|
||||
print "filtering Docublocks: " + sys.argv[5]
|
||||
blockFilter = re.compile(sys.argv[5])
|
||||
f=open(swaggerJson, 'rU')
|
||||
swagger= json.load(f)
|
||||
f.close()
|
||||
|
|
|
@ -955,6 +955,10 @@ static void JS_GetCoordinators(
|
|||
TRI_V8_TRY_CATCH_BEGIN(isolate);
|
||||
v8::HandleScope scope(isolate);
|
||||
|
||||
if (!ServerState::instance()->isRunningInCluster()) {
|
||||
TRI_V8_THROW_EXCEPTION_INTERNAL("ArangoDB is not running in cluster mode");
|
||||
}
|
||||
|
||||
if (args.Length() != 0) {
|
||||
TRI_V8_THROW_EXCEPTION_USAGE("getCoordinators()");
|
||||
}
|
||||
|
|
|
@ -113,6 +113,10 @@ void UpgradeFeature::start() {
|
|||
|
||||
// and force shutdown
|
||||
if (_upgrade || init->isInitDatabase() || init->restoreAdmin()) {
|
||||
if (init->isInitDatabase()) {
|
||||
*_result = EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
server()->beginShutdown();
|
||||
}
|
||||
}
|
||||
|
@ -172,6 +176,8 @@ void UpgradeFeature::changeAdminPassword(std::string const& defaultPassword) {
|
|||
|
||||
// and return from the context
|
||||
LOG(TRACE) << "finished to restore admin user";
|
||||
|
||||
*_result = EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
void UpgradeFeature::upgradeDatabase(std::string const& defaultPassword) {
|
||||
|
|
|
@ -1043,7 +1043,7 @@ static void JS_WarningAql(v8::FunctionCallbackInfo<v8::Value> const& args) {
|
|||
// note: we may not have a query if the AQL functions are called without
|
||||
// a query, e.g. during tests
|
||||
int code = static_cast<int>(TRI_ObjectToInt64(args[0]));
|
||||
std::string const&& message = TRI_ObjectToString(args[1]);
|
||||
std::string const message = TRI_ObjectToString(args[1]);
|
||||
|
||||
auto query = static_cast<arangodb::aql::Query*>(v8g->_query);
|
||||
query->registerWarning(code, message.c_str());
|
||||
|
|
|
@ -46,8 +46,8 @@ ClientFeature::ClientFeature(application_features::ApplicationServer* server,
|
|||
_password(""),
|
||||
_connectionTimeout(connectionTimeout),
|
||||
_requestTimeout(requestTimeout),
|
||||
_maxPacketSize(128 * 1024 * 1024),
|
||||
_sslProtocol(4),
|
||||
_section("server"),
|
||||
_retries(DEFAULT_RETRIES),
|
||||
_warn(false) {
|
||||
setOptional(true);
|
||||
|
@ -56,79 +56,88 @@ ClientFeature::ClientFeature(application_features::ApplicationServer* server,
|
|||
}
|
||||
|
||||
void ClientFeature::collectOptions(std::shared_ptr<ProgramOptions> options) {
|
||||
options->addSection(_section, "Configure a connection to the server");
|
||||
options->addSection("server", "Configure a connection to the server");
|
||||
|
||||
options->addOption("--" + _section + ".database",
|
||||
options->addOption("--server.database",
|
||||
"database name to use when connecting",
|
||||
new StringParameter(&_databaseName));
|
||||
|
||||
options->addOption("--" + _section + ".authentication",
|
||||
options->addOption("--server.authentication",
|
||||
"require authentication when connecting",
|
||||
new BooleanParameter(&_authentication));
|
||||
|
||||
options->addOption("--" + _section + ".username",
|
||||
options->addOption("--server.username",
|
||||
"username to use when connecting",
|
||||
new StringParameter(&_username));
|
||||
|
||||
options->addOption(
|
||||
"--" + _section + ".endpoint",
|
||||
"--server.endpoint",
|
||||
"endpoint to connect to, use 'none' to start without a server",
|
||||
new StringParameter(&_endpoint));
|
||||
|
||||
options->addOption("--" + _section + ".password",
|
||||
"password to use when connection. If not specified and "
|
||||
options->addOption("--server.password",
|
||||
"password to use when connecting. If not specified and "
|
||||
"authentication is required, the user will be prompted "
|
||||
"for a password.",
|
||||
"for a password",
|
||||
new StringParameter(&_password));
|
||||
|
||||
options->addOption("--" + _section + ".connection-timeout",
|
||||
options->addOption("--server.connection-timeout",
|
||||
"connection timeout in seconds",
|
||||
new DoubleParameter(&_connectionTimeout));
|
||||
|
||||
options->addOption("--" + _section + ".request-timeout",
|
||||
options->addOption("--server.request-timeout",
|
||||
"request timeout in seconds",
|
||||
new DoubleParameter(&_requestTimeout));
|
||||
|
||||
options->addOption("--server.max-packet-size",
|
||||
"maximum packet size (in bytes) for client/server communication",
|
||||
new UInt64Parameter(&_maxPacketSize));
|
||||
|
||||
std::unordered_set<uint64_t> sslProtocols = {1, 2, 3, 4};
|
||||
std::unordered_set<uint64_t> sslProtocols = {1, 2, 3, 4, 5};
|
||||
|
||||
options->addOption("--" + _section + ".ssl-protocol",
|
||||
"1 = SSLv2, 2 = SSLv23, 3 = SSLv3, 4 = TLSv1",
|
||||
options->addSection("ssl", "Configure SSL communication");
|
||||
options->addOption("--ssl.protocol",
|
||||
"ssl protocol (1 = SSLv2, 2 = SSLv23, 3 = SSLv3, 4 = "
|
||||
"TLSv1, 5 = TLSV1.2 (recommended)",
|
||||
new DiscreteValuesParameter<UInt64Parameter>(
|
||||
&_sslProtocol, sslProtocols));
|
||||
}
|
||||
|
||||
void ClientFeature::validateOptions(std::shared_ptr<ProgramOptions> options) {
|
||||
// if a username is specified explicitly, assume authentication is desired
|
||||
if (options->processingResult().touched(_section + ".username")) {
|
||||
if (options->processingResult().touched("server.username")) {
|
||||
_authentication = true;
|
||||
}
|
||||
|
||||
// check timeouts
|
||||
if (_connectionTimeout < 0.0) {
|
||||
LOG(FATAL) << "invalid value for --" << _section
|
||||
<< ".connect-timeout, must be >= 0";
|
||||
LOG(FATAL) << "invalid value for --server.connect-timeout, must be >= 0";
|
||||
FATAL_ERROR_EXIT();
|
||||
} else if (_connectionTimeout == 0.0) {
|
||||
_connectionTimeout = LONG_TIMEOUT;
|
||||
}
|
||||
|
||||
if (_requestTimeout < 0.0) {
|
||||
LOG(FATAL) << "invalid value for --" << _section
|
||||
<< ".request-timeout, must be positive";
|
||||
LOG(FATAL) << "invalid value for --server.request-timeout, must be positive";
|
||||
FATAL_ERROR_EXIT();
|
||||
} else if (_requestTimeout == 0.0) {
|
||||
_requestTimeout = LONG_TIMEOUT;
|
||||
}
|
||||
|
||||
if (_maxPacketSize < 1 * 1024 * 1024) {
|
||||
LOG(FATAL) << "invalid value for --server.max-packet-size, must be at least 1 MB";
|
||||
FATAL_ERROR_EXIT();
|
||||
}
|
||||
|
||||
// username must be non-empty
|
||||
if (_username.empty()) {
|
||||
LOG(FATAL) << "no value specified for --" << _section << ".username";
|
||||
LOG(FATAL) << "no value specified for --server.username";
|
||||
FATAL_ERROR_EXIT();
|
||||
}
|
||||
|
||||
// ask for a password
|
||||
if (_authentication &&
|
||||
!options->processingResult().touched(_section + ".password")) {
|
||||
!options->processingResult().touched("server.password")) {
|
||||
usleep(10 * 1000);
|
||||
|
||||
try {
|
||||
|
@ -145,6 +154,8 @@ void ClientFeature::validateOptions(std::shared_ptr<ProgramOptions> options) {
|
|||
std::cout << "Please specify a password: " << std::flush;
|
||||
std::getline(std::cin, _password);
|
||||
}
|
||||
|
||||
SimpleHttpClient::setMaxPacketSize(_maxPacketSize);
|
||||
}
|
||||
|
||||
std::unique_ptr<GeneralClientConnection> ClientFeature::createConnection() {
|
||||
|
|
|
@ -62,6 +62,7 @@ class ClientFeature final : public application_features::ApplicationFeature,
|
|||
void setPassword(std::string const& value) { _password = value; }
|
||||
double connectionTimeout() const { return _connectionTimeout; }
|
||||
double requestTimeout() const { return _requestTimeout; }
|
||||
uint64_t maxPacketSize() const { return _maxPacketSize; }
|
||||
uint64_t sslProtocol() const { return _sslProtocol; }
|
||||
|
||||
public:
|
||||
|
@ -89,10 +90,10 @@ class ClientFeature final : public application_features::ApplicationFeature,
|
|||
std::string _password;
|
||||
double _connectionTimeout;
|
||||
double _requestTimeout;
|
||||
uint64_t _maxPacketSize;
|
||||
uint64_t _sslProtocol;
|
||||
|
||||
private:
|
||||
std::string _section;
|
||||
size_t _retries;
|
||||
bool _warn;
|
||||
};
|
||||
|
|
|
@ -1,426 +1,432 @@
|
|||
include(GNUInstallDirs)
|
||||
|
||||
# etc -------------------------------
|
||||
set(ETCDIR "" CACHE path "System configuration directory (defaults to prefix/etc)")
|
||||
|
||||
# /etc -------------------------------
|
||||
if (ETCDIR STREQUAL "")
|
||||
set(ETCDIR_NATIVE "${CMAKE_INSTALL_PREFIX}/etc/arangodb3")
|
||||
set(ETCDIR_INSTALL "etc/arangodb3")
|
||||
else ()
|
||||
set(ETCDIR_NATIVE "${ETCDIR}/arangodb3")
|
||||
set(ETCDIR_INSTALL "${ETCDIR}/arangodb3")
|
||||
endif ()
|
||||
|
||||
# MS stuff ---------------------------
|
||||
if (MSVC)
|
||||
file(TO_NATIVE_PATH "${ETCDIR_INSTALL}" ETCDIR_INSTALL)
|
||||
STRING(REGEX REPLACE "\\\\" "\\\\\\\\" ETCDIR_ESCAPED "${ETCDIR_INSTALL}")
|
||||
else ()
|
||||
file(TO_NATIVE_PATH "${ETCDIR_NATIVE}" ETCDIR_NATIVE)
|
||||
STRING(REGEX REPLACE "\\\\" "\\\\\\\\" ETCDIR_ESCAPED "${ETCDIR_NATIVE}")
|
||||
endif ()
|
||||
|
||||
add_definitions("-D_SYSCONFDIR_=\"${ETCDIR_ESCAPED}\"")
|
||||
|
||||
# /var
|
||||
set(VARDIR ""
|
||||
CACHE path
|
||||
"System configuration directory (defaults to prefix/var/arangodb3)"
|
||||
)
|
||||
|
||||
if (VARDIR STREQUAL "")
|
||||
set(VARDIR_NATIVE "${CMAKE_INSTALL_PREFIX}/var")
|
||||
set(VARDIR_INSTALL "var")
|
||||
else ()
|
||||
set(VARDIR_NATIVE "${VARDIR}")
|
||||
set(VARDIR_INSTALL "${VARDIR}")
|
||||
endif ()
|
||||
|
||||
file(TO_NATIVE_PATH "${VARDIR_NATIVE}" VARDIR_NATIVE)
|
||||
|
||||
# database directory
|
||||
FILE(MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/var/lib/arangodb3")
|
||||
|
||||
# apps
|
||||
FILE(MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/var/lib/arangodb3-apps")
|
||||
|
||||
# logs
|
||||
FILE(MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/var/log/arangodb")
|
||||
|
||||
# package
|
||||
set(TRI_PKGDATADIR "${CMAKE_INSTALL_PREFIX}/share/arangodb3")
|
||||
|
||||
# resources
|
||||
set(TRI_RESOURCEDIR "resources")
|
||||
|
||||
# sbinaries
|
||||
if (MSVC)
|
||||
set(ARANGODB_INSTALL_SBIN "bin")
|
||||
set(TRI_SBINDIR "${CMAKE_INSTALL_PREFIX}/bin")
|
||||
else ()
|
||||
set(ARANGODB_INSTALL_SBIN "sbin")
|
||||
set(TRI_SBINDIR "${CMAKE_INSTALL_PREFIX}/sbin")
|
||||
endif ()
|
||||
|
||||
# MS Windows -------------------------------------------------------------------
|
||||
if (MSVC)
|
||||
# icon paths
|
||||
file(TO_NATIVE_PATH
|
||||
"${TRI_RESOURCEDIR}/Icons/arangodb.ico"
|
||||
RELATIVE_ARANGO_ICON
|
||||
)
|
||||
|
||||
file(TO_NATIVE_PATH
|
||||
"${PROJECT_SOURCE_DIR}/Installation/Windows/Icons/arangodb.bmp"
|
||||
ARANGO_IMG
|
||||
)
|
||||
|
||||
file(TO_NATIVE_PATH
|
||||
"${PROJECT_SOURCE_DIR}/Installation/Windows/Icons/arangodb.ico"
|
||||
ARANGO_ICON
|
||||
)
|
||||
|
||||
STRING(REGEX REPLACE "\\\\" "\\\\\\\\" ARANGO_IMG "${ARANGO_IMG}")
|
||||
STRING(REGEX REPLACE "\\\\" "\\\\\\\\" ARANGO_ICON "${ARANGO_ICON}")
|
||||
STRING(REGEX REPLACE "\\\\" "\\\\\\\\" RELATIVE_ARANGO_ICON "${RELATIVE_ARANGO_ICON}")
|
||||
|
||||
# versioning
|
||||
set(CMAKE_MODULE_PATH
|
||||
${CMAKE_MODULE_PATH}
|
||||
${PROJECT_SOURCE_DIR}/Installation/Windows/version
|
||||
)
|
||||
|
||||
include("${PROJECT_SOURCE_DIR}/Installation/Windows/version/generate_product_version.cmake")
|
||||
endif ()
|
||||
|
||||
################################################################################
|
||||
## INSTALL
|
||||
################################################################################
|
||||
|
||||
# Global macros ----------------------------------------------------------------
|
||||
macro (generate_root_config name)
|
||||
FILE(READ ${PROJECT_SOURCE_DIR}/etc/arangodb3/${name}.conf.in FileContent)
|
||||
STRING(REPLACE "@PKGDATADIR@" "@ROOTDIR@/share/arangodb3"
|
||||
FileContent "${FileContent}")
|
||||
STRING(REPLACE "@LOCALSTATEDIR@" "@ROOTDIR@/var"
|
||||
FileContent "${FileContent}")
|
||||
STRING(REPLACE "@SBINDIR@" "@ROOTDIR@/bin"
|
||||
FileContent "${FileContent}")
|
||||
STRING(REPLACE "@LIBEXECDIR@/arangodb3" "@ROOTDIR@/bin"
|
||||
FileContent "${FileContent}")
|
||||
STRING(REPLACE "@SYSCONFDIR@" "@ROOTDIR@/etc/arangodb3"
|
||||
FileContent "${FileContent}")
|
||||
if (MSVC)
|
||||
STRING(REPLACE "@PROGRAM_SUFFIX@" ".exe"
|
||||
FileContent "${FileContent}")
|
||||
STRING(REGEX REPLACE "[\r\n]file =" "\n# file ="
|
||||
FileContent "${FileContent}")
|
||||
endif ()
|
||||
FILE(WRITE ${PROJECT_BINARY_DIR}/etc/arangodb3/${name}.conf "${FileContent}")
|
||||
endmacro ()
|
||||
|
||||
# generates config file using the configured paths ----------------------------
|
||||
macro (generate_path_config name)
|
||||
FILE(READ ${PROJECT_SOURCE_DIR}/etc/arangodb3/${name}.conf.in FileContent)
|
||||
STRING(REPLACE "@PKGDATADIR@" "${TRI_PKGDATADIR}"
|
||||
FileContent "${FileContent}")
|
||||
STRING(REPLACE "@LOCALSTATEDIR@" "${VARDIR_NATIVE}"
|
||||
FileContent "${FileContent}")
|
||||
FILE(WRITE ${PROJECT_BINARY_DIR}/etc/arangodb3/${name}.conf "${FileContent}")
|
||||
endmacro ()
|
||||
|
||||
# installs a config file -------------------------------------------------------
|
||||
macro (install_config name)
|
||||
if (MSVC OR DARWIN)
|
||||
generate_root_config(${name})
|
||||
else ()
|
||||
generate_path_config(${name})
|
||||
endif ()
|
||||
install(
|
||||
FILES ${PROJECT_BINARY_DIR}/etc/arangodb3/${name}.conf
|
||||
DESTINATION ${ETCDIR_INSTALL})
|
||||
endmacro ()
|
||||
|
||||
# installs a readme file converting EOL ----------------------------------------
|
||||
macro (install_readme input where output)
|
||||
FILE(READ ${PROJECT_SOURCE_DIR}/${input} FileContent)
|
||||
STRING(REPLACE "\r" "" FileContent "${FileContent}")
|
||||
if (MSVC)
|
||||
STRING(REPLACE "\n" "\r\n" FileContent "${FileContent}")
|
||||
endif ()
|
||||
FILE(WRITE ${PROJECT_BINARY_DIR}/${output} "${FileContent}")
|
||||
install(
|
||||
FILES ${PROJECT_BINARY_DIR}/${output}
|
||||
DESTINATION ${where})
|
||||
endmacro ()
|
||||
|
||||
# installs a link to an executable ---------------------------------------------
|
||||
macro (install_command_alias name where alias)
|
||||
if (MSVC)
|
||||
add_custom_command(
|
||||
TARGET ${name}
|
||||
POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${name}>
|
||||
${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$(Configuration)/${alias}.exe)
|
||||
install(
|
||||
PROGRAMS ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$(Configuration)/${alias}.exe
|
||||
DESTINATION ${where})
|
||||
else ()
|
||||
add_custom_command(
|
||||
TARGET ${name}
|
||||
POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E create_symlink ${name}
|
||||
${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${alias})
|
||||
install(
|
||||
PROGRAMS ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${alias}
|
||||
DESTINATION ${where})
|
||||
endif ()
|
||||
endmacro ()
|
||||
|
||||
# sub directories --------------------------------------------------------------
|
||||
|
||||
#if(BUILD_STATIC_EXECUTABLES)
|
||||
# set(CMAKE_EXE_LINKER_FLAGS -static)
|
||||
# set(CMAKE_FIND_LIBRARY_SUFFIXES .a)
|
||||
# set(CMAKE_EXE_LINK_DYNAMIC_C_FLAGS) # remove -Wl,-Bdynamic
|
||||
# set(CMAKE_EXE_LINK_DYNAMIC_CXX_FLAGS)
|
||||
# set(CMAKE_SHARED_LIBRARY_C_FLAGS) # remove -fPIC
|
||||
# set(CMAKE_SHARED_LIBRARY_CXX_FLAGS)
|
||||
# set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS) # remove -rdynamic
|
||||
# set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS)
|
||||
# # Maybe this works as well, haven't tried yet.
|
||||
# # set_property(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS FALSE)
|
||||
#else(BUILD_STATIC_EXECUTABLES)
|
||||
# # Set RPATH to use for installed targets; append linker search path
|
||||
# set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${LOFAR_LIBDIR}")
|
||||
# set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
|
||||
#endif(BUILD_STATIC_EXECUTABLES)
|
||||
|
||||
|
||||
#--------------------------------------------------------------------------------
|
||||
#get_cmake_property(_variableNames VARIABLES)
|
||||
#foreach (_variableName ${_variableNames})
|
||||
# message(STATUS "${_variableName}=${${_variableName}}")
|
||||
#endforeach ()
|
||||
#--------------------------------------------------------------------------------
|
||||
|
||||
# install ----------------------------------------------------------------------
|
||||
install(DIRECTORY ${PROJECT_SOURCE_DIR}/Documentation/man/
|
||||
DESTINATION share/man)
|
||||
|
||||
if (MSVC)
|
||||
install_readme(README . README.txt)
|
||||
install_readme(README.md . README.md)
|
||||
install_readme(README.windows . README.windows.txt)
|
||||
endif ()
|
||||
|
||||
if (MSVC)
|
||||
install_readme(LICENSE . LICENSE.txt)
|
||||
install_readme(LICENSES-OTHER-COMPONENTS.md . LICENSES-OTHER-COMPONENTS.md)
|
||||
else ()
|
||||
install_readme(README share/doc/arangodb3 README)
|
||||
install_readme(README.md share/doc/arangodb3 README.md)
|
||||
install_readme(LICENSE share/doc/arangodb3 LICENSE)
|
||||
install_readme(LICENSES-OTHER-COMPONENTS.md share/doc/arangodb3 LICENSES-OTHER-COMPONENTS.md)
|
||||
endif ()
|
||||
|
||||
# Build package ----------------------------------------------------------------
|
||||
if (NOT(MSVC))
|
||||
set(CPACK_SET_DESTDIR ON)
|
||||
endif()
|
||||
|
||||
find_program(DH_INSTALLINIT dh_installinit)
|
||||
find_program(FAKEROOT fakeroot)
|
||||
|
||||
if (DH_INSTALLINIT AND FAKEROOT)
|
||||
add_custom_target(prepare_debian)
|
||||
SET(DEBIAN_CONTROL_EXTRA_BASENAMES
|
||||
postinst
|
||||
preinst
|
||||
postrm
|
||||
prerm
|
||||
)
|
||||
SET(DEBIAN_WORK_DIR "${PROJECT_BINARY_DIR}/debian-work")
|
||||
add_custom_command(TARGET prepare_debian POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E
|
||||
remove_directory "${DEBIAN_WORK_DIR}"
|
||||
)
|
||||
foreach (_DEBIAN_CONTROL_EXTRA_BASENAME ${DEBIAN_CONTROL_EXTRA_BASENAMES})
|
||||
SET(RELATIVE_NAME "debian/${_DEBIAN_CONTROL_EXTRA_BASENAME}")
|
||||
SET(SRCFILE "${PROJECT_SOURCE_DIR}/Installation/${RELATIVE_NAME}")
|
||||
SET(DESTFILE "${DEBIAN_WORK_DIR}/${RELATIVE_NAME}")
|
||||
|
||||
list(APPEND DEBIAN_CONTROL_EXTRA_SRC "${SRCFILE}")
|
||||
list(APPEND DEBIAN_CONTROL_EXTRA_DEST "${DESTFILE}")
|
||||
|
||||
add_custom_command(TARGET prepare_debian POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E
|
||||
copy ${SRCFILE} ${DESTFILE})
|
||||
endforeach()
|
||||
|
||||
add_custom_command(TARGET prepare_debian POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E
|
||||
copy "${PROJECT_SOURCE_DIR}/Installation/debian/control" "${DEBIAN_WORK_DIR}/debian/control"
|
||||
)
|
||||
add_custom_command(TARGET prepare_debian POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E
|
||||
copy "${PROJECT_SOURCE_DIR}/Installation/debian/compat" "${DEBIAN_WORK_DIR}/debian/compat"
|
||||
)
|
||||
add_custom_command(TARGET prepare_debian POST_BUILD
|
||||
COMMAND fakeroot "${DH_INSTALLINIT}" -o 2>/dev/null
|
||||
WORKING_DIRECTORY ${DEBIAN_WORK_DIR}
|
||||
)
|
||||
add_custom_command(TARGET prepare_debian POST_BUILD
|
||||
COMMAND fakeroot dh_installdeb
|
||||
WORKING_DIRECTORY ${DEBIAN_WORK_DIR}
|
||||
)
|
||||
endif()
|
||||
|
||||
# General
|
||||
set(CPACK_PACKAGE_NAME "arangodb3")
|
||||
set(CPACK_PACKAGE_VENDOR "ArangoDB GmbH")
|
||||
set(CPACK_PACKAGE_CONTACT "info@arangodb.com")
|
||||
set(CPACK_PACKAGE_VERSION "${ARANGODB_VERSION}")
|
||||
|
||||
set(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE")
|
||||
|
||||
set(CPACK_STRIP_FILES "ON")
|
||||
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64")
|
||||
set(CPACK_DEBIAN_PACKAGE_SECTION "database")
|
||||
set(CPACK_DEBIAN_PACKAGE_DESCRIPTION "a multi-purpose NoSQL database
|
||||
A distributed free and open-source database with a flexible data model for documents,
|
||||
graphs, and key-values. Build high performance applications using a convenient
|
||||
SQL-like query language or JavaScript extensions.
|
||||
.
|
||||
Copyright: 2014-2016 by ArangoDB GmbH
|
||||
Copyright: 2012-2013 by triAGENS GmbH
|
||||
ArangoDB Software
|
||||
www.arangodb.com
|
||||
")
|
||||
SET(CPACK_DEBIAN_PACKAGE_CONFLICTS "arangodb")
|
||||
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
|
||||
set(CPACK_DEBIAN_COMPRESSION_TYPE "xz")
|
||||
set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://www.arangodb.com/")
|
||||
set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${PROJECT_BINARY_DIR}/debian-work/debian/${CPACK_PACKAGE_NAME}/DEBIAN/postinst;${PROJECT_BINARY_DIR}/debian-work/debian/${CPACK_PACKAGE_NAME}/DEBIAN/preinst;${PROJECT_BINARY_DIR}/debian-work/debian/${CPACK_PACKAGE_NAME}/DEBIAN/postrm;${PROJECT_BINARY_DIR}/debian-work/debian/${CPACK_PACKAGE_NAME}/DEBIAN/prerm;")
|
||||
set(CPACK_BUNDLE_NAME "${CPACK_PACKAGE_NAME}")
|
||||
configure_file("${PROJECT_SOURCE_DIR}/Installation/MacOSX/Bundle/Info.plist.in" "${CMAKE_CURRENT_BINARY_DIR}/Info.plist")
|
||||
set(CPACK_BUNDLE_PLIST "${CMAKE_CURRENT_BINARY_DIR}/Info.plist")
|
||||
set(CPACK_BUNDLE_ICON "${PROJECT_SOURCE_DIR}/Installation/MacOSX/Bundle/icon.icns")
|
||||
set(CPACK_BUNDLE_STARTUP_COMMAND "${PROJECT_SOURCE_DIR}/Installation/MacOSX/Bundle/arangodb-cli.sh")
|
||||
|
||||
# MS installer
|
||||
if (MSVC)
|
||||
set(CPACK_PACKAGE_NAME "ArangoDB")
|
||||
set(CPACK_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/Installation/Windows/Templates")
|
||||
set(CPACK_PLUGIN_PATH "${CMAKE_CURRENT_SOURCE_DIR}/Installation/Windows/Plugins")
|
||||
set(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL 1)
|
||||
set(BITS 64)
|
||||
|
||||
if (CMAKE_CL_64)
|
||||
SET(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES64")
|
||||
SET(BITS 64)
|
||||
else ()
|
||||
SET(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES")
|
||||
SET(BITS 32)
|
||||
endif ()
|
||||
|
||||
message(STATUS "ARANGO_IMG: ${ARANGO_IMG}")
|
||||
message(STATUS "ARANGO_ICON: ${ARANGO_ICON}")
|
||||
message(STATUS "RELATIVE_ARANGO_ICON: ${RELATIVE_ARANGO_ICON}")
|
||||
|
||||
install(
|
||||
DIRECTORY "${PROJECT_SOURCE_DIR}/Installation/Windows/Icons"
|
||||
DESTINATION ${TRI_RESOURCEDIR})
|
||||
|
||||
set(CPACK_NSIS_DEFINES "
|
||||
!define BITS ${BITS}
|
||||
!define TRI_FRIENDLY_SVC_NAME '${ARANGODB_FRIENDLY_STRING}'
|
||||
!define TRI_AARDVARK_URL 'http://127.0.0.1:8529'
|
||||
")
|
||||
|
||||
set(CPACK_PACKAGE_ICON ${ARANGO_ICON})
|
||||
|
||||
set(CPACK_NSIS_MODIFY_PATH ON)
|
||||
set(CPACK_NSIS_MUI_ICON ${ARANGO_ICON})
|
||||
set(CPACK_NSIS_MUI_UNIICON ${ARANGO_ICON})
|
||||
set(CPACK_NSIS_INSTALLED_ICON_NAME ${RELATIVE_ARANGO_ICON})
|
||||
set(CPACK_NSIS_DISPLAY_NAME, ${ARANGODB_DISPLAY_NAME})
|
||||
set(CPACK_NSIS_HELP_LINK ${ARANGODB_HELP_LINK})
|
||||
set(CPACK_NSIS_URL_INFO_ABOUT ${ARANGODB_URL_INFO_ABOUT})
|
||||
set(CPACK_NSIS_CONTACT ${ARANGODB_CONTACT})
|
||||
endif ()
|
||||
|
||||
configure_file("${CMAKE_SOURCE_DIR}/Installation/cmake/CMakeCPackOptions.cmake.in"
|
||||
"${CMAKE_BINARY_DIR}/CMakeCPackOptions.cmake" @ONLY)
|
||||
set(CPACK_PROJECT_CONFIG_FILE "${CMAKE_BINARY_DIR}/CMakeCPackOptions.cmake")
|
||||
|
||||
if (NOT(MSVC))
|
||||
# components
|
||||
install(
|
||||
FILES ${PROJECT_SOURCE_DIR}/Installation/debian/arangodb.init
|
||||
PERMISSIONS OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
|
||||
DESTINATION ${ETCDIR}/init.d
|
||||
RENAME arangodb3
|
||||
COMPONENT debian-extras
|
||||
)
|
||||
endif()
|
||||
|
||||
# Custom targets ----------------------------------------------------------------
|
||||
|
||||
# love
|
||||
add_custom_target (love
|
||||
COMMENT "ArangoDB loves you."
|
||||
COMMAND ""
|
||||
)
|
||||
|
||||
|
||||
# Finally: user cpack
|
||||
include(CPack)
|
||||
|
||||
################################################################################
|
||||
### @brief install client-side JavaScript files
|
||||
################################################################################
|
||||
|
||||
install(
|
||||
DIRECTORY ${PROJECT_SOURCE_DIR}/js/common ${PROJECT_SOURCE_DIR}/js/client
|
||||
DESTINATION share/arangodb3/js
|
||||
FILES_MATCHING PATTERN "*.js"
|
||||
REGEX "^.*/common/test-data$" EXCLUDE
|
||||
REGEX "^.*/common/tests$" EXCLUDE
|
||||
REGEX "^.*/client/tests$" EXCLUDE)
|
||||
|
||||
################################################################################
|
||||
### @brief install server-side JavaScript files
|
||||
################################################################################
|
||||
|
||||
install(
|
||||
DIRECTORY ${PROJECT_SOURCE_DIR}/js/actions ${PROJECT_SOURCE_DIR}/js/apps ${PROJECT_SOURCE_DIR}/js/contrib ${PROJECT_SOURCE_DIR}/js/node ${PROJECT_SOURCE_DIR}/js/server
|
||||
DESTINATION share/arangodb3/js
|
||||
REGEX "^.*/server/tests$" EXCLUDE
|
||||
REGEX "^.*/aardvark/APP/node_modules$" EXCLUDE
|
||||
)
|
||||
|
||||
################################################################################
|
||||
### @brief install log directory
|
||||
################################################################################
|
||||
|
||||
install(
|
||||
DIRECTORY ${PROJECT_BINARY_DIR}/var/log/arangodb
|
||||
DESTINATION ${VARDIR_INSTALL}/log)
|
||||
|
||||
################################################################################
|
||||
### @brief install database directory
|
||||
################################################################################
|
||||
|
||||
install(
|
||||
DIRECTORY ${PROJECT_BINARY_DIR}/var/lib/arangodb3
|
||||
DESTINATION ${VARDIR_INSTALL}/lib)
|
||||
|
||||
################################################################################
|
||||
### @brief install apps directory
|
||||
################################################################################
|
||||
|
||||
install(
|
||||
DIRECTORY ${PROJECT_BINARY_DIR}/var/lib/arangodb3-apps
|
||||
DESTINATION ${VARDIR_INSTALL}/lib)
|
||||
include(GNUInstallDirs)
|
||||
|
||||
# install the visual studio runtime:
|
||||
if (MSVC)
|
||||
include(InstallRequiredSystemLibraries)
|
||||
INSTALL(FILES ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS} DESTINATION bin COMPONENT Libraries)
|
||||
endif()
|
||||
|
||||
# etc -------------------------------
|
||||
set(ETCDIR "" CACHE path "System configuration directory (defaults to prefix/etc)")
|
||||
|
||||
# /etc -------------------------------
|
||||
if (ETCDIR STREQUAL "")
|
||||
set(ETCDIR_NATIVE "${CMAKE_INSTALL_PREFIX}/etc/arangodb3")
|
||||
set(ETCDIR_INSTALL "etc/arangodb3")
|
||||
else ()
|
||||
set(ETCDIR_NATIVE "${ETCDIR}/arangodb3")
|
||||
set(ETCDIR_INSTALL "${ETCDIR}/arangodb3")
|
||||
endif ()
|
||||
|
||||
# MS stuff ---------------------------
|
||||
if (MSVC)
|
||||
file(TO_NATIVE_PATH "${ETCDIR_INSTALL}" ETCDIR_INSTALL)
|
||||
STRING(REGEX REPLACE "\\\\" "\\\\\\\\" ETCDIR_ESCAPED "${ETCDIR_INSTALL}")
|
||||
else ()
|
||||
file(TO_NATIVE_PATH "${ETCDIR_NATIVE}" ETCDIR_NATIVE)
|
||||
STRING(REGEX REPLACE "\\\\" "\\\\\\\\" ETCDIR_ESCAPED "${ETCDIR_NATIVE}")
|
||||
endif ()
|
||||
|
||||
add_definitions("-D_SYSCONFDIR_=\"${ETCDIR_ESCAPED}\"")
|
||||
|
||||
# /var
|
||||
set(VARDIR ""
|
||||
CACHE path
|
||||
"System configuration directory (defaults to prefix/var/arangodb3)"
|
||||
)
|
||||
|
||||
if (VARDIR STREQUAL "")
|
||||
set(VARDIR_NATIVE "${CMAKE_INSTALL_PREFIX}/var")
|
||||
set(VARDIR_INSTALL "var")
|
||||
else ()
|
||||
set(VARDIR_NATIVE "${VARDIR}")
|
||||
set(VARDIR_INSTALL "${VARDIR}")
|
||||
endif ()
|
||||
|
||||
file(TO_NATIVE_PATH "${VARDIR_NATIVE}" VARDIR_NATIVE)
|
||||
|
||||
# database directory
|
||||
FILE(MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/var/lib/arangodb3")
|
||||
|
||||
# apps
|
||||
FILE(MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/var/lib/arangodb3-apps")
|
||||
|
||||
# logs
|
||||
FILE(MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/var/log/arangodb")
|
||||
|
||||
# package
|
||||
set(TRI_PKGDATADIR "${CMAKE_INSTALL_PREFIX}/share/arangodb3")
|
||||
|
||||
# resources
|
||||
set(TRI_RESOURCEDIR "resources")
|
||||
|
||||
# sbinaries
|
||||
if (MSVC)
|
||||
set(ARANGODB_INSTALL_SBIN "bin")
|
||||
set(TRI_SBINDIR "${CMAKE_INSTALL_PREFIX}/bin")
|
||||
else ()
|
||||
set(ARANGODB_INSTALL_SBIN "sbin")
|
||||
set(TRI_SBINDIR "${CMAKE_INSTALL_PREFIX}/sbin")
|
||||
endif ()
|
||||
|
||||
# MS Windows -------------------------------------------------------------------
|
||||
if (MSVC)
|
||||
# icon paths
|
||||
file(TO_NATIVE_PATH
|
||||
"${TRI_RESOURCEDIR}/Icons/arangodb.ico"
|
||||
RELATIVE_ARANGO_ICON
|
||||
)
|
||||
|
||||
file(TO_NATIVE_PATH
|
||||
"${PROJECT_SOURCE_DIR}/Installation/Windows/Icons/arangodb.bmp"
|
||||
ARANGO_IMG
|
||||
)
|
||||
|
||||
file(TO_NATIVE_PATH
|
||||
"${PROJECT_SOURCE_DIR}/Installation/Windows/Icons/arangodb.ico"
|
||||
ARANGO_ICON
|
||||
)
|
||||
|
||||
STRING(REGEX REPLACE "\\\\" "\\\\\\\\" ARANGO_IMG "${ARANGO_IMG}")
|
||||
STRING(REGEX REPLACE "\\\\" "\\\\\\\\" ARANGO_ICON "${ARANGO_ICON}")
|
||||
STRING(REGEX REPLACE "\\\\" "\\\\\\\\" RELATIVE_ARANGO_ICON "${RELATIVE_ARANGO_ICON}")
|
||||
|
||||
# versioning
|
||||
set(CMAKE_MODULE_PATH
|
||||
${CMAKE_MODULE_PATH}
|
||||
${PROJECT_SOURCE_DIR}/Installation/Windows/version
|
||||
)
|
||||
|
||||
include("${PROJECT_SOURCE_DIR}/Installation/Windows/version/generate_product_version.cmake")
|
||||
endif ()
|
||||
|
||||
################################################################################
|
||||
## INSTALL
|
||||
################################################################################
|
||||
|
||||
# Global macros ----------------------------------------------------------------
|
||||
macro (generate_root_config name)
|
||||
FILE(READ ${PROJECT_SOURCE_DIR}/etc/arangodb3/${name}.conf.in FileContent)
|
||||
STRING(REPLACE "@PKGDATADIR@" "@ROOTDIR@/share/arangodb3"
|
||||
FileContent "${FileContent}")
|
||||
STRING(REPLACE "@LOCALSTATEDIR@" "@ROOTDIR@/var"
|
||||
FileContent "${FileContent}")
|
||||
STRING(REPLACE "@SBINDIR@" "@ROOTDIR@/bin"
|
||||
FileContent "${FileContent}")
|
||||
STRING(REPLACE "@LIBEXECDIR@/arangodb3" "@ROOTDIR@/bin"
|
||||
FileContent "${FileContent}")
|
||||
STRING(REPLACE "@SYSCONFDIR@" "@ROOTDIR@/etc/arangodb3"
|
||||
FileContent "${FileContent}")
|
||||
if (MSVC)
|
||||
STRING(REPLACE "@PROGRAM_SUFFIX@" ".exe"
|
||||
FileContent "${FileContent}")
|
||||
STRING(REGEX REPLACE "[\r\n]file =" "\n# file ="
|
||||
FileContent "${FileContent}")
|
||||
endif ()
|
||||
FILE(WRITE ${PROJECT_BINARY_DIR}/etc/arangodb3/${name}.conf "${FileContent}")
|
||||
endmacro ()
|
||||
|
||||
# generates config file using the configured paths ----------------------------
|
||||
macro (generate_path_config name)
|
||||
FILE(READ ${PROJECT_SOURCE_DIR}/etc/arangodb3/${name}.conf.in FileContent)
|
||||
STRING(REPLACE "@PKGDATADIR@" "${TRI_PKGDATADIR}"
|
||||
FileContent "${FileContent}")
|
||||
STRING(REPLACE "@LOCALSTATEDIR@" "${VARDIR_NATIVE}"
|
||||
FileContent "${FileContent}")
|
||||
FILE(WRITE ${PROJECT_BINARY_DIR}/etc/arangodb3/${name}.conf "${FileContent}")
|
||||
endmacro ()
|
||||
|
||||
# installs a config file -------------------------------------------------------
|
||||
macro (install_config name)
|
||||
if (MSVC OR (DARWIN AND NOT HOMEBREW))
|
||||
generate_root_config(${name})
|
||||
else ()
|
||||
generate_path_config(${name})
|
||||
endif ()
|
||||
install(
|
||||
FILES ${PROJECT_BINARY_DIR}/etc/arangodb3/${name}.conf
|
||||
DESTINATION ${ETCDIR_INSTALL})
|
||||
endmacro ()
|
||||
|
||||
# installs a readme file converting EOL ----------------------------------------
|
||||
macro (install_readme input where output)
|
||||
FILE(READ ${PROJECT_SOURCE_DIR}/${input} FileContent)
|
||||
STRING(REPLACE "\r" "" FileContent "${FileContent}")
|
||||
if (MSVC)
|
||||
STRING(REPLACE "\n" "\r\n" FileContent "${FileContent}")
|
||||
endif ()
|
||||
FILE(WRITE ${PROJECT_BINARY_DIR}/${output} "${FileContent}")
|
||||
install(
|
||||
FILES ${PROJECT_BINARY_DIR}/${output}
|
||||
DESTINATION ${where})
|
||||
endmacro ()
|
||||
|
||||
# installs a link to an executable ---------------------------------------------
|
||||
macro (install_command_alias name where alias)
|
||||
if (MSVC)
|
||||
add_custom_command(
|
||||
TARGET ${name}
|
||||
POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${name}>
|
||||
${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$<CONFIGURATION>/${alias}.exe)
|
||||
install(
|
||||
PROGRAMS ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$<CONFIGURATION>/${alias}.exe
|
||||
DESTINATION ${where})
|
||||
else ()
|
||||
add_custom_command(
|
||||
TARGET ${name}
|
||||
POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E create_symlink ${name}
|
||||
${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${alias})
|
||||
install(
|
||||
PROGRAMS ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${alias}
|
||||
DESTINATION ${where})
|
||||
endif ()
|
||||
endmacro ()
|
||||
|
||||
# sub directories --------------------------------------------------------------
|
||||
|
||||
#if(BUILD_STATIC_EXECUTABLES)
|
||||
# set(CMAKE_EXE_LINKER_FLAGS -static)
|
||||
# set(CMAKE_FIND_LIBRARY_SUFFIXES .a)
|
||||
# set(CMAKE_EXE_LINK_DYNAMIC_C_FLAGS) # remove -Wl,-Bdynamic
|
||||
# set(CMAKE_EXE_LINK_DYNAMIC_CXX_FLAGS)
|
||||
# set(CMAKE_SHARED_LIBRARY_C_FLAGS) # remove -fPIC
|
||||
# set(CMAKE_SHARED_LIBRARY_CXX_FLAGS)
|
||||
# set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS) # remove -rdynamic
|
||||
# set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS)
|
||||
# # Maybe this works as well, haven't tried yet.
|
||||
# # set_property(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS FALSE)
|
||||
#else(BUILD_STATIC_EXECUTABLES)
|
||||
# # Set RPATH to use for installed targets; append linker search path
|
||||
# set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${LOFAR_LIBDIR}")
|
||||
# set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
|
||||
#endif(BUILD_STATIC_EXECUTABLES)
|
||||
|
||||
|
||||
#--------------------------------------------------------------------------------
|
||||
#get_cmake_property(_variableNames VARIABLES)
|
||||
#foreach (_variableName ${_variableNames})
|
||||
# message(STATUS "${_variableName}=${${_variableName}}")
|
||||
#endforeach ()
|
||||
#--------------------------------------------------------------------------------
|
||||
|
||||
# install ----------------------------------------------------------------------
|
||||
install(DIRECTORY ${PROJECT_SOURCE_DIR}/Documentation/man/
|
||||
DESTINATION share/man)
|
||||
|
||||
if (MSVC)
|
||||
install_readme(README . README.txt)
|
||||
install_readme(README.md . README.md)
|
||||
install_readme(README.windows . README.windows.txt)
|
||||
endif ()
|
||||
|
||||
if (MSVC)
|
||||
install_readme(LICENSE . LICENSE.txt)
|
||||
install_readme(LICENSES-OTHER-COMPONENTS.md . LICENSES-OTHER-COMPONENTS.md)
|
||||
else ()
|
||||
install_readme(README share/doc/arangodb3 README)
|
||||
install_readme(README.md share/doc/arangodb3 README.md)
|
||||
install_readme(LICENSE share/doc/arangodb3 LICENSE)
|
||||
install_readme(LICENSES-OTHER-COMPONENTS.md share/doc/arangodb3 LICENSES-OTHER-COMPONENTS.md)
|
||||
endif ()
|
||||
|
||||
# Build package ----------------------------------------------------------------
|
||||
if (NOT(MSVC))
|
||||
set(CPACK_SET_DESTDIR ON)
|
||||
endif()
|
||||
|
||||
find_program(DH_INSTALLINIT dh_installinit)
|
||||
find_program(FAKEROOT fakeroot)
|
||||
|
||||
if (DH_INSTALLINIT AND FAKEROOT)
|
||||
add_custom_target(prepare_debian)
|
||||
SET(DEBIAN_CONTROL_EXTRA_BASENAMES
|
||||
postinst
|
||||
preinst
|
||||
postrm
|
||||
prerm
|
||||
)
|
||||
SET(DEBIAN_WORK_DIR "${PROJECT_BINARY_DIR}/debian-work")
|
||||
add_custom_command(TARGET prepare_debian POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E
|
||||
remove_directory "${DEBIAN_WORK_DIR}"
|
||||
)
|
||||
foreach (_DEBIAN_CONTROL_EXTRA_BASENAME ${DEBIAN_CONTROL_EXTRA_BASENAMES})
|
||||
SET(RELATIVE_NAME "debian/${_DEBIAN_CONTROL_EXTRA_BASENAME}")
|
||||
SET(SRCFILE "${PROJECT_SOURCE_DIR}/Installation/${RELATIVE_NAME}")
|
||||
SET(DESTFILE "${DEBIAN_WORK_DIR}/${RELATIVE_NAME}")
|
||||
|
||||
list(APPEND DEBIAN_CONTROL_EXTRA_SRC "${SRCFILE}")
|
||||
list(APPEND DEBIAN_CONTROL_EXTRA_DEST "${DESTFILE}")
|
||||
|
||||
add_custom_command(TARGET prepare_debian POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E
|
||||
copy ${SRCFILE} ${DESTFILE})
|
||||
endforeach()
|
||||
|
||||
add_custom_command(TARGET prepare_debian POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E
|
||||
copy "${PROJECT_SOURCE_DIR}/Installation/debian/control" "${DEBIAN_WORK_DIR}/debian/control"
|
||||
)
|
||||
add_custom_command(TARGET prepare_debian POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E
|
||||
copy "${PROJECT_SOURCE_DIR}/Installation/debian/compat" "${DEBIAN_WORK_DIR}/debian/compat"
|
||||
)
|
||||
add_custom_command(TARGET prepare_debian POST_BUILD
|
||||
COMMAND fakeroot "${DH_INSTALLINIT}" -o 2>/dev/null
|
||||
WORKING_DIRECTORY ${DEBIAN_WORK_DIR}
|
||||
)
|
||||
add_custom_command(TARGET prepare_debian POST_BUILD
|
||||
COMMAND fakeroot dh_installdeb
|
||||
WORKING_DIRECTORY ${DEBIAN_WORK_DIR}
|
||||
)
|
||||
endif()
|
||||
|
||||
# General
|
||||
set(CPACK_PACKAGE_NAME "arangodb3")
|
||||
set(CPACK_PACKAGE_VENDOR "ArangoDB GmbH")
|
||||
set(CPACK_PACKAGE_CONTACT "info@arangodb.com")
|
||||
set(CPACK_PACKAGE_VERSION "${ARANGODB_VERSION}")
|
||||
|
||||
set(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE")
|
||||
|
||||
set(CPACK_STRIP_FILES "ON")
|
||||
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64")
|
||||
set(CPACK_DEBIAN_PACKAGE_SECTION "database")
|
||||
set(CPACK_DEBIAN_PACKAGE_DESCRIPTION "a multi-purpose NoSQL database
|
||||
A distributed free and open-source database with a flexible data model for documents,
|
||||
graphs, and key-values. Build high performance applications using a convenient
|
||||
SQL-like query language or JavaScript extensions.
|
||||
.
|
||||
Copyright: 2014-2016 by ArangoDB GmbH
|
||||
Copyright: 2012-2013 by triAGENS GmbH
|
||||
ArangoDB Software
|
||||
www.arangodb.com
|
||||
")
|
||||
SET(CPACK_DEBIAN_PACKAGE_CONFLICTS "arangodb")
|
||||
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
|
||||
set(CPACK_DEBIAN_COMPRESSION_TYPE "xz")
|
||||
set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://www.arangodb.com/")
|
||||
set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${PROJECT_BINARY_DIR}/debian-work/debian/${CPACK_PACKAGE_NAME}/DEBIAN/postinst;${PROJECT_BINARY_DIR}/debian-work/debian/${CPACK_PACKAGE_NAME}/DEBIAN/preinst;${PROJECT_BINARY_DIR}/debian-work/debian/${CPACK_PACKAGE_NAME}/DEBIAN/postrm;${PROJECT_BINARY_DIR}/debian-work/debian/${CPACK_PACKAGE_NAME}/DEBIAN/prerm;")
|
||||
set(CPACK_BUNDLE_NAME "${CPACK_PACKAGE_NAME}")
|
||||
configure_file("${PROJECT_SOURCE_DIR}/Installation/MacOSX/Bundle/Info.plist.in" "${CMAKE_CURRENT_BINARY_DIR}/Info.plist")
|
||||
set(CPACK_BUNDLE_PLIST "${CMAKE_CURRENT_BINARY_DIR}/Info.plist")
|
||||
set(CPACK_BUNDLE_ICON "${PROJECT_SOURCE_DIR}/Installation/MacOSX/Bundle/icon.icns")
|
||||
set(CPACK_BUNDLE_STARTUP_COMMAND "${PROJECT_SOURCE_DIR}/Installation/MacOSX/Bundle/arangodb-cli.sh")
|
||||
|
||||
# MS installer
|
||||
if (MSVC)
|
||||
set(CPACK_PACKAGE_NAME "ArangoDB")
|
||||
set(CPACK_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/Installation/Windows/Templates")
|
||||
set(CPACK_PLUGIN_PATH "${CMAKE_CURRENT_SOURCE_DIR}/Installation/Windows/Plugins")
|
||||
set(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL 1)
|
||||
set(BITS 64)
|
||||
|
||||
if (CMAKE_CL_64)
|
||||
SET(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES64")
|
||||
SET(BITS 64)
|
||||
else ()
|
||||
SET(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES")
|
||||
SET(BITS 32)
|
||||
endif ()
|
||||
|
||||
message(STATUS "ARANGO_IMG: ${ARANGO_IMG}")
|
||||
message(STATUS "ARANGO_ICON: ${ARANGO_ICON}")
|
||||
message(STATUS "RELATIVE_ARANGO_ICON: ${RELATIVE_ARANGO_ICON}")
|
||||
|
||||
install(
|
||||
DIRECTORY "${PROJECT_SOURCE_DIR}/Installation/Windows/Icons"
|
||||
DESTINATION ${TRI_RESOURCEDIR})
|
||||
|
||||
set(CPACK_NSIS_DEFINES "
|
||||
!define BITS ${BITS}
|
||||
!define TRI_FRIENDLY_SVC_NAME '${ARANGODB_FRIENDLY_STRING}'
|
||||
!define TRI_AARDVARK_URL 'http://127.0.0.1:8529'
|
||||
")
|
||||
|
||||
set(CPACK_PACKAGE_ICON ${ARANGO_ICON})
|
||||
|
||||
set(CPACK_NSIS_MODIFY_PATH ON)
|
||||
set(CPACK_NSIS_MUI_ICON ${ARANGO_ICON})
|
||||
set(CPACK_NSIS_MUI_UNIICON ${ARANGO_ICON})
|
||||
set(CPACK_NSIS_INSTALLED_ICON_NAME ${RELATIVE_ARANGO_ICON})
|
||||
set(CPACK_NSIS_DISPLAY_NAME, ${ARANGODB_DISPLAY_NAME})
|
||||
set(CPACK_NSIS_HELP_LINK ${ARANGODB_HELP_LINK})
|
||||
set(CPACK_NSIS_URL_INFO_ABOUT ${ARANGODB_URL_INFO_ABOUT})
|
||||
set(CPACK_NSIS_CONTACT ${ARANGODB_CONTACT})
|
||||
endif ()
|
||||
|
||||
configure_file("${CMAKE_SOURCE_DIR}/Installation/cmake/CMakeCPackOptions.cmake.in"
|
||||
"${CMAKE_BINARY_DIR}/CMakeCPackOptions.cmake" @ONLY)
|
||||
set(CPACK_PROJECT_CONFIG_FILE "${CMAKE_BINARY_DIR}/CMakeCPackOptions.cmake")
|
||||
|
||||
if (NOT(MSVC))
|
||||
# components
|
||||
install(
|
||||
FILES ${PROJECT_SOURCE_DIR}/Installation/debian/arangodb.init
|
||||
PERMISSIONS OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
|
||||
DESTINATION ${ETCDIR}/init.d
|
||||
RENAME arangodb3
|
||||
COMPONENT debian-extras
|
||||
)
|
||||
endif()
|
||||
|
||||
# Custom targets ----------------------------------------------------------------
|
||||
|
||||
# love
|
||||
add_custom_target (love
|
||||
COMMENT "ArangoDB loves you."
|
||||
COMMAND ""
|
||||
)
|
||||
|
||||
|
||||
# Finally: user cpack
|
||||
include(CPack)
|
||||
|
||||
################################################################################
|
||||
### @brief install client-side JavaScript files
|
||||
################################################################################
|
||||
|
||||
install(
|
||||
DIRECTORY ${PROJECT_SOURCE_DIR}/js/common ${PROJECT_SOURCE_DIR}/js/client
|
||||
DESTINATION share/arangodb3/js
|
||||
FILES_MATCHING PATTERN "*.js"
|
||||
REGEX "^.*/common/test-data$" EXCLUDE
|
||||
REGEX "^.*/common/tests$" EXCLUDE
|
||||
REGEX "^.*/client/tests$" EXCLUDE)
|
||||
|
||||
################################################################################
|
||||
### @brief install server-side JavaScript files
|
||||
################################################################################
|
||||
|
||||
install(
|
||||
DIRECTORY ${PROJECT_SOURCE_DIR}/js/actions ${PROJECT_SOURCE_DIR}/js/apps ${PROJECT_SOURCE_DIR}/js/contrib ${PROJECT_SOURCE_DIR}/js/node ${PROJECT_SOURCE_DIR}/js/server
|
||||
DESTINATION share/arangodb3/js
|
||||
REGEX "^.*/server/tests$" EXCLUDE
|
||||
REGEX "^.*/aardvark/APP/node_modules$" EXCLUDE
|
||||
)
|
||||
|
||||
################################################################################
|
||||
### @brief install log directory
|
||||
################################################################################
|
||||
|
||||
install(
|
||||
DIRECTORY ${PROJECT_BINARY_DIR}/var/log/arangodb
|
||||
DESTINATION ${VARDIR_INSTALL}/log)
|
||||
|
||||
################################################################################
|
||||
### @brief install database directory
|
||||
################################################################################
|
||||
|
||||
install(
|
||||
DIRECTORY ${PROJECT_BINARY_DIR}/var/lib/arangodb3
|
||||
DESTINATION ${VARDIR_INSTALL}/lib)
|
||||
|
||||
################################################################################
|
||||
### @brief install apps directory
|
||||
################################################################################
|
||||
|
||||
install(
|
||||
DIRECTORY ${PROJECT_BINARY_DIR}/var/lib/arangodb3-apps
|
||||
DESTINATION ${VARDIR_INSTALL}/lib)
|
||||
|
|
|
@ -297,8 +297,26 @@
|
|||
this.buildSubNavBar(menus);
|
||||
},
|
||||
|
||||
buildNodesSubNav: function(activeKey, disabled) {
|
||||
var menus = {
|
||||
Overview: {
|
||||
route: '#nodes'
|
||||
},
|
||||
Shards: {
|
||||
route: '#shards'
|
||||
}
|
||||
};
|
||||
|
||||
menus[activeKey].active = true;
|
||||
if (disabled) {
|
||||
menus[disabled].disabled = true;
|
||||
}
|
||||
this.buildSubNavBar(menus);
|
||||
},
|
||||
|
||||
scaleability: undefined,
|
||||
|
||||
/*
|
||||
//nav for cluster/nodes view
|
||||
buildNodesSubNav: function(type) {
|
||||
|
||||
|
@ -363,6 +381,7 @@
|
|||
|
||||
this.buildSubNavBar(menus);
|
||||
},
|
||||
*/
|
||||
|
||||
//nav for collection view
|
||||
buildCollectionSubNav: function(collectionName, activeKey) {
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
<script id="shardsView.ejs" type="text/template">
|
||||
|
||||
<div id="shardsContent" class="innerContent">
|
||||
|
||||
<% var genClass = 'pure-u-1-3'; %>
|
||||
<% var disabled = ' '; %>
|
||||
|
||||
|
@ -23,12 +22,13 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<% var counter = 0; %>
|
||||
<% _.each(collection.Plan, function(shard, name) { %>
|
||||
<div class="pure-g pure-table pure-table-body">
|
||||
<div class="pure-table-row disabled">
|
||||
|
||||
<div class="<%= genClass %> left"><%= name %></div>
|
||||
<% if (name === Object.keys(collection.Current)[0]) { %>
|
||||
<% if (name === Object.keys(collection.Current)[counter]) { %>
|
||||
<div class="<%= genClass %> positive left"><%= shard.leader %></div>
|
||||
<% } else { %>
|
||||
<div class="<%= genClass %> negative left"><%= shard.leader %></div>
|
||||
|
@ -40,6 +40,8 @@
|
|||
<% } %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<% counter++; %>
|
||||
<% }); %>
|
||||
|
||||
<% }); %>
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
//start polling with interval
|
||||
this.intervalFunction = window.setInterval(function() {
|
||||
if (window.location.hash === '#nodes') {
|
||||
self.render();
|
||||
self.render(false);
|
||||
}
|
||||
}, this.interval);
|
||||
}
|
||||
|
@ -45,7 +45,7 @@
|
|||
window.App.navigate("#node/" + encodeURIComponent(name), {trigger: true});
|
||||
},
|
||||
|
||||
render: function () {
|
||||
render: function (navi) {
|
||||
|
||||
var self = this;
|
||||
|
||||
|
@ -75,6 +75,9 @@
|
|||
}
|
||||
});
|
||||
|
||||
if (navi !== false) {
|
||||
arangoHelper.buildNodesSubNav('Overview');
|
||||
}
|
||||
},
|
||||
|
||||
continueRender: function(nodes, scaling) {
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
}
|
||||
},
|
||||
|
||||
render: function () {
|
||||
render: function (navi) {
|
||||
|
||||
var self = this;
|
||||
|
||||
|
@ -48,6 +48,10 @@
|
|||
arangoHelper.arangoError("Cluster", "Could not fetch sharding information.");
|
||||
}
|
||||
});
|
||||
|
||||
if (navi !== false) {
|
||||
arangoHelper.buildNodesSubNav('Shards');
|
||||
}
|
||||
},
|
||||
|
||||
continueRender: function(collections) {
|
||||
|
|
|
@ -74,7 +74,11 @@ module.exports = class SyntheticResponse {
|
|||
if (typeof data === 'string' || data instanceof Buffer) {
|
||||
this._raw.body = data;
|
||||
} else if (typeof data === 'object') {
|
||||
this._raw.body = JSON.stringify(data);
|
||||
if (this.context.isDevelopment) {
|
||||
this._raw.body = JSON.stringify(data, null, 2);
|
||||
} else {
|
||||
this._raw.body = JSON.stringify(data);
|
||||
}
|
||||
} else {
|
||||
this._raw.body = String(data);
|
||||
}
|
||||
|
@ -118,7 +122,11 @@ module.exports = class SyntheticResponse {
|
|||
}
|
||||
if (!dataIsBuffer) {
|
||||
if (typeof data === 'object') {
|
||||
data = JSON.stringify(data);
|
||||
if (this.context.isDevelopment) {
|
||||
data = JSON.stringify(data, null, 2);
|
||||
} else {
|
||||
data = JSON.stringify(data);
|
||||
}
|
||||
} else {
|
||||
data = String(data);
|
||||
}
|
||||
|
|
|
@ -37,15 +37,11 @@ using namespace arangodb::basics;
|
|||
namespace arangodb {
|
||||
namespace httpclient {
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief empty map, used for headers
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
std::unordered_map<std::string, std::string> const SimpleHttpClient::NO_HEADERS {};
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// constructors and destructors
|
||||
// -----------------------------------------------------------------------------
|
||||
/// @brief default value for max packet size
|
||||
size_t SimpleHttpClient::MaxPacketSize = 128 * 1024 * 1024;
|
||||
|
||||
SimpleHttpClient::SimpleHttpClient(GeneralClientConnection* connection,
|
||||
double requestTimeout, bool warn)
|
||||
|
@ -60,7 +56,7 @@ SimpleHttpClient::SimpleHttpClient(GeneralClientConnection* connection,
|
|||
_locationRewriter({nullptr, nullptr}),
|
||||
_nextChunkedSize(0),
|
||||
_result(nullptr),
|
||||
_maxPacketSize(128 * 1024 * 1024),
|
||||
_maxPacketSize(MaxPacketSize),
|
||||
_maxRetries(3),
|
||||
_retryWaitTime(1 * 1000 * 1000),
|
||||
_retryMessage(),
|
||||
|
|
|
@ -43,8 +43,8 @@ class GeneralClientConnection;
|
|||
|
||||
class SimpleHttpClient {
|
||||
private:
|
||||
SimpleHttpClient(SimpleHttpClient const&);
|
||||
SimpleHttpClient& operator=(SimpleHttpClient const&);
|
||||
SimpleHttpClient(SimpleHttpClient const&) = delete;
|
||||
SimpleHttpClient& operator=(SimpleHttpClient const&) = delete;
|
||||
|
||||
public:
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -176,6 +176,14 @@ class SimpleHttpClient {
|
|||
_locationRewriter.data = data;
|
||||
_locationRewriter.func = func;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief set the value for max packet size
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static void setMaxPacketSize(size_t value) {
|
||||
MaxPacketSize = value;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief enable or disable keep-alive
|
||||
|
@ -408,7 +416,7 @@ class SimpleHttpClient {
|
|||
|
||||
std::vector<std::pair<std::string, std::string>> _pathToBasicAuth;
|
||||
|
||||
size_t const _maxPacketSize;
|
||||
size_t _maxPacketSize;
|
||||
|
||||
public:
|
||||
size_t _maxRetries;
|
||||
|
@ -434,6 +442,9 @@ class SimpleHttpClient {
|
|||
|
||||
// empty map, used for headers
|
||||
static std::unordered_map<std::string, std::string> const NO_HEADERS;
|
||||
|
||||
// default value for max packet size
|
||||
static size_t MaxPacketSize;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
@ -40,8 +40,8 @@ SslServerFeature::SslServerFeature(application_features::ApplicationServer* serv
|
|||
_keyfile(),
|
||||
_sessionCache(false),
|
||||
_cipherList(),
|
||||
_protocol(TLS_V1),
|
||||
_options(
|
||||
_sslProtocol(TLS_V1),
|
||||
_sslOptions(
|
||||
(long)(SSL_OP_TLS_ROLLBACK_BUG | SSL_OP_CIPHER_SERVER_PREFERENCE)),
|
||||
_ecdhCurve("prime256v1"),
|
||||
_sslContext(nullptr) {
|
||||
|
@ -75,16 +75,17 @@ void SslServerFeature::collectOptions(std::shared_ptr<ProgramOptions> options) {
|
|||
"ssl cipers to use, see OpenSSL documentation",
|
||||
new StringParameter(&_cipherList));
|
||||
|
||||
std::unordered_set<uint64_t> sslProtocols = {1, 2, 3, 4};
|
||||
std::unordered_set<uint64_t> sslProtocols = {1, 2, 3, 4, 5};
|
||||
|
||||
options->addOption("--ssl.protocol",
|
||||
"ssl protocol (1 = SSLv2, 2 = SSLv23, 3 = SSLv3, 4 = "
|
||||
"TLSv1, 5 = TLSV1.2 (recommended)",
|
||||
new UInt64Parameter(&_protocol));
|
||||
new DiscreteValuesParameter<UInt64Parameter>(
|
||||
&_sslProtocol, sslProtocols));
|
||||
|
||||
options->addHiddenOption(
|
||||
"--ssl.options", "ssl connection options, see OpenSSL documentation",
|
||||
new DiscreteValuesParameter<UInt64Parameter>(&_options, sslProtocols));
|
||||
new DiscreteValuesParameter<UInt64Parameter>(&_sslOptions, sslProtocols));
|
||||
|
||||
options->addOption(
|
||||
"--ssl.ecdh-curve",
|
||||
|
@ -95,7 +96,7 @@ void SslServerFeature::collectOptions(std::shared_ptr<ProgramOptions> options) {
|
|||
void SslServerFeature::prepare() {
|
||||
createSslContext();
|
||||
|
||||
LOG(INFO) << "using SSL options: " << stringifySslOptions(_options);
|
||||
LOG(INFO) << "using SSL options: " << stringifySslOptions(_sslOptions);
|
||||
|
||||
if (!_cipherList.empty()) {
|
||||
LOG(INFO) << "using SSL cipher-list '" << _cipherList << "'";
|
||||
|
@ -128,14 +129,14 @@ void SslServerFeature::createSslContext() {
|
|||
}
|
||||
|
||||
// validate protocol
|
||||
if (_protocol <= SSL_UNKNOWN || _protocol >= SSL_LAST) {
|
||||
if (_sslProtocol <= SSL_UNKNOWN || _sslProtocol >= SSL_LAST) {
|
||||
LOG(FATAL) << "invalid SSL protocol version specified. Please use a valid "
|
||||
"value for '--ssl.protocol.'";
|
||||
FATAL_ERROR_EXIT();
|
||||
}
|
||||
|
||||
LOG(DEBUG) << "using SSL protocol version '"
|
||||
<< protocolName((protocol_e)_protocol) << "'";
|
||||
<< protocolName((protocol_e)_sslProtocol) << "'";
|
||||
|
||||
if (!FileUtils::exists(_keyfile)) {
|
||||
LOG(FATAL) << "unable to find SSL keyfile '" << _keyfile << "'";
|
||||
|
@ -143,7 +144,7 @@ void SslServerFeature::createSslContext() {
|
|||
}
|
||||
|
||||
// create context
|
||||
_sslContext = ::sslContext(protocol_e(_protocol), _keyfile);
|
||||
_sslContext = ::sslContext(protocol_e(_sslProtocol), _keyfile);
|
||||
|
||||
if (_sslContext == nullptr) {
|
||||
LOG(FATAL) << "failed to create SSL context, cannot create HTTPS server";
|
||||
|
@ -159,7 +160,7 @@ void SslServerFeature::createSslContext() {
|
|||
}
|
||||
|
||||
// set options
|
||||
SSL_CTX_set_options(_sslContext, (long)_options);
|
||||
SSL_CTX_set_options(_sslContext, (long)_sslOptions);
|
||||
|
||||
if (!_cipherList.empty()) {
|
||||
if (SSL_CTX_set_cipher_list(_sslContext, _cipherList.c_str()) != 1) {
|
||||
|
|
|
@ -45,8 +45,8 @@ class SslServerFeature final : public application_features::ApplicationFeature {
|
|||
std::string _keyfile;
|
||||
bool _sessionCache;
|
||||
std::string _cipherList;
|
||||
uint64_t _protocol;
|
||||
uint64_t _options;
|
||||
uint64_t _sslProtocol;
|
||||
uint64_t _sslOptions;
|
||||
std::string _ecdhCurve;
|
||||
|
||||
private:
|
||||
|
|
|
@ -272,6 +272,15 @@ def LIT(txt, wordboundary = ['<b>','</b>']):
|
|||
|
||||
return r.sub(subpattern, txt)
|
||||
|
||||
################################################################################
|
||||
### @brief LIT
|
||||
###
|
||||
### \ -> needs to become \\ so \n's in the text can be differciated.
|
||||
################################################################################
|
||||
|
||||
def BACKSLASH(txt):
|
||||
return txt.replace('\\', '\\\\\\')
|
||||
|
||||
################################################################################
|
||||
### @brief Typegraphy
|
||||
################################################################################
|
||||
|
@ -292,7 +301,7 @@ def Typography(txt):
|
|||
r = rc(r"""@ref [a-zA-Z0-9]+""", MS)
|
||||
txt = r.sub("the manual", txt)
|
||||
txt = re.sub(r"@endDocuBlock", "", txt)
|
||||
|
||||
txt = BACKSLASH(txt);
|
||||
return txt
|
||||
|
||||
################################################################################
|
||||
|
|
Loading…
Reference in New Issue