github.com/cs3org/reva/v2@v2.27.7/pkg/ocm/invite/token/token.go (about)

     1  // Copyright 2018-2021 CERN
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //     http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  //
    15  // In applying this license, CERN does not waive the privileges and immunities
    16  // granted to it by virtue of its status as an Intergovernmental Organization
    17  // or submit itself to any jurisdiction.
    18  
    19  package token
    20  
    21  import (
    22  	"time"
    23  
    24  	userpb "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1"
    25  	invitepb "github.com/cs3org/go-cs3apis/cs3/ocm/invite/v1beta1"
    26  	typesv1beta1 "github.com/cs3org/go-cs3apis/cs3/types/v1beta1"
    27  	"github.com/google/uuid"
    28  	"github.com/pkg/errors"
    29  )
    30  
    31  // DefaultExpirationTime is the expiration time to be used when unspecified in the config.
    32  const DefaultExpirationTime = "24h"
    33  
    34  // CreateToken creates a InviteToken object for the userID indicated by userID.
    35  func CreateToken(expiration string, userID *userpb.UserId) (*invitepb.InviteToken, error) {
    36  
    37  	// Parse time of expiration
    38  	duration, err := time.ParseDuration(expiration)
    39  	if err != nil {
    40  		return nil, errors.Wrap(err, "error parsing time of expiration")
    41  	}
    42  
    43  	tokenID := uuid.New().String()
    44  	now := time.Now()
    45  	expirationTime := now.Add(duration)
    46  
    47  	token := invitepb.InviteToken{
    48  		Token:  tokenID,
    49  		UserId: userID,
    50  		Expiration: &typesv1beta1.Timestamp{
    51  			Seconds: uint64(expirationTime.Unix()),
    52  			Nanos:   0,
    53  		},
    54  	}
    55  
    56  	return &token, nil
    57  }