Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Produce OpenAPI document describing CCF's endpoints #1612

Merged
merged 64 commits into from
Sep 25, 2020
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
6f7df55
Add to_upper and to_lower to nonstd.h
eddyashton Jun 24, 2020
af0ef44
Use nonstd::to_lower
eddyashton Jun 24, 2020
78e5e78
WIP: Add types for OpenAPI doc
eddyashton Jun 24, 2020
94d3779
Merge branch 'master' of github.com:microsoft/CCF into openapi_genera…
eddyashton Jun 25, 2020
2f1a965
WIP: "api" returns openapi, not method list
eddyashton Jun 25, 2020
1510aaf
Prefer openapi to openapi_schema
eddyashton Jun 25, 2020
fb3466a
WIP: Maybe a deadend...
eddyashton Jun 25, 2020
ed846b7
WIP: 3 cheers for operator[]
eddyashton Jun 25, 2020
32b9d46
Is this what a helpful modifier looks like?
eddyashton Jun 25, 2020
325a59c
WIP: Helper method for adding response schema
eddyashton Jun 25, 2020
8ad27d2
Add schema_name to generate sensible components fieldname
eddyashton Jun 26, 2020
bd1eb15
WIP
eddyashton Jun 26, 2020
0ef2951
WIP: add_request_body_schema
eddyashton Jun 26, 2020
964f863
WIP: Forgive me father for I have sinned
eddyashton Jun 29, 2020
b508e87
WIP: Support optional fields
eddyashton Jun 29, 2020
89340ce
Fix for optional fields
eddyashton Jun 29, 2020
da7039e
WIP: Add support for renames
eddyashton Jun 29, 2020
016c7df
WIP: Fix duplicate-required and missing-base-elements
eddyashton Jun 29, 2020
7a8ebd3
Support for vectors, fancy types
eddyashton Jun 30, 2020
1b9fc33
Remove some fixed TODOs
eddyashton Jun 30, 2020
e92bb37
Separate simple and complex test cases
eddyashton Jun 30, 2020
593005d
Steps towards pure JSON doc
eddyashton Jun 30, 2020
a01d2c5
Partial compile fixes
eddyashton Sep 9, 2020
d4b3a6e
Merge branch 'master' of github.com:microsoft/CCF into openapi_genera…
eddyashton Sep 9, 2020
b7e75ea
Get to compilation
eddyashton Sep 9, 2020
55a4f73
Update schema.py to just validate that the result is a valid OpenAPI doc
eddyashton Sep 9, 2020
9c6adcc
Remove separate schema. Oh no
eddyashton Sep 9, 2020
8f736e3
Progress: schema_test dumps OpenAPI docs to file, initial files
eddyashton Sep 10, 2020
0296f09
Produce schema that the online validator is happy with
eddyashton Sep 10, 2020
1b24113
Drop an element the spec validator isn't happy with
eddyashton Sep 10, 2020
55d9402
Use freeform JSON manipulators everywhere, fix nested add_to_components
eddyashton Sep 10, 2020
d439221
Schema.py should continue to retrieve individual schema
eddyashton Sep 11, 2020
39de645
And here's those schemas again
eddyashton Sep 11, 2020
7314eb2
Strip out some uninteresting TODOs
eddyashton Sep 11, 2020
afc0999
Add schema for templated endpoints too
eddyashton Sep 11, 2020
45dc53d
WIO
eddyashton Sep 11, 2020
f74258d
Compile fixes
eddyashton Sep 14, 2020
669c1f6
Safe capture
eddyashton Sep 15, 2020
a4dcb9d
Prefix OpenAPI paths
eddyashton Sep 15, 2020
2ee7336
Get things in-sync
eddyashton Sep 15, 2020
6cdeab9
Progress
eddyashton Sep 15, 2020
ddf38bd
Split out params on all endpoints
eddyashton Sep 15, 2020
0970c09
Merge branch 'master' of github.com:microsoft/CCF into openapi_genera…
eddyashton Sep 15, 2020
ff405dd
Merge branch 'master' of github.com:microsoft/CCF into openapi_genera…
eddyashton Sep 15, 2020
57c214a
Format
eddyashton Sep 15, 2020
0701c77
Merge branch 'master' of github.com:microsoft/CCF into openapi_genera…
eddyashton Sep 16, 2020
c28ace5
Delete
eddyashton Sep 16, 2020
7596241
Oops - these lines restore result schema
eddyashton Sep 16, 2020
8d5a1b8
Add restored result schema
eddyashton Sep 16, 2020
78905b5
Document (minimum) JS endpoints
eddyashton Sep 17, 2020
08fe5a6
Hey we can do that in lua too
eddyashton Sep 17, 2020
890c9d7
Shout about TODOs again
eddyashton Sep 17, 2020
89d4d73
Merge branch 'master' of github.com:microsoft/CCF into openapi_genera…
eddyashton Sep 17, 2020
86889e8
Merge branch 'master' of github.com:microsoft/CCF into openapi_genera…
eddyashton Sep 21, 2020
c31c300
Fixups
eddyashton Sep 21, 2020
90c0c08
Merge branch 'master' of github.com:microsoft/CCF into openapi_genera…
eddyashton Sep 22, 2020
2132beb
Merge branch 'openapi_generation2' of github.com:eddyashton/CCF into …
eddyashton Sep 22, 2020
7e63db4
Make OpenAPI info customisable
eddyashton Sep 23, 2020
7c9b986
Update supports_method
eddyashton Sep 23, 2020
9241b61
Format
eddyashton Sep 23, 2020
c3353fa
Merge branch 'master' of github.com:microsoft/CCF into openapi_genera…
eddyashton Sep 24, 2020
56cf98b
Use is_arithmetic
eddyashton Sep 24, 2020
54c2c6c
Don't print in test
eddyashton Sep 24, 2020
4142618
Merge branch 'master' into openapi_generation2
eddyashton Sep 24, 2020
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Partial compile fixes
  • Loading branch information
