wsdfuaccess.cpp 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. /*##############################################################################
  2. HPCC SYSTEMS software Copyright (C) 2018 HPCC Systems®.
  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. http://www.apache.org/licenses/LICENSE-2.0
  7. Unless required by applicable law or agreed to in writing, software
  8. distributed under the License is distributed on an "AS IS" BASIS,
  9. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  10. See the License for the specific language governing permissions and
  11. limitations under the License.
  12. ############################################################################## */
  13. #include "jliball.hpp"
  14. #include "dautils.hpp"
  15. #include "seclib.hpp"
  16. #include "ws_dfu.hpp"
  17. #include "wsdfuaccess.hpp"
  18. namespace wsdfuaccess
  19. {
  20. CSecAccessType translateToCSecAccessAccessType(SecAccessFlags from)
  21. {
  22. switch (from)
  23. {
  24. case SecAccess_Access:
  25. return CSecAccessType_Access;
  26. case SecAccess_Read:
  27. return CSecAccessType_Read;
  28. case SecAccess_Write:
  29. return CSecAccessType_Write;
  30. case SecAccess_Full:
  31. return CSecAccessType_Full;
  32. case SecAccess_None:
  33. default:
  34. return CSecAccessType_None;
  35. }
  36. }
  37. bool getFileAccess(StringBuffer &metaInfo, const char *serviceUrl, const char *jobId, const char *logicalName, SecAccessFlags access, unsigned expirySecs, const char *user, const char *token)
  38. {
  39. Owned<IClientWsDfu> dfuClient = createWsDfuClient();
  40. dfuClient->addServiceUrl(serviceUrl);
  41. dfuClient->setUsernameToken(user, token, "");
  42. Owned<IClientDFUFileAccessRequest> dfuReq = dfuClient->createDFUFileAccessRequest();
  43. IEspDFUFileAccessRequestBase &requestBase = dfuReq->updateRequestBase();
  44. CDfsLogicalFileName lfn;
  45. lfn.set(logicalName);
  46. StringBuffer cluster, lfnName;
  47. lfn.getCluster(cluster);
  48. lfn.get(lfnName); // remove cluster if present
  49. requestBase.setName(lfnName);
  50. requestBase.setCluster(cluster);
  51. requestBase.setExpirySeconds(expirySecs);
  52. requestBase.setAccessRole(CFileAccessRole_Engine);
  53. requestBase.setAccessType(translateToCSecAccessAccessType(access));
  54. requestBase.setJobId(jobId);
  55. Owned<IClientDFUFileAccessResponse> dfuResp = dfuClient->DFUFileAccess(dfuReq);
  56. const IMultiException *excep = &dfuResp->getExceptions(); // NB: warning despite getXX name, this does not Link
  57. if (excep->ordinality() > 0)
  58. throw LINK((IMultiException *)excep); // JCSMORE - const IException.. not caught in general..
  59. metaInfo.append(dfuResp->getAccessInfo().getMetaInfoBlob());
  60. return true;
  61. }
  62. } // namespace wsdfuaccess