Как вы загружаете файлы / папки в Pydio Cells с помощью API Pydio Cells - PullRequest
0 голосов
/ 15 февраля 2019

Пока что вызовы API, которые помогают мне достичь конечной цели загрузки и просмотра файлов и папок через API, выглядят следующим образом:

POST https://demo.pydio.com/a/tree/admin/list

POST https://demo.pydio.com/a/workspace

GET https://demo.pydio.com/a/config/datasource

GET https://demo.pydio.com/a/config/virtualnodes/

Документация API Pydio Cells

https://pydio.com/en/docs/developer-guide/cells-api

Ответы [ 2 ]

0 голосов
/ 23 апреля 2019

Ячейки предоставляют S3 API для взаимодействия с данными.Операция загрузки / выгрузки с помощью curl разделена на этапы: 1. Получить jwt 2. Загрузить / загрузить

You can use following bash file:
./cells-download.sh CELL_IP:PORT USER PASSWORD CLIENT_SECRET FILENAME WORKSPACE_SLUG/PATH NEW_NAME_AFTTER_DOWNLOAD

./cells-upload.sh CELL_IP:PORT USER PASSWORD CLIENT_SECRET  ABS_PATH_FILE NEW_NAME WORKSPACE_SLUG/PATH

CLIENT_SECRET is found in /home/pydio/.config/pydio/cells/pydio.json >> dex >> staticClients >> Secret:

cells-download.sh
=============================

#!/bin/bash

HOST=$1 
CELLS_FRONT="cells-front"
CELLS_FRONT_PWD=$4
ADMIN_NAME=$2
ADMIN_PWD=$3
FILE=$5
DEST=$6
NEW_NAME=$7


AUTH_STRING=$(echo cells-front:$CELLS_FRONT_PWD | base64)
AUTH_STRING=${AUTH_STRING::-4}

JWT=$(curl -s --request POST \
  --url http://$HOST/auth/dex/token \
  --header "Authorization: Basic $AUTH_STRING" \
  --header 'Cache-Control: no-cache' \
  --header 'Content-Type: application/x-www-form-urlencoded' \
  --data "grant_type=password&username=$ADMIN_NAME&password=$ADMIN_PWD&scope=email%20profile%20pydio%20offline&nonce=123abcsfsdfdd" | jq '.id_token')

JWT=$(echo $JWT | sed "s/\"//g")


#!/bin/bash -e
#
# Copyright 2014 Tony Burns
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#


# Upload a file to AWS S3.

file="${5}"
bucket="io"
prefix="io/$DEST"
region="us-east-1"
timestamp=$(date -u "+%Y-%m-%d %H:%M:%S")
content_type="application/octet-stream"
#signed_headers="date;host;x-amz-acl;x-amz-content-sha256;x-amz-date"
signed_headers="host;x-amz-content-sha256;x-amz-date"




if [[ $(uname) == "Darwin" ]]; then
  iso_timestamp=$(date -ujf "%Y-%m-%d %H:%M:%S" "${timestamp}" "+%Y%m%dT%H%M%SZ")
  date_scope=$(date -ujf "%Y-%m-%d %H:%M:%S" "${timestamp}" "+%Y%m%d")
  date_header=$(date -ujf "%Y-%m-%d %H:%M:%S" "${timestamp}" "+%a, %d %h %Y %T %Z")
else
  iso_timestamp=$(date -ud "${timestamp}" "+%Y%m%dT%H%M%SZ")
  date_scope=$(date -ud "${timestamp}" "+%Y%m%d")
  date_header=$(date -ud "${timestamp}" "+%a, %d %h %Y %T %Z")
fi

payload_hash() {
# empty string
  echo "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
}

canonical_request() {
  echo "GET"
  echo "/${prefix}/${file}"
  echo ""
  echo "host:$HOST"
  echo "x-amz-content-sha256:$(payload_hash)"
  echo "x-amz-date:${iso_timestamp}"
  echo ""
  echo "${signed_headers}"
  printf "$(payload_hash)"
}