eddyashton committed Sep 9, 2020
commit a01d2c5c07a8efdc16ed5d8a8b0401bba51f18a4
9 changes: 5 additions & 4 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -257,7 +257,7 @@ if(BUILD_TESTS)
)
use_client_mbedtls(kv_test)
target_link_libraries(
kv_test PRIVATE ${CMAKE_THREAD_LIBS_INIT} secp256k1.host
kv_test PRIVATE ${CMAKE_THREAD_LIBS_INIT} secp256k1.host http_parser.host
eddyashton marked this conversation as resolved.
Show resolved Hide resolved
)

add_unit_test(
Expand Down Expand Up @@ -301,9 +301,10 @@ if(BUILD_TESTS)
)
target_include_directories(history_test PRIVATE ${EVERCRYPT_INC})
target_link_libraries(
history_test PRIVATE ${CRYPTO_LIBRARY} evercrypt.host secp256k1.host
history_test PRIVATE ${CRYPTO_LIBRARY} evercrypt.host secp256k1.host http_parser.host
)


add_unit_test(
secret_sharing_test
${CMAKE_CURRENT_SOURCE_DIR}/src/node/test/secret_share.cpp
Expand All @@ -321,7 +322,7 @@ if(BUILD_TESTS)
historical_queries_test
${CMAKE_CURRENT_SOURCE_DIR}/src/node/test/historical_queries.cpp
)
target_link_libraries(historical_queries_test PRIVATE secp256k1.host)
target_link_libraries(historical_queries_test PRIVATE secp256k1.host http_parser.host)

add_unit_test(
msgpack_serialization_test
Expand Down Expand Up @@ -408,7 +409,7 @@ if(BUILD_TESTS)
${CMAKE_CURRENT_SOURCE_DIR}/src/lua_interp/test/lua_kv.cpp
)
target_include_directories(lua_test PRIVATE ${LUA_DIR})
target_link_libraries(lua_test PRIVATE lua.host)
target_link_libraries(lua_test PRIVATE lua.host http_parser.host)

