summaryrefslogtreecommitdiff
path: root/src/xfersetup.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/xfersetup.c')
-rw-r--r--src/xfersetup.c244
1 files changed, 244 insertions, 0 deletions
diff --git a/src/xfersetup.c b/src/xfersetup.c
new file mode 100644
index 0000000..ca466fe
--- /dev/null
+++ b/src/xfersetup.c
@@ -0,0 +1,244 @@
+/*
+** Copyright (c) 2007 D. Richard Hipp
+**
+** This program is free software; you can redistribute it and/or
+** modify it under the terms of the Simplified BSD License (also
+** known as the "2-Clause License" or "FreeBSD License".)
+
+** This program is distributed in the hope that it will be useful,
+** but without any warranty; without even the implied warranty of
+** merchantability or fitness for a particular purpose.
+**
+** Author contact information:
+** drh@hwaci.com
+** http://www.hwaci.com/drh/
+**
+*******************************************************************************
+**
+** This file contains code to implement the transfer configuration
+** setup screens.
+*/
+#include "config.h"
+#include "xfersetup.h"
+#include <assert.h>
+
+/*
+** WEBPAGE: xfersetup
+** Main sub-menu for configuring the transfer system.
+*/
+void xfersetup_page(void){
+ login_check_credentials();
+ if( !g.perm.Setup ){
+ login_needed(0);
+ return;
+ }
+
+ style_header("Transfer Setup");
+
+ @ <table class="xfersetup">
+ setup_menu_entry("Common", "xfersetup_com",
+ "Common TH1 code run before all transfer request processing.");
+ setup_menu_entry("Push", "xfersetup_push",
+ "Specific TH1 code to run after \"push\" transfer requests.");
+ setup_menu_entry("Commit", "xfersetup_commit",
+ "Specific TH1 code to run after processing a commit.");
+ setup_menu_entry("Ticket", "xfersetup_ticket",
+ "Specific TH1 code to run after processing a ticket change.");
+ @ </table>
+
+ url_parse(0, URL_USE_CONFIG);
+ if( g.url.protocol ){
+ unsigned syncFlags;
+ const char *zButton;
+ char *zWarning;
+
+ if( db_get_boolean("dont-push", 0) ){
+ syncFlags = SYNC_PULL;
+ zButton = "Pull";
+ zWarning = 0;
+ }else{
+ syncFlags = SYNC_PUSH | SYNC_PULL;
+ zButton = "Synchronize";
+ zWarning = mprintf("WARNING: Pushing to \"%s\" is enabled.",
+ g.url.canonical);
+ }
+ @ <p>Press the <strong>%h(zButton)</strong> button below to
+ @ synchronize with the <em>%h(g.url.canonical)</em> repository now.<br>
+ @ This may be useful when testing the various transfer scripts.</p>
+ @ <p>You can use the <code>http -async</code> command in your scripts, but
+ @ make sure the <code>th1-uri-regexp</code> setting is set first.</p>
+ if( zWarning ){
+ @
+ @ <big><b>%h(zWarning)</b></big>
+ free(zWarning);
+ }
+ @
+ @ <form method="post" action="%R/%s(g.zPath)"><div>
+ login_insert_csrf_secret();
+ @ <input type="submit" name="sync" value="%h(zButton)">
+ @ </div></form>
+ @
+ if( P("sync") ){
+ user_select();
+ url_enable_proxy(0);
+ @ <pre class="xfersetup">
+ client_sync(syncFlags, 0, 0, 0, 0);
+ @ </pre>
+ }
+ }
+
+ style_finish_page();
+}
+
+/*
+** Common implementation for the transfer setup editor pages.
+*/
+static void xfersetup_generic(
+ const char *zTitle, /* Page title */
+ const char *zDbField, /* Configuration field being edited */
+ const char *zDfltValue, /* Default text value */
+ const char *zDesc, /* Description of this field */
+ char *(*xText)(const char*), /* Validity test or NULL */
+ void (*xRebuild)(void), /* Run after successful update */
+ int height /* Height of the edit box */
+){
+ const char *z;
+ int isSubmit;
+
+ login_check_credentials();
+ if( !g.perm.Setup ){
+ login_needed(0);
+ return;
+ }
+ if( P("setup") ){
+ cgi_redirect("xfersetup");
+ }
+ isSubmit = P("submit")!=0;
+ z = P("x");
+ if( z==0 ){
+ z = db_get(zDbField, zDfltValue);
+ }
+ style_set_current_feature("xfersetup");
+ style_header("Edit %s", zTitle);
+ if( P("clear")!=0 && cgi_csrf_safe(2) ){
+ db_unset(zDbField/*works-like:"x"*/, 0);
+ if( xRebuild ) xRebuild();
+ z = zDfltValue;
+ }else if( isSubmit && cgi_csrf_safe(2) ){
+ char *zErr = 0;
+ if( xText && (zErr = xText(z))!=0 ){
+ @ <p class="xfersetupError">ERROR: %h(zErr)</p>
+ }else{
+ db_set(zDbField/*works-like:"x"*/, z, 0);
+ if( xRebuild ) xRebuild();
+ cgi_redirect("xfersetup");
+ }
+ }
+ @ <form action="%R/%s(g.zPath)" method="post"><div>
+ login_insert_csrf_secret();
+ @ <p>%s(zDesc)</p>
+ @ <textarea name="x" rows="%d(height)" cols="80">%h(z)</textarea>
+ @ <p>
+ @ <input type="submit" name="submit" value="Apply Changes">
+ @ <input type="submit" name="clear" value="Revert To Default">
+ @ <input type="submit" name="setup" value="Cancel">
+ @ </p>
+ @ </div></form>
+ if ( zDfltValue ){
+ @ <hr>
+ @ <h2>Default %s(zTitle)</h2>
+ @ <blockquote><pre>
+ @ %h(zDfltValue)
+ @ </pre></blockquote>
+ }
+ style_finish_page();
+}
+
+static const char *zDefaultXferCommon = 0;
+
+/*
+** WEBPAGE: xfersetup_com
+** View or edit the TH1 script that runs prior to receiving a
+** transfer.
+*/
+void xfersetup_com_page(void){
+ static const char zDesc[] =
+ @ Enter TH1 script that initializes variables prior to running
+ @ any of the transfer request scripts.
+ ;
+ xfersetup_generic(
+ "Transfer Common Script",
+ "xfer-common-script",
+ zDefaultXferCommon,
+ zDesc,
+ 0,
+ 0,
+ 30
+ );
+}
+
+static const char *zDefaultXferPush = 0;
+
+/*
+** WEBPAGE: xfersetup_push
+** View or edit the TH1 script that runs after receiving a "push".
+*/
+void xfersetup_push_page(void){
+ static const char zDesc[] =
+ @ Enter TH1 script that runs after processing <strong>push</strong>
+ @ transfer requests.
+ ;
+ xfersetup_generic(
+ "Transfer Push Script",
+ "xfer-push-script",
+ zDefaultXferPush,
+ zDesc,
+ 0,
+ 0,
+ 30
+ );
+}
+
+static const char *zDefaultXferCommit = 0;
+
+/*
+** WEBPAGE: xfersetup_commit
+** View or edit the TH1 script that runs when a transfer commit
+** is processed.
+*/
+void xfersetup_commit_page(void){
+ static const char zDesc[] =
+ @ Enter TH1 script that runs when a commit is processed.
+ ;
+ xfersetup_generic(
+ "Transfer Commit Script",
+ "xfer-commit-script",
+ zDefaultXferCommit,
+ zDesc,
+ 0,
+ 0,
+ 30
+ );
+}
+
+static const char *zDefaultXferTicket = 0;
+
+/*
+** WEBPAGE: xfersetup_ticket
+** View or edit the TH1 script that runs when a ticket change artifact
+** is processed during a transfer.
+*/
+void xfersetup_ticket_page(void){
+ static const char zDesc[] =
+ @ Enter TH1 script that runs when a ticket change is processed.
+ ;
+ xfersetup_generic(
+ "Transfer Ticket Script",
+ "xfer-ticket-script",
+ zDefaultXferTicket,
+ zDesc,
+ 0,
+ 0,
+ 30
+ );
+}