DocSpace-buildtools/build/install/win/CustomActions/C#/Utils/CustomAction.cs
Eugene Kozyrev 51ba7c8628
Feature/Update Windows installation (#857)
* Add DocEditor service

Update windows installation project on develop

* Add ASC.Login service

* Delete onlyoffice-login.conf

* Add json configs substitutions

* Edit StartMigrationRunner custom action

* Set service run as NT AUTHORITY\LocalService

* Move config file substitutions to project

* Remove condition to SetMACHINEKEY

* Revert "Set service run as NT AUTHORITY\LocalService"

This reverts commit 3e9c578a652e38f346f7e7fd52eca4ab72dcf537.

* Fix nginx conf substitution

* Add Local Service permitions

* Add folders permitions

Move node.js service logs

* Fix

* Edit logpath
2022-09-28 17:02:59 +03:00

123 lines
5.1 KiB
C#

using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using System.Net.Sockets;
using Microsoft.Deployment.WindowsInstaller;
using RabbitMQ.Client;
namespace Utils
{
public class CustomActions
{
public static string CreateAuthToken(string pkey, string machinekey)
{
using (var hasher = new System.Security.Cryptography.HMACSHA1(Encoding.UTF8.GetBytes(machinekey)))
{
var now = DateTime.UtcNow.ToString("yyyyMMddHHmmss");
var hash = System.Web.HttpServerUtility.UrlTokenEncode(hasher.ComputeHash(Encoding.UTF8.GetBytes(string.Join("\n", now, pkey))));
return string.Format("ASC {0}:{1}:{2}", pkey, now, hash);
}
}
[CustomAction]
public static ActionResult SetVersionReleaseDateSign(Session session)
{
var pkey = Convert.ToString(session["VERSION.RELEASE_DATE"]);
var machineKey = Convert.ToString(session["MACHINE_KEY"]);
session.Log("SetVersionReleaseDateSign: pkey {0}, machineKey {1}", pkey, machineKey);
session["VERSION.RELEASE_DATE.SIGN"] = CreateAuthToken(pkey, machineKey);
session.Log("SetVersionReleaseDateSign End: {0}", session["VERSION.RELEASE_DATE.SIGN"]);
return ActionResult.Success;
}
[CustomAction]
public static ActionResult TestRedisServerConnection(Session session)
{
try
{
using (var redis = new Redis(session["REDIS_HOST_PROP"], Convert.ToInt32(session["REDIS_PORT_PROP"])))
{
if (!String.IsNullOrEmpty(session["REDIS_PASSWORD_PROP"].Trim()))
redis.Password = session["REDIS_PASSWORD_PROP"];
var pong = redis.Ping("ONLYOFFICE");
session.Log("Redis Status: IsConnected is {0}", !String.IsNullOrEmpty(pong));
session["RedisServerConnectionError"] = !String.IsNullOrEmpty(pong) ? "" : String.Format("Connection Refused HOST:{0},PORT:{1},PASS:{2}", session["REDIS_HOST_PROP"], session["REDIS_PORT_PROP"], session["REDIS_PASSWORD_PROP"]);
}
}
catch (Exception ex)
{
session.Log("RedisConnectionException '{0}'", ex.Message);
session["RedisServerConnectionError"] = String.Format("Connection Refused HOST:{0},PORT:{1},PASS:{2}", session["REDIS_HOST_PROP"], session["REDIS_PORT_PROP"], session["REDIS_PASSWORD_PROP"]);
}
return ActionResult.Success;
}
[CustomAction]
public static ActionResult TestRabbitMQConnection(Session session)
{
ConnectionFactory factory = new ConnectionFactory();
factory.HostName = session["RABBITMQ_HOSTNAME_PROP"];
factory.Port = Convert.ToInt32(session["RABBITMQ_PORT_PROP"]);
factory.VirtualHost = session["RABBITMQ_VIRTUALHOST_PROP"];
factory.UserName = session["RABBITMQ_USERNAME_PROP"];
factory.Password = session["RABBITMQ_PASSWORD_PROP"];
try
{
using (IConnection conn = factory.CreateConnection())
{
session.Log("RabbitMQ Status: IsConnected is {0}", conn.IsOpen);
session["RabbitMQServerConnectionError"] = conn.IsOpen ? "" : String.Format("Connection Refused HOST:{0}, PORT:{1}, VirtualHost:{2}, UserName:{3}, PASS:{4}",
session["RABBITMQ_HOSTNAME_PROP"],
session["RABBITMQ_PORT_PROP"],
session["RABBITMQ_VIRTUALHOST_PROP"],
session["RABBITMQ_USERNAME_PROP"],
session["RABBITMQ_PASSWORD_PROP"]
);
}
}
catch (Exception ex)
{
session.Log("RabbitMQ.Client.Exceptions.BrokerUnreachableException {0}", ex.Message);
session["RabbitMQServerConnectionError"] = String.Format("Connection Refused HOST:{0}, PORT:{1}, VirtualHost:{2}, UserName:{3}, PASS:{4}",
session["RABBITMQ_HOSTNAME_PROP"],
session["RABBITMQ_PORT_PROP"],
session["RABBITMQ_VIRTUALHOST_PROP"],
session["RABBITMQ_USERNAME_PROP"],
session["RABBITMQ_PASSWORD_PROP"]
);
}
return ActionResult.Success;
}
[CustomAction]
public static ActionResult CheckTCPAvailability(Session session)
{
string HOST = session.CustomActionData["HOST"];
string PORT = session.CustomActionData["PORT"];
string OUTPUT = session.CustomActionData["OUTPUT"];
var success = new TcpClient().BeginConnect(HOST, Convert.ToInt32(PORT), null, null).AsyncWaitHandle.WaitOne(TimeSpan.FromSeconds(1));
session[OUTPUT] = success.ToString();
return ActionResult.Success;
}
}
}