add_unit_test(
merkle_test ${CMAKE_CURRENT_SOURCE_DIR}/src/node/test/merkle_test.cpp
Expand Down
42 changes: 42 additions & 0 deletions python/setup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# Copyright (c) Microsoft Corporation. All rights reserved.
achamayou marked this conversation as resolved.
Show resolved Hide resolved
# Licensed under the Apache 2.0 License.

from setuptools import setup # type: ignore
from os import path

PACKAGE_NAME = "ccf"
UTILITIES_PATH = "utils"

path_here = path.abspath(path.dirname(__file__))

with open(path.join(path_here, "README.md"), encoding="utf-8") as f:
long_description = f.read()

with open('requirements.txt') as f:
requirements = f.read().splitlines()

setup(
name=PACKAGE_NAME,
version="0.13.2",
description="Set of tools and utilities for the Confidential Consortium Framework (CCF)",
long_description=long_description,
long_description_content_type="text/markdown",
url="https://github.com/microsoft/CCF/tree/master/python",
license="Apache License 2.0",
author="CCF Team",
classifiers=[
"Development Status :: 3 - Alpha",
"Intended Audience :: Developers",
"Programming Language :: Python :: 3",
],
packages=[PACKAGE_NAME],
python_requires=">=3.7",
install_requires=requirements,
scripts=[
path.join(PACKAGE_NAME, "proposal_generator.py"),
path.join(UTILITIES_PATH, "keygenerator.sh"),
path.join(UTILITIES_PATH, "scurl.sh"),
path.join(UTILITIES_PATH, "submit_recovery_share.sh"),
],
include_package_data=True,
)
18 changes: 9 additions & 9 deletions src/ds/openapi.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,20 +21,20 @@ namespace ds
{
namespace access
{
nlohmann::json& get_object(nlohmann::json& j, const std::string& k)
static nlohmann::json& get_object(nlohmann::json& j, const std::string& k)
{
const auto ib = j.emplace(k, nlohmann::json::object());
return ib.first.value();
}

nlohmann::json& get_array(nlohmann::json& j, const std::string& k)
static nlohmann::json& get_array(nlohmann::json& j, const std::string& k)
{
const auto ib = j.emplace(k, nlohmann::json::array());
return ib.first.value();
}
}

nlohmann::json create_document(
static nlohmann::json create_document(
const std::string& title,
const std::string& description,
const std::string& document_version)
Expand All @@ -49,29 +49,29 @@ namespace ds
{"paths", nlohmann::json::object()}};
}

nlohmann::json& server(nlohmann::json& document, const std::string& url)
static nlohmann::json& server(nlohmann::json& document, const std::string& url)
{
auto& servers = access::get_object(document, "servers");
servers.push_back({{"url", url}});
return servers.back();
}

nlohmann::json& path(nlohmann::json& document, const std::string& path)
static nlohmann::json& path(nlohmann::json& document, const std::string& path)
{
// TODO: Check that path starts with /?
auto& paths = access::get_object(document, "paths");
return access::get_object(paths, path);
}

nlohmann::json& path_operation(nlohmann::json& path, http_method verb)
static nlohmann::json& path_operation(nlohmann::json& path, http_method verb)
{
// HTTP_GET becomes the string "get"
std::string s = http_method_str(verb);
nonstd::to_lower(s);
return access::get_object(path, s);
}

nlohmann::json& response(
static nlohmann::json& response(
nlohmann::json& path_operation,
http_status status,
const std::string& description = "Default response description")
Expand All @@ -85,7 +85,7 @@ namespace ds
return response;
}

nlohmann::json& request_body(
static nlohmann::json& request_body(
nlohmann::json& path_operation
)
{
Expand All @@ -94,7 +94,7 @@ namespace ds
return request_body;
}

nlohmann::json& media_type(
static nlohmann::json& media_type(
nlohmann::json& j,
const std::string& mt
)
Expand Down