Example #1
0
def main():
    service = MagmaService('policydb', mconfigs_pb2.PolicyDB())

    apn_rules_dict = ApnRuleAssignmentsDict()
    assignments_dict = RuleAssignmentsDict()
    basenames_dict = BaseNameDict()
    rating_groups_dict = RatingGroupsDict()
    sessiond_chan = ServiceRegistry.get_rpc_channel('sessiond',
                                                    ServiceRegistry.LOCAL)
    session_mgr_stub = LocalSessionManagerStub(sessiond_chan)
    sessiond_stub = SessionProxyResponderStub(sessiond_chan)
    reauth_handler = ReAuthHandler(assignments_dict, sessiond_stub)

    # Add all servicers to the server
    session_servicer = SessionRpcServicer(service.mconfig,
                                          rating_groups_dict,
                                          basenames_dict,
                                          apn_rules_dict)
    session_servicer.add_to_server(service.rpc_server)

    orc8r_chan = ServiceRegistry.get_rpc_channel('policydb',
                                                 ServiceRegistry.CLOUD)
    policy_stub = PolicyAssignmentControllerStub(orc8r_chan)
    policy_servicer = PolicyRpcServicer(reauth_handler, basenames_dict,
                                        policy_stub)
    policy_servicer.add_to_server(service.rpc_server)

    # Start a background thread to stream updates from the cloud
    if service.config['enable_streaming']:
        stream = StreamerClient(
            {
                'policydb': PolicyDBStreamerCallback(),
                'apn_rule_mappings': ApnRuleMappingsStreamerCallback(
                    session_mgr_stub,
                    basenames_dict,
                    apn_rules_dict,
                ),
                'rule_mappings': RuleMappingsStreamerCallback(
                    reauth_handler,
                    basenames_dict,
                    assignments_dict,
                    apn_rules_dict,
                ),
                'rating_groups': RatingGroupsStreamerCallback(
                    rating_groups_dict),

            },
            service.loop,
        )
        stream.start()
    else:
        logging.info('enable_streaming set to False. Streamer disabled!')

    # Run the service loop
    service.run()

    # Cleanup the service
    service.close()
Example #2
0
def dump_data(_client: PolicyDBStub, args):
    """
    Dump data from Redis tables:
    - policydb:installed
    - policydb:apn_installed
    - policydb:basenames
    - policydb:rating_groups
    - policydb:rules
    and formats them to be more human readable.

    Args:
        _client: gRPC stub to interact with policydb
        args: Args CLI was called with
    Returns:
        None
    """
    apn_rules_dict = ApnRuleAssignmentsDict(clear_data=False)
    assignments_dict = RuleAssignmentsDict(clear_data=False)
    basenames_dict = BaseNameDict()
    rating_groups_dict = RatingGroupsDict()
    policy_dict = PolicyRuleDict()

    print('*' * 80)
    print("*" + "policydb:installed".center(78) + "*")
    print('*' * 80)
    for k, v in assignments_dict.items():
        formatted_val = textwrap.indent(text_format.MessageToString(v),
                                        " " * 4)
        print(f"{k}:\n{formatted_val}")
    print('\n')

    print('*' * 80)
    print("*" + "policydb:apn_installed".center(78) + "*")
    print('*' * 80)
    for k, v in apn_rules_dict.items():
        formatted_val = textwrap.indent(text_format.MessageToString(v),
                                        " " * 4)
        print(f"{k}:\n{formatted_val}")
    print('\n')

    print('*' * 80)
    print("*" + "policydb:basenames".center(78) + "*")
    print('*' * 80)
    for k, v in basenames_dict.items():
        formatted_val = textwrap.indent(text_format.MessageToString(v),
                                        " " * 4)
        print(f"{k}:\n{formatted_val}")
    print('\n')

    print('*' * 80)
    print("*" + "policydb:rating_groups".center(78) + "*")
    print('*' * 80)
    for k, v in rating_groups_dict.items():
        formatted_val = textwrap.indent(text_format.MessageToString(v),
                                        " " * 4)
        print(f"{k}:\n{formatted_val}")
    print('\n')

    print('*' * 80)
    print("*" + "policydb:rules".center(78) + "*")
    print('*' * 80)
    for k, v in policy_dict.items():
        formatted_val = textwrap.indent(text_format.MessageToString(v),
                                        " " * 4)
        print(f"{k}:\n{formatted_val}")
    print('\n')