// Copyright (c) Mainflux
// SPDX-License-Identifier: Apache-2.0

syntax = "proto3";

package mainflux;

import "google/protobuf/empty.proto";

service ThingsService {
    rpc CanAccessByKey(AccessByKeyReq) returns (ThingID) {}
    rpc CanAccessByID(AccessByIDReq) returns (google.protobuf.Empty) {}
    rpc Identify(Token) returns (ThingID) {}
}

service AuthNService {
    rpc Issue(IssueReq) returns (Token) {}
    rpc Identify(Token) returns (UserID) {}
}

message AccessByKeyReq {
    string token  = 1;
    string chanID = 2;
}

message ThingID {
    string value = 1;
}

message AccessByIDReq {
    string thingID = 1;
    string chanID  = 2;
}

// If a token is not carrying any information itself, the type
// field can be used to determine how to validate the token.
// Also, different tokens can be encoded in different ways.
message Token {
    string value = 1;
}

message UserID {
    string value = 1;
}

message IssueReq {
    string issuer = 1;
    uint32 type   = 2;
}