canonical_request_hash() {
  local output=$(canonical_request | shasum -a 256)
  echo "${output%% *}"
}

string_to_sign() {
  echo "AWS4-HMAC-SHA256"
  echo "${iso_timestamp}"
  echo "${date_scope}/${region}/s3/aws4_request"
  printf "$(canonical_request_hash)"
}

AWS_SECRET_ACCESS_KEY="gatewaysecret"

signature_key() {
  local secret=$(printf "AWS4${AWS_SECRET_ACCESS_KEY}" | hex_key)
  local date_key=$(printf ${date_scope} | hmac_sha256 "${secret}" | hex_key)
  local region_key=$(printf ${region} | hmac_sha256 "${date_key}" | hex_key)
  local service_key=$(printf "s3" | hmac_sha256 "${region_key}" | hex_key)
  printf "aws4_request" | hmac_sha256 "${service_key}" | hex_key
}

hex_key() {
  xxd -p -c 256
}

hmac_sha256() {
  local hexkey=$1
  openssl dgst -binary -sha256 -mac HMAC -macopt hexkey:${hexkey}
}

signature() {
  string_to_sign | hmac_sha256 $(signature_key) | hex_key | sed "s/^.* //"
}


curl   \
  -H "Authorization: AWS4-HMAC-SHA256 Credential=${JWT}/${date_scope}/${region}/s3/aws4_request,SignedHeaders=${signed_headers},Signature=$(signature)" \
  -H "Host: $HOST" \
  -H "Date: ${date_header}" \
  -H "x-amz-acl: public-read" \
  -H 'Content-Type: application/octet-stream' \
  -H "x-amz-content-sha256: $(payload_hash)" \
  -H "x-amz-date: ${iso_timestamp}" \
  "http://$HOST/${prefix}/${file}" --output $NEW_NAME

=============================
cells-upload.sh
=============================

#!/bin/bash

HOST=$1 
CELLS_FRONT="cells-front"
CELLS_FRONT_PWD=$4
ADMIN_NAME=$2
ADMIN_PWD=$3
FILE=$5
NEW_NAME=$6
DEST=$7



AUTH_STRING=$(echo cells-front:$CELLS_FRONT_PWD | base64)
AUTH_STRING=${AUTH_STRING::-4}

JWT=$(curl -s --request POST \
  --url http://$HOST/auth/dex/token \
  --header "Authorization: Basic $AUTH_STRING" \
  --header 'Cache-Control: no-cache' \
  --header 'Content-Type: application/x-www-form-urlencoded' \
  --data "grant_type=password&username=$ADMIN_NAME&password=$ADMIN_PWD&scope=email%20profile%20pydio%20offline&nonce=123abcsfsdfdd" | jq '.id_token')

JWT=$(echo $JWT | sed "s/\"//g")


#!/bin/bash -e
#
# Copyright 2014 Tony Burns
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#


# Upload a file to AWS S3.

file="${5}"
bucket="io"
prefix="io/$DEST"
region="us-east-1"
timestamp=$(date -u "+%Y-%m-%d %H:%M:%S")
content_type="application/octet-stream"
#signed_headers="date;host;x-amz-acl;x-amz-content-sha256;x-amz-date"
signed_headers="content-type;host;x-amz-acl;x-amz-content-sha256;x-amz-date"




if [[ $(uname) == "Darwin" ]]; then
  iso_timestamp=$(date -ujf "%Y-%m-%d %H:%M:%S" "${timestamp}" "+%Y%m%dT%H%M%SZ")
  date_scope=$(date -ujf "%Y-%m-%d %H:%M:%S" "${timestamp}" "+%Y%m%d")
  date_header=$(date -ujf "%Y-%m-%d %H:%M:%S" "${timestamp}" "+%a, %d %h %Y %T %Z")
else
  iso_timestamp=$(date -ud "${timestamp}" "+%Y%m%dT%H%M%SZ")
  date_scope=$(date -ud "${timestamp}" "+%Y%m%d")
  date_header=$(date -ud "${timestamp}" "+%a, %d %h %Y %T %Z")
