| | @@ -710,29 +710,111 @@ |
| 710 | 710 | } |
| 711 | 711 | if( eForce==1 || !db_table_exists("repository","emailblob") ){ |
| 712 | 712 | db_multi_exec(zEmailSchema/*works-like:""*/); |
| 713 | 713 | } |
| 714 | 714 | } |
| 715 | + |
| 716 | +/* |
| 717 | +** Process POST change requests from the setup_smtp page |
| 718 | +*/ |
| 719 | +static void handle_smtp_setup_edit(char **pzErr, int *piErr){ |
| 720 | + *piErr = 0; |
| 721 | + *pzErr = 0; |
| 722 | + if( !cgi_csrf_safe(1) ) return; |
| 723 | + if( P("new")!=0 ){ |
| 724 | + const char *zEAddr = PDT("eaddr",""); |
| 725 | + const char *zEPolicy = PDT("epolicy",""); |
| 726 | + smtp_server_schema(0); |
| 727 | + if( db_exists("SELECT 1 FROM emailroute WHERE eaddr=%Q", zEAddr) ){ |
| 728 | + *pzErr = mprintf("\"%s\" already exists", zEAddr); |
| 729 | + *piErr = 100; |
| 730 | + return; |
| 731 | + } |
| 732 | + db_multi_exec("INSERT INTO emailroute(eaddr,epolicy)" |
| 733 | + "VALUES(%Q,%Q)", zEAddr, zEPolicy); |
| 734 | + return; |
| 735 | + } |
| 736 | + if( P("delete")!=0 ){ |
| 737 | + const char *zEAddr = PDT("eaddr",""); |
| 738 | + const char *zEPolicy = PDT("epolicy",""); |
| 739 | + smtp_server_schema(0); |
| 740 | + if( zEPolicy[0] ){ |
| 741 | + *pzErr = mprintf("Erase routing information to delete"); |
| 742 | + *piErr = 200; |
| 743 | + return; |
| 744 | + } |
| 745 | + db_multi_exec("DELETE FROM emailroute WHERE eaddr=%Q", zEAddr); |
| 746 | + return; |
| 747 | + } |
| 748 | + if( P("change")!=0 ){ |
| 749 | + const char *zEAddr = PDT("eaddr",""); |
| 750 | + const char *zEPolicy = PDT("epolicy",""); |
| 751 | + smtp_server_schema(0); |
| 752 | + db_multi_exec("UPDATE emailroute SET epolicy=%Q WHERE eaddr=%Q", |
| 753 | + zEPolicy, zEAddr); |
| 754 | + return; |
| 755 | + } |
| 756 | +} |
| 757 | + |
| 715 | 758 | |
| 716 | 759 | /* |
| 717 | 760 | ** WEBPAGE: setup_smtp |
| 718 | 761 | ** |
| 719 | 762 | ** Administrative page for configuring and controlling inbound email and |
| 720 | 763 | ** output email queuing. This page is available to administrators |
| 721 | 764 | ** only via the /Admin/EmailServer menu. |
| 722 | 765 | */ |
| 723 | 766 | void setup_smtp(void){ |
| 767 | + Stmt q; |
| 768 | + char *zErr = 0; |
| 769 | + int iErr = 0; |
| 724 | 770 | login_check_credentials(); |
| 725 | 771 | if( !g.perm.Setup ){ |
| 726 | 772 | login_needed(0); |
| 727 | 773 | return; |
| 728 | 774 | } |
| 775 | + db_begin_transaction(); |
| 729 | 776 | style_header("Email Server Setup"); |
| 730 | | - @ <i>Pending...</i> |
| 777 | + handle_smtp_setup_edit(&zErr, &iErr); |
| 778 | + if( db_table_exists("repository","emailroute") ){ |
| 779 | + db_prepare(&q, "SELECT eaddr, epolicy FROM emailroute ORDER BY 1"); |
| 780 | + }else{ |
| 781 | + db_prepare(&q, "SELECT null, null WHERE false"); |
| 782 | + } |
| 783 | + @ <table class="emailroutetab"> |
| 784 | + @ <thead> |
| 785 | + @ <tr><th>Email Address |
| 786 | + @ <th>Routing |
| 787 | + @ <th></th> |
| 788 | + @ </thead><tbody> |
| 789 | + while( db_step(&q)==SQLITE_ROW ){ |
| 790 | + const char *zEAddr = db_column_text(&q, 0); |
| 791 | + const char *zEPolicy = db_column_text(&q, 1); |
| 792 | + @ <tr><form action="%R/setup_smtp" method="POST"> |
| 793 | + @ <td valign="top">%h(zEAddr)\ |
| 794 | + @ <input type="hidden" name="eaddr" value="%h(zEAddr)"></td> |
| 795 | + @ <td valign="top">\ |
| 796 | + @ <textarea name="epolicy" rows="3" cols="40">%h(zEPolicy)</textarea>\ |
| 797 | + @ </td> |
| 798 | + @ <td valign="top">\ |
| 799 | + @ <input type="submit" name="change" value="Apply Changes"><br>\ |
| 800 | + @ <input type="submit" name="delete" value="Delete"></td> |
| 801 | + @ </form></tr> |
| 802 | + } |
| 803 | + db_finalize(&q); |
| 804 | + @ <tr><form action="%R/setup_smtp" method="POST"> |
| 805 | + @ <td valign="top"> |
| 806 | + @ <input type="text" name="eaddr" width="30"></td> |
| 807 | + @ <td valign="top">\ |
| 808 | + @ <textarea name="epolicy" rows="3" cols="40"></textarea>\ |
| 809 | + @ </td> |
| 810 | + @ <td valign="top"><input type="submit" name="new" value="New"></td> |
| 811 | + @ </form></tr> |
| 731 | 812 | style_footer(); |
| 813 | + fossil_free(zErr); |
| 814 | + db_end_transaction(0); |
| 732 | 815 | } |
| 733 | | - |
| 734 | 816 | |
| 735 | 817 | #if LOCAL_INTERFACE |
| 736 | 818 | /* |
| 737 | 819 | ** State information for the server |
| 738 | 820 | */ |
| 739 | 821 | |