Как мне создать сайт Alfresco программно из веб-скрипта репозитория? - PullRequest
0 голосов
/ 08 ноября 2018

Я реализовал веб-скрипт репозитория Alfresco (на Java) для программного создания нового сайта.

Я заметил, что есть интерфейс SiteService, который, я думал, мог бы быть использован для этого -

SiteInfo site = siteService.createSite("site-dashboard", "mySite", 
"mySite", "", SiteVisibility.PUBLIC);

Однако это приводит к созданию нефункционального сайта, и хотя он виден на панели управления Alfresco Share, я не могу его использовать.

Затем я наткнулся на этот пример кода, который делает именно то, что я хочу. НО код содержит раздел для аутентификации, включающий отправку логина и пароля пользователя в веб-службу dologin. Не очень хочу это делать.

Но поскольку пользователь уже вошел в систему через Alfresco Share, они должны быть уже аутентифицированы.

Если я вызываю webscript create-site из моего кода, как показано в примере (без первоначального вызова dologin), я получаю код возврата 401 (неавторизованный).

Итак, мой вопрос, как мне сообщить сценарию create-site о моей аутентификации? Я читал об использовании билета аутентификации здесь . Сохраняется ли этот билет в сеансе, и если да, то как мне получить к нему доступ в моем коде Java? Если бы я мог получить билет, этого было бы достаточно, чтобы вызвать веб-скрипт create-site.

Обновление : я добавил параметр alf_ticket в соответствии с комментарием, но я все еще получаю ответ 401.

Мой текущий код:

    public NodeRef createServiceChange(String serviceChangeName) {

        HttpClient client = new HttpClient();

        String ticket = authService.getCurrentTicket();

        PostMethod createSitePost = new PostMethod("http://localhost:8081/share/service/modules/create-site");

        JSONObject siteObject = new JSONObject();
        try {
            siteObject.put("shortName", serviceChangeName);
            siteObject.put("visiblity", "Public");
            siteObject.put("sitePreset", "site-dashboard");
            siteObject.put("title", serviceChangeName);
            siteObject.put("description", serviceChangeName);
            siteObject.put("alf_ticket", ticket);

            createSitePost.setRequestHeader("Content-Type", "application/json");
            createSitePost.setRequestHeader("Accept", "application/json");
            createSitePost.setRequestEntity(new StringRequestEntity(siteObject.toString(), "application/json", "UTF-8"));

            int status = client.executeMethod(createSitePost);
            System.out.println("create a site script status :: " + status);

            if (status == HttpStatus.SC_OK) {
                System.out.println("Site created OK");
            }
            else{
                System.out.println("There is error in site creation");
            }
        } catch (JSONException err) {
            err.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (HttpException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return null;
    }

1 Ответ

0 голосов
/ 12 ноября 2018

Итак, мне удалось успешно создать сайт программным способом, и вот что я сделал:

Во-первых, забудьте о написании веб-скрипта репозитория (платформы). Создание сайтов в Alfresco выполняется с помощью модуля Share, поэтому для создания сайта вам потребуется реализовать страницу или пользовательский пункт меню. У меня также было много проблем с аутентификацией, но если вы входите в систему через Alfresco Share и в своем Javascript используете предоставленный запрос Alfresco Ajax, тогда аутентификация не должна быть проблемой.

Вот компоненты, которые я использовал: -

  1. Создайте страницу «Поделиться» для создания своего сайта. В шаблоне Freemarker (.ftl) добавьте форму для сбора информации о сайте.
  2. Прикрепите кнопку в форме к следующей функции Javascript. Обратите внимание, что я собрал все это вместе с различными фрагментами кода в сети, так что он может использовать некоторую очистку. Но это в принципе работает для меня -

    function create_site()
    {
    var sc_form = document.forms.namedItem('sc_form');
    var name = sc_form.elements.namedItem('name').value;
    
    var url = Alfresco.constants.URL_CONTEXT + "service/modules/create-site";
    
    Alfresco.util.Ajax.request({
    
        method : Alfresco.util.Ajax.POST,
    
        url : url,
    
        dataObj: {
            sitePreset: "site-dashboard",
            visibility: "PUBLIC",
            title: name,
            shortName: name,
            description: name
        },
    
        requestContentType: Alfresco.util.Ajax.JSON,
    
        successCallback: 
        {
            fn: function(res){
               alert("success");
               alert(res.responseText);                                                                                            
            },
    
            scope: this
    
        },
    
        failureCallback: 
        {
           fn: function(response)
           {
              Alfresco.util.PopupManager.displayPrompt(
              {
                 title: Alfresco.util.message("message.failure", this.name),
                 text: "search failed"
              });                                          
           },
           scope: this
        }
    });
    }
    
...