mirror of https://github.com/grpc/grpc.git
parent
13b5f0b625
commit
369bd24b7c
14 changed files with 352 additions and 2 deletions
@ -0,0 +1,42 @@ |
||||
// Copyright 2020 gRPC authors.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#ifndef GRPC_CORE_LIB_SECURITY_AUTHORIZATION_MOCK_CEL_CEL_EXPR_BUILDER_FACTORY_H |
||||
#define GRPC_CORE_LIB_SECURITY_AUTHORIZATION_MOCK_CEL_CEL_EXPR_BUILDER_FACTORY_H |
||||
|
||||
#include <grpc/support/port_platform.h> |
||||
|
||||
#include <memory> |
||||
|
||||
#include "src/core/lib/security/authorization/mock_cel/flat_expr_builder.h" |
||||
|
||||
namespace grpc_core { |
||||
namespace mock_cel { |
||||
|
||||
// This is a temporary stub implementation of CEL APIs.
|
||||
// Once gRPC imports the CEL library, this file will be removed.
|
||||
|
||||
struct InterpreterOptions { |
||||
bool short_circuiting = true; |
||||
}; |
||||
|
||||
std::unique_ptr<CelExpressionBuilder> CreateCelExpressionBuilder( |
||||
const InterpreterOptions& options) { |
||||
return absl::make_unique<FlatExprBuilder>(); |
||||
} |
||||
|
||||
} // namespace mock_cel
|
||||
} // namespace grpc_core
|
||||
|
||||
#endif // GRPC_CORE_LIB_SECURITY_AUTHORIZATION_MOCK_CEL_CEL_EXPR_BUILDER_FACTORY_H
|
@ -0,0 +1,68 @@ |
||||
// Copyright 2020 gRPC authors.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#ifndef GRPC_CORE_LIB_SECURITY_AUTHORIZATION_MOCK_CEL_CEL_EXPRESSION_H |
||||
#define GRPC_CORE_LIB_SECURITY_AUTHORIZATION_MOCK_CEL_CEL_EXPRESSION_H |
||||
|
||||
#include <grpc/support/port_platform.h> |
||||
|
||||
#include <memory> |
||||
#include <vector> |
||||
|
||||
#include "google/api/expr/v1alpha1/syntax.upb.h" |
||||
#include "src/core/lib/security/authorization/mock_cel/activation.h" |
||||
#include "src/core/lib/security/authorization/mock_cel/cel_value.h" |
||||
#include "src/core/lib/security/authorization/mock_cel/statusor.h" |
||||
|
||||
namespace grpc_core { |
||||
namespace mock_cel { |
||||
|
||||
// This is a temporary stub implementation of CEL APIs.
|
||||
// Once gRPC imports the CEL library, this file will be removed.
|
||||
|
||||
// Base interface for expression evaluating objects.
|
||||
class CelExpression { |
||||
public: |
||||
virtual ~CelExpression() = default; |
||||
|
||||
// Evaluates expression and returns value.
|
||||
// activation contains bindings from parameter names to values
|
||||
virtual StatusOr<CelValue> Evaluate( |
||||
const BaseActivation& activation) const = 0; |
||||
}; |
||||
|
||||
// Base class for Expression Builder implementations
|
||||
// Provides user with factory to register extension functions.
|
||||
// ExpressionBuilder MUST NOT be destroyed before CelExpression objects
|
||||
// it built.
|
||||
class CelExpressionBuilder { |
||||
public: |
||||
virtual ~CelExpressionBuilder() = default; |
||||
|
||||
// Creates CelExpression object from AST tree.
|
||||
// expr specifies root of AST tree
|
||||
virtual StatusOr<std::unique_ptr<CelExpression>> CreateExpression( |
||||
const google_api_expr_v1alpha1_Expr* expr, |
||||
const google_api_expr_v1alpha1_SourceInfo* source_info) const = 0; |
||||
|
||||
virtual StatusOr<std::unique_ptr<CelExpression>> CreateExpression( |
||||
const google_api_expr_v1alpha1_Expr* expr, |
||||
const google_api_expr_v1alpha1_SourceInfo* source_info, |
||||
std::vector<absl::Status>* warnings) const = 0; |
||||
}; |
||||
|
||||
} // namespace mock_cel
|
||||
} // namespace grpc_core
|
||||
|
||||
#endif // GRPC_CORE_LIB_SECURITY_AUTHORIZATION_MOCK_CEL_CEL_EXPRESSION_H
|
@ -0,0 +1,67 @@ |
||||
// Copyright 2020 gRPC authors.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#ifndef GRPC_CORE_LIB_SECURITY_AUTHORIZATION_MOCK_CEL_EVALUATOR_CORE_H |
||||
#define GRPC_CORE_LIB_SECURITY_AUTHORIZATION_MOCK_CEL_EVALUATOR_CORE_H |
||||
|
||||
#include <grpc/support/port_platform.h> |
||||
|
||||
#include <memory> |
||||
#include <set> |
||||
#include <vector> |
||||
|
||||
#include "google/api/expr/v1alpha1/syntax.upb.h" |
||||
#include "src/core/lib/security/authorization/mock_cel/activation.h" |
||||
#include "src/core/lib/security/authorization/mock_cel/cel_expression.h" |
||||
#include "src/core/lib/security/authorization/mock_cel/cel_value.h" |
||||
#include "src/core/lib/security/authorization/mock_cel/statusor.h" |
||||
|
||||
namespace grpc_core { |
||||
namespace mock_cel { |
||||
|
||||
// This is a temporary stub implementation of CEL APIs.
|
||||
// Once gRPC imports the CEL library, this file will be removed.
|
||||
|
||||
class ExpressionStep { |
||||
public: |
||||
virtual ~ExpressionStep() = default; |
||||
}; |
||||
|
||||
using ExecutionPath = std::vector<std::unique_ptr<const ExpressionStep>>; |
||||
|
||||
// Implementation of the CelExpression that utilizes flattening
|
||||
// of the expression tree.
|
||||
class CelExpressionFlatImpl : public CelExpression { |
||||
// Constructs CelExpressionFlatImpl instance.
|
||||
// path is flat execution path that is based upon
|
||||
// flattened AST tree. Max iterations dictates the maximum number of
|
||||
// iterations in the comprehension expressions (use 0 to disable the upper
|
||||
// bound).
|
||||
public: |
||||
CelExpressionFlatImpl(const google_api_expr_v1alpha1_Expr* root_expr, |
||||
ExecutionPath path, int max_iterations, |
||||
std::set<std::string> iter_variable_names, |
||||
bool enable_unknowns = false, |
||||
bool enable_unknown_function_results = false) {} |
||||
|
||||
// Implementation of CelExpression evaluate method.
|
||||
StatusOr<CelValue> Evaluate(const BaseActivation& activation) const override { |
||||
return CelValue::CreateNull(); |
||||
} |
||||
}; |
||||
|
||||
} // namespace mock_cel
|
||||
} // namespace grpc_core
|
||||
|
||||
#endif // GRPC_CORE_LIB_SECURITY_AUTHORIZATION_MOCK_CEL_EVALUATOR_CORE_H
|
@ -0,0 +1,56 @@ |
||||
// Copyright 2020 gRPC authors.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#ifndef GRPC_CORE_LIB_SECURITY_AUTHORIZATION_MOCK_CEL_FLAT_EXPR_BUILDER_H |
||||
#define GRPC_CORE_LIB_SECURITY_AUTHORIZATION_MOCK_CEL_FLAT_EXPR_BUILDER_H |
||||
|
||||
#include <grpc/support/port_platform.h> |
||||
|
||||
#include <memory> |
||||
|
||||
#include "src/core/lib/security/authorization/mock_cel/evaluator_core.h" |
||||
|
||||
namespace grpc_core { |
||||
namespace mock_cel { |
||||
|
||||
// This is a temporary stub implementation of CEL APIs.
|
||||
// Once gRPC imports the CEL library, this file will be removed.
|
||||
|
||||
// CelExpressionBuilder implementation.
|
||||
// Builds instances of CelExpressionFlatImpl.
|
||||
class FlatExprBuilder : public CelExpressionBuilder { |
||||
public: |
||||
FlatExprBuilder() = default; |
||||
|
||||
cel_base::StatusOr<std::unique_ptr<CelExpression>> CreateExpression( |
||||
const google::api::expr::v1alpha1::Expr* expr, |
||||
const google::api::expr::v1alpha1::SourceInfo* source_info) |
||||
const override { |
||||
ExecutionPath path; |
||||
return absl::make_unique<CelExpressionFlatImpl>(nullptr, path, 0); |
||||
} |
||||
|
||||
cel_base::StatusOr<std::unique_ptr<CelExpression>> CreateExpression( |
||||
const google::api::expr::v1alpha1::Expr* expr, |
||||
const google::api::expr::v1alpha1::SourceInfo* source_info, |
||||
std::vector<absl::Status>* warnings) const override { |
||||
ExecutionPath path; |
||||
return absl::make_unique<CelExpressionFlatImpl>(nullptr, path, 0); |
||||
} |
||||
}; |
||||
|
||||
} // namespace mock_cel
|
||||
} // namespace grpc_core
|
||||
|
||||
#endif // GRPC_CORE_LIB_SECURITY_AUTHORIZATION_MOCK_CEL_FLAT_EXPR_BUILDER_H
|
@ -0,0 +1,50 @@ |
||||
// Copyright 2020 gRPC authors.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#ifndef GRPC_CORE_LIB_SECURITY_AUTHORIZATION_MOCK_CEL_STATUSOR_H |
||||
#define GRPC_CORE_LIB_SECURITY_AUTHORIZATION_MOCK_CEL_STATUSOR_H |
||||
|
||||
#include <grpc/support/port_platform.h> |
||||
|
||||
#include <memory> |
||||
|
||||
#include "absl/status/status.h" |
||||
|
||||
namespace grpc_core { |
||||
namespace mock_cel { |
||||
|
||||
// This is a temporary stub implementation of CEL APIs.
|
||||
// Once gRPC imports the CEL library, this file will be removed.
|
||||
|
||||
template <typename T> |
||||
class ABSL_MUST_USE_RESULT StatusOr; |
||||
|
||||
template <typename T> |
||||
class StatusOr { |
||||
public: |
||||
StatusOr() = default; |
||||
|
||||
StatusOr(const T& value) {} |
||||
|
||||
StatusOr(const absl::Status& status) {} |
||||
|
||||
StatusOr(absl::Status&& status) {} |
||||
|
||||
bool ok() const { return true; } |
||||
}; |
||||
|
||||
} // namespace mock_cel
|
||||
} // namespace grpc_core
|
||||
|
||||
#endif // GRPC_CORE_LIB_SECURITY_AUTHORIZATION_MOCK_CEL_STATUSOR_H
|
Loading…
Reference in new issue