fi

payload_hash() {
  local output=$(shasum -ba 256 "$file")
  echo "${output%% *}"
}

canonical_request() {
  echo "PUT"
  echo "/${prefix}/${NEW_NAME}"
  echo ""
  echo "content-type:${content_type}"
  echo "host:$HOST"
  echo "x-amz-acl:public-read"
  echo "x-amz-content-sha256:$(payload_hash)"
  echo "x-amz-date:${iso_timestamp}"
  echo ""
  echo "${signed_headers}"
  printf "$(payload_hash)"
}

canonical_request_hash() {
  local output=$(canonical_request | shasum -a 256)
  echo "${output%% *}"
}

string_to_sign() {
  echo "AWS4-HMAC-SHA256"
  echo "${iso_timestamp}"
  echo "${date_scope}/${region}/s3/aws4_request"
  printf "$(canonical_request_hash)"
}

AWS_SECRET_ACCESS_KEY="gatewaysecret"

signature_key() {
  local secret=$(printf "AWS4${AWS_SECRET_ACCESS_KEY}" | hex_key)
  local date_key=$(printf ${date_scope} | hmac_sha256 "${secret}" | hex_key)
  local region_key=$(printf ${region} | hmac_sha256 "${date_key}" | hex_key)
  local service_key=$(printf "s3" | hmac_sha256 "${region_key}" | hex_key)
  printf "aws4_request" | hmac_sha256 "${service_key}" | hex_key
}

hex_key() {
  xxd -p -c 256
}

hmac_sha256() {
  local hexkey=$1
  openssl dgst -binary -sha256 -mac HMAC -macopt hexkey:${hexkey}
}

signature() {
  string_to_sign | hmac_sha256 $(signature_key) | hex_key | sed "s/^.* //"
}


curl   \
  -T "${file}" \
  -H "Authorization: AWS4-HMAC-SHA256 Credential=${JWT}/${date_scope}/${region}/s3/aws4_request,SignedHeaders=${signed_headers},Signature=$(signature)" \
  -H "Host: $HOST" \
  -H "Date: ${date_header}" \
  -H "x-amz-acl: public-read" \
  -H 'Content-Type: application/octet-stream' \
  -H "x-amz-content-sha256: $(payload_hash)" \
  -H "x-amz-date: ${iso_timestamp}" \
  "http://$HOST/${prefix}/${NEW_NAME}"
0 голосов
/ 20 марта 2019

Оказывается, мои первоначальные мысли о корзинах Pydio Cells s3, требующих учетной записи AWS, были неверными.Pydio Cells использует тот же код или синтаксис (не уверен 100%), который используется при работе с AWS Buckets.Доступ к файловой системе можно получить с помощью сегментов s3 при работе с конечной точкой Pydio https://demo.pydio.com/io. io - это s3 Bucket.

Для проверки я использую Postman, чтобы сначала поместить файл с именем 'Query.sql' с содержимым в рабочее пространство 'Personal Files'.

Авторизация : Подпись AWS AccessKey: токен возвращен при использовании OpenID Connect.«Id_token» содержится в теле.SecretKey: в демоверсии используется ключ: 'gatewaysecret'

Дополнительные параметры : AWS Region: по умолчанию используется значение us-east-1.Мне не нужно было ничего вводить здесь, но это все еще работало, когда я установил его на «us-west-1».Service Name: 's3' - я обнаружил, что это Обязательное Session Token: я оставил это поле пустым.

Создание файлов с использованием PUT.Загружайте файлы, используя GET.

PUT https://demo.pydio.com/io/personal-files/Query.sql

В следующем примере показано, как сначала создать файл, а затем извлечь его содержимое / загрузить файл.

enter image description here

В моем примере GET я вручную помещаю файл с именем Query.sql на сервер demo.pydio.com в рабочей области «Личные файлы».В этом примере показано, как получить доступ к данным и / или загрузить файл Query.sql, который я вручную поместил в рабочую область «Личные файлы».

GET https://demo.pydio.com/io/personal-files/Query.sql

enter image description here

...