anchor.diff:  
     static Future downloadFile(String idArtifact,{String token}) async {
       try {
  +      //verify token
  +      var jsonWebToken = new JsonWebTokenCodec(secret: config.currentLoadedConfig[config.MDT_TOKEN_SECRET]);
  +      Map tokenInfo = jsonWebToken.decode(token);
  +      DateTime now = new DateTime.now();
  +      DateTime validity = new DateTime.fromMillisecondsSinceEpoch(tokenInfo["validity"]);
  +      if (now.isAfter(validity)){
  +        throw new RpcError(401,"ARTIFACT_ERROR","Access expired");
  +      }
  +
  +      var tokenArtifactId = tokenInfo["id"];
  +      //artifactID same as those in token
  +      if (idArtifact != tokenArtifactId){
  +        return new RpcError(401,"ARTIFACT_ERROR","Access denied");
  +      }
  +
         var artifact = await mgrs.findArtifact(idArtifact);
         if (artifact == null){
  -        throw new NotFoundError();
  +        return new NotFoundError();
         }
  +
         Stream stream = await mgrs.streamFromArtifact(artifact, mgrs.defaultStorage);
         var body = new Body(stream);
         var headers = {"Content-Type":artifact.contentType,"Content-length":"${artifact.size}","Content-Disposition":"attachment; filename=${artifact.filename}"};
  
positive.code: 
    static String lastVersionBranchName = "@@@@LAST####";
    static String lastVersionName = "latest";
  /*
  Not used yet
    @ApiMethod(method: 'PUT', path: 'artifacts/{idArtifact}')
  
negative.code: import 'package:rpc/rpc.dart';
  import 'package:shelf/shelf.dart' as shelf;
  import 'package:shelf/src/body.dart';
  import 'package:jwt/json_web_token.dart';
  import 'dart:convert';
  import '../managers/managers.dart' as mgrs;
  import 'user_service.dart' as userService;
  