From 513431584eaec93d43948019b112fbb9af99cb54 Mon Sep 17 00:00:00 2001 From: Timotheus Pokorra Date: Tue, 28 Nov 2023 12:48:21 +0100 Subject: [PATCH] Add new domain properties PassengerPython, PassengerNodejs, PassengerRuby, FcgiPhpBin, ProxyHttpPort, ProxyWebsocketPort --- hsarback/database/database_update.sql | 7 ++ hsarback/database/schema.sql | 8 +- .../java/de/hsadmin/remote/DomainRemote.java | 36 +++++++++ .../hsadmin/servlets/JsonPillarServlet.java | 24 ++++++ .../de/hsadmin/mods/dom/apache-vhost.vm | 29 ++++++++ .../main/java/de/hsadmin/mods/dom/Domain.java | 74 ++++++++++++++++++- 6 files changed, 176 insertions(+), 2 deletions(-) diff --git a/hsarback/database/database_update.sql b/hsarback/database/database_update.sql index aaf22cb..5fde6a6 100644 --- a/hsarback/database/database_update.sql +++ b/hsarback/database/database_update.sql @@ -88,3 +88,10 @@ INSERT INTO domain_option (domain_option_name) VALUES ('passenger'); INSERT INTO domain_option (domain_option_name) VALUES ('passengerfriendlyerrorpages'); INSERT INTO domain_option (domain_option_name) VALUES ('cgi'); INSERT INTO domain_option (domain_option_name) VALUES ('fastcgi'); + +ALTER TABLE domain ADD COLUMN passenger_python character varying(255); +ALTER TABLE domain ADD COLUMN passenger_nodejs character varying(255); +ALTER TABLE domain ADD COLUMN passenger_ruby character varying(255); +ALTER TABLE domain ADD COLUMN fcgi_php_bin character varying(255); +ALTER TABLE domain ADD COLUMN proxy_http_port integer; +ALTER TABLE domain ADD COLUMN proxy_websocket_port integer; diff --git a/hsarback/database/schema.sql b/hsarback/database/schema.sql index a0de244..b2e30da 100644 --- a/hsarback/database/schema.sql +++ b/hsarback/database/schema.sql @@ -319,7 +319,13 @@ CREATE TABLE domain ( domain_dns_master character varying(64), domain_id integer DEFAULT nextval('domain_domain_id_seq'::regclass) NOT NULL, domain_owner integer NOT NULL, - valid_subdomain_names character varying(256) DEFAULT 'www' NOT NULL + valid_subdomain_names character varying(256) DEFAULT 'www' NOT NULL, + passenger_python character varying(256) NULL, + passenger_nodejs character varying(256) NULL, + passenger_ruby character varying(256) NULL, + fcgi_php_bin character varying(256) NULL, + proxy_http_port integer DEFAULT NULL, + proxy_websocket_port integer DEFAULT NULL ); diff --git a/hsarback/src/main/java/de/hsadmin/remote/DomainRemote.java b/hsarback/src/main/java/de/hsadmin/remote/DomainRemote.java index 134787b..a2d56c2 100644 --- a/hsarback/src/main/java/de/hsadmin/remote/DomainRemote.java +++ b/hsarback/src/main/java/de/hsadmin/remote/DomainRemote.java @@ -51,6 +51,18 @@ public class DomainRemote extends AbstractRemote { } final String validsubdomains = dom.getValidsubdomainnames(); resultMap.put("validsubdomainnames", validsubdomains); + final String passengerpython = dom.getPassengerPython(); + resultMap.put("passengerpython", passengerpython); + final String passengernodejs = dom.getPassengerNodejs(); + resultMap.put("passengernodejs", passengernodejs); + final String passengerruby = dom.getPassengerRuby(); + resultMap.put("passengerruby", passengerruby); + final String passengerfcgiphpbin = dom.getPassengerFcgiPhpBin(); + resultMap.put("passengerfcgiphpbin", passengerfcgiphpbin); + final String proxyhttpport = dom.getProxyHttpPort(); + resultMap.put("proxyhttpport", proxyhttpport); + final String proxywebsocketport = dom.getProxyWebsocketPort(); + resultMap.put("proxywebsocketport", proxywebsocketport); } @Override @@ -92,6 +104,30 @@ public class DomainRemote extends AbstractRemote { if (validsubdomains != null && validsubdomains instanceof String) { dom.setValidsubdomainnames((String) validsubdomains); } + final Object passengerpython = setParams.get("passengerpython"); + if (passengerpython != null && passengerpython instanceof String) { + dom.setPassengerPython((String) passengerpython); + } + final Object passengernodejs = setParams.get("passengernodejs"); + if (passengernodejs != null && passengernodejs instanceof String) { + dom.setPassengerNodejs((String) passengernodejs); + } + final Object passengerruby = setParams.get("passengerruby"); + if (passengerruby != null && passengerruby instanceof String) { + dom.setPassengerRuby((String) passengerruby); + } + final Object fcgiphpbin = setParams.get("fcgiphpbin"); + if (fcgiphpbin != null && fcgiphpbin instanceof String) { + dom.setFcgiPhpBin((String) fcgiphpbin); + } + final Object proxyhttpport = setParams.get("proxyhttpport"); + if (proxyhttpport != null && proxyhttpport instanceof Integer) { + dom.setProxyHttpPort((Integer)proxyhttpport); + } + final Object proxywebsocketport = setParams.get("proxywebsocketport"); + if (proxywebsocketport != null && proxywebsocketport instanceof Integer) { + dom.setProxyWebsocketPort((Integer)proxywebsocketport); + } } @Override diff --git a/hsarback/src/main/java/de/hsadmin/servlets/JsonPillarServlet.java b/hsarback/src/main/java/de/hsadmin/servlets/JsonPillarServlet.java index f15b183..a94232d 100644 --- a/hsarback/src/main/java/de/hsadmin/servlets/JsonPillarServlet.java +++ b/hsarback/src/main/java/de/hsadmin/servlets/JsonPillarServlet.java @@ -121,6 +121,12 @@ public class JsonPillarServlet extends HttpServlet { domainadmins.add(domUserName); final Pac domPac = domUser.getPac(); final String validSubdomainNames = dom.getValidsubdomainnames(); + final String passengerPython = dom.getPassengerPython(); + final String passengerNodejs = dom.getPassengerNodejs(); + final String passengerRuby = dom.getPassengerRuby(); + final String fcgiPhpBin = dom.getFcgiPhpBin(); + final Integer proxyHttpPort = dom.getProxyHttpPort(); + final Integer proxyWebsocketPort = dom.getProxyWebsocketPort(); final INetAddress domINetAddr = domPac.getCurINetAddr(); writer.println(" \"domain\": \"" + domName + "\""); writer.println(" , \"pac\": \"" + domPac.getName() + "\""); @@ -148,6 +154,24 @@ public class JsonPillarServlet extends HttpServlet { } writer.println(" }"); writer.println(" , \"validsubdomains\": \"" + validSubdomainNames + "\""); + if (passengerPython.length() > 0) { + writer.println(" , \"passengerpython\": \"" + passengerPython + "\""); + } + if (passengerNodejs.length() > 0) { + writer.println(" , \"passengernodejs\": \"" + passengerNodejs + "\""); + } + if (passengerRuby.length() > 0) { + writer.println(" , \"passengerruby\": \"" + passengerRuby + "\""); + } + if (fcgPhpBin.length() > 0) { + writer.println(" , \"fcgiphpbin\": \"" + fcgPhpBin + "\""); + } + if (proxyHttpPort > 0) { + writer.println(" , \"proxyhttpport\": \"" + proxyHttpPort.toString() + "\""); + } + if (proxyWebsocketPort > 0) { + writer.println(" , \"proxywebsocketport\": \"" + proxyWebsocketPort.toString() + "\""); + } writer.println(" }"); } writer.println(" ]"); diff --git a/hsarback/src/main/resources/de/hsadmin/mods/dom/apache-vhost.vm b/hsarback/src/main/resources/de/hsadmin/mods/dom/apache-vhost.vm index 735130c..2d41215 100644 --- a/hsarback/src/main/resources/de/hsadmin/mods/dom/apache-vhost.vm +++ b/hsarback/src/main/resources/de/hsadmin/mods/dom/apache-vhost.vm @@ -122,6 +122,15 @@ #end #if( ${passengerfriendlyerrorpages} ) PassengerFriendlyErrorPages On +#end +#if( ${passengerpython} ) + PassengerPython /home/pacs/${pac.name}/users/${dom.user.name}/${passengerpython} +#end +#if( ${passengernodejs} ) + PassengerNodejs /home/pacs/${pac.name}/users/${dom.user.name}/${passengernodejs} +#end +#if( ${passengerruby} ) + PassengerRuby /home/pacs/${pac.name}/users/${dom.user.name}/${passengerruby} #end AllowOverride AuthConfig FileInfo Indexes Limit Options=ExecCGI,IncludesNoExec,Indexes,MultiViews,SymLinksIfOwnerMatch,PassengerNodejs,PassengerPython,PassengerRuby,PassengerAppEnv @@ -170,6 +179,26 @@ RewriteCond /home/doms/${dom.name}/subs-ssl/#[[${tolower:%1} ]]# !-d RewriteRule ^(.*) - [redirect=404,last] +#end + +#if( ${proxywebsocketport} ) +RewriteCond %{REQUEST_FILENAME} !-f +RewriteCond %{HTTP:Connection} Upgrade [NC,OR] +RewriteCond %{HTTP:Upgrade} websocket [NC] +RewriteRule .* ws://127.0.0.1:${proxywebsocketport}/%{REQUEST_URI} [proxy] + +#end + +#if( ${proxyhttpport} ) +RewriteCond %{REQUEST_FILENAME} !-f +RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f +RewriteRule .* http://127.0.0.1:${proxyhttpport}/%{REQUEST_URI} [proxy,last] +RequestHeader set X-Forwarded-Proto "https" + +#end + +#if( ${fcgiphpbin} ) + SetEnv HTTP_PHP_BIN ${fcgiphpbin} #end AddType application/x-httpd-php .php .php5 .php4 .php3 Action application/x-httpd-php /fastcgi-bin/phpstub diff --git a/qserv/src/main/java/de/hsadmin/mods/dom/Domain.java b/qserv/src/main/java/de/hsadmin/mods/dom/Domain.java index a6d0575..269bc94 100644 --- a/qserv/src/main/java/de/hsadmin/mods/dom/Domain.java +++ b/qserv/src/main/java/de/hsadmin/mods/dom/Domain.java @@ -65,7 +65,31 @@ public class Domain extends AbstractEntity { @AnnFieldIO(validation="([a-z0-9\\-]+\\,)*[a-z0-9\\-]+|\\*|", rw=ReadWriteAccess.READWRITE) @Column(name = "valid_subdomain_names", columnDefinition = "character varying(512)") private String validsubdomainnames; - + + @AnnFieldIO(validation="[a-zA-Z0-9\\-\\/\\.]*", rw=ReadWriteAccess.READWRITE) + @Column(name = "passenger_python", columnDefinition = "character varying(256)") + private String passengerpython; + + @AnnFieldIO(validation="[a-zA-Z0-9\\-\\/\\.]*", rw=ReadWriteAccess.READWRITE) + @Column(name = "passenger_nodejs", columnDefinition = "character varying(256)") + private String passengernodejs; + + @AnnFieldIO(validation="[a-zA-Z0-9\\-\\/\\.]*", rw=ReadWriteAccess.READWRITE) + @Column(name = "passenger_ruby", columnDefinition = "character varying(256)") + private String passengerruby; + + @AnnFieldIO(validation="[a-zA-Z0-9\\-\\/\\.]*", rw=ReadWriteAccess.READWRITE) + @Column(name = "fcgi_php_bin", columnDefinition = "character varying(256)") + private String fcgiphpbin; + + @AnnFieldIO(validation="[0-9]*", rw=ReadWriteAccess.READWRITE) + @Column(name = "proxy_http_port", columnDefinition = "integer") + private Integer proxyhttpport; + + @AnnFieldIO(validation="[0-9]*", rw=ReadWriteAccess.READWRITE) + @Column(name = "proxy_websocket_port", columnDefinition = "integer") + private Integer proxywebsocketport; + public Domain() { } @@ -191,6 +215,54 @@ public class Domain extends AbstractEntity { this.validsubdomainnames = validSubdomainNames; } + public String getPassengerPython() { + return passengerpython; + } + + public void setPassengerPython(String value) { + passengerpython = value; + } + + public String getPassengerNodejs() { + return passengernodejs; + } + + public void setPassengerNodejs(String value) { + passengernodejs = value; + } + + public String getPassengerRuby() { + return passengerruby; + } + + public void setPassengerRuby(String value) { + passengerruby = value; + } + + public String getFcgiPhpBin() { + return fcgiphpbin; + } + + public void setFcgiPhpBin(String value) { + fcgiphpbin = value; + } + + public Integer getProxyHttpPort() { + return proxyhttpport; + } + + public void setProxyHttpPort(String value) { + proxyhttpport = value; + } + + public Integer getProxyWebsocketPort() { + return proxywebsocketport; + } + + public void setProxyWebsocketPort(String value) { + proxywebsocketport = value; + } + public String getServeraliases() { String[] subs = validsubdomainnames.split(","); StringBuffer aliases = new StringBuffer();