1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Xml.Linq;
  5. using clempaul.Dreamhost.ResponseData;
  6.  
  7. namespace clempaul.Dreamhost
  8. {
  9.     public class MySQLRequests
  10.     {
  11.         DreamhostAPI api;
  12.  
  13.         internal MySQLRequests(DreamhostAPI api)
  14.         {
  15.             this.api = api;
  16.         }
  17.  
  18.         #region mysql-list_dbs
  19.  
  20.         public IEnumerable<DB> ListDBs()
  21.         {
  22.             XDocument response = api.SendCommand("mysql-list_dbs");
  23.  
  24.             var dbs = from data in response.Element("dreamhost").Elements("data")
  25.                       select new DB
  26.                       {
  27.                           account_id = data.Element("account_id").AsString(),
  28.                           db = data.Element("db").AsString(),
  29.                           description = data.Element("description").AsString(),
  30.                           home = data.Element("home").AsString(),
  31.                           disk_usage_mb = data.Element("disk_usage_mb").AsDouble()
  32.                       };
  33.  
  34.             return dbs;
  35.         }
  36.  
  37.         #endregion
  38.  
  39.         #region mysql-list_hostnames
  40.  
  41.         public IEnumerable<DBHostname> ListHostnames()
  42.         {
  43.             XDocument response = api.SendCommand("mysql-list_hostnames");
  44.  
  45.             var hostnames = from data in response.Element("dreamhost").Elements("data")
  46.                             select new DBHostname
  47.                             {
  48.                                 account_id = data.Element("account_id").AsString(),
  49.                                 domain = data.Element("domain").AsString(),
  50.                                 home = data.Element("home").AsString()
  51.                             };
  52.  
  53.             return hostnames;
  54.         }
  55.  
  56.         #endregion
  57.  
  58.         #region mysql-add_hostname
  59.  
  60.         public void AddHostname(string hostname)
  61.         {
  62.             QueryData[] parameters = { new QueryData("hostname", hostname) };
  63.  
  64.             api.SendCommand("mysql-add_hostname", parameters);
  65.         }
  66.  
  67.         /*
  68.          * Overloads
  69.          */
  70.  
  71.         public void AddHostname(DBHostname hostname)
  72.         {
  73.             this.AddHostname(hostname.domain);
  74.         }
  75.  
  76.         #endregion
  77.  
  78.         #region mysql-remove_hostname
  79.  
  80.         public void RemoveHostname(string hostname)
  81.         {
  82.             QueryData[] parameters = { new QueryData("hostname", hostname) };
  83.  
  84.             api.SendCommand("mysql-remove_hostname", parameters);
  85.         }
  86.  
  87.         /*
  88.          * Overloads
  89.          */
  90.  
  91.         public void RemoveHostname(DBHostname hostname)
  92.         {
  93.             this.RemoveHostname(hostname.domain);
  94.         }
  95.  
  96.         #endregion
  97.  
  98.         #region mysql-list_users
  99.  
  100.         public IEnumerable<DBUser> ListUsers()
  101.         {
  102.             XDocument response = api.SendCommand("mysql-list_users");
  103.  
  104.             var users = from data in response.Element("dreamhost").Elements("data")
  105.                         select new DBUser
  106.                         {
  107.                             account_id = data.Element("account_id").AsString(),
  108.                             db = data.Element("db").AsString(),
  109.                             home = data.Element("home").AsString(),
  110.                             username = data.Element("username").AsString(),
  111.                             host = data.Element("host").AsString(),
  112.                             select_priv = data.Element("select_priv").AsBool(),
  113.                             insert_priv = data.Element("insert_priv").AsBool(),
  114.                             update_priv = data.Element("update_priv").AsBool(),
  115.                             delete_priv = data.Element("delete_priv").AsBool(),
  116.                             create_priv = data.Element("create_priv").AsBool(),
  117.                             drop_priv = data.Element("drop_priv").AsBool(),
  118.                             index_priv = data.Element("index_priv").AsBool(),
  119.                             alter_priv = data.Element("alter_priv").AsBool()
  120.                         };
  121.  
  122.             return users;
  123.         }
  124.  
  125.         #endregion
  126.  
  127.         #region mysql-add_user
  128.  
  129.         public void AddUser(DBUser user)
  130.         {
  131.             // Check parameters
  132.  
  133.             if (user.db == null || user.db == string.Empty)
  134.             {
  135.                 throw new Exception("Missing db parameter");
  136.             }
  137.             else if (user.username == null || user.username == string.Empty)
  138.             {
  139.                 throw new Exception("Missing user parameter");
  140.             }
  141.             else if (user.password == null || user.password == string.Empty)
  142.             {
  143.                 throw new Exception("Missing password parameter");
  144.             }
  145.  
  146.             // Construct request
  147.  
  148.             List<QueryData> parameters = new List<QueryData>();
  149.  
  150.             parameters.Add(new QueryData("db", user.db));
  151.             parameters.Add(new QueryData("user", user.username));
  152.             parameters.Add(new QueryData("password", user.password));
  153.  
  154.             if (user.select_priv != null)
  155.             {
  156.                 parameters.Add(new QueryData("select", user.select_priv.AsYN()));
  157.             }
  158.  
  159.             if (user.insert_priv != null)
  160.             {
  161.                 parameters.Add(new QueryData("insert", user.insert_priv.AsYN()));
  162.             }
  163.  
  164.             if (user.update_priv != null)
  165.             {
  166.                 parameters.Add(new QueryData("update", user.update_priv.AsYN()));
  167.             }
  168.  
  169.             if (user.delete_priv != null)
  170.             {
  171.                 parameters.Add(new QueryData("delete", user.delete_priv.AsYN()));
  172.             }
  173.  
  174.             if (user.create_priv != null)
  175.             {
  176.                 parameters.Add(new QueryData("create", user.create_priv.AsYN()));
  177.             }
  178.  
  179.             if (user.drop_priv != null)
  180.             {
  181.                 parameters.Add(new QueryData("drop", user.drop_priv.AsYN()));
  182.             }
  183.  
  184.             if (user.index_priv != null)
  185.             {
  186.                 parameters.Add(new QueryData("index", user.index_priv.AsYN()));
  187.             }
  188.  
  189.             if (user.alter_priv != null)
  190.             {
  191.                 parameters.Add(new QueryData("alter", user.alter_priv.AsYN()));
  192.             }
  193.  
  194.             if (user.host != null)
  195.             {
  196.                 parameters.Add(new QueryData("hostnames", user.host));
  197.             }
  198.  
  199.             api.SendCommand("mysql-add_user", parameters);
  200.         }
  201.  
  202.         #endregion
  203.  
  204.         #region mysql-remove_user
  205.  
  206.         public void RemoveUser(DBUser user)
  207.         {
  208.             // Check parameters
  209.  
  210.             if (user.db == null || user.db == string.Empty)
  211.             {
  212.                 throw new Exception("Missing db parameter");
  213.             }
  214.  
  215.             else if (user.username == null || user.username == string.Empty)
  216.             {
  217.                 throw new Exception("Missing user parameter");
  218.             }
  219.  
  220.             else if (user.select_priv == null)
  221.             {
  222.                 throw new Exception("Missing select parameter");
  223.             }
  224.  
  225.             else if (user.insert_priv == null)
  226.             {
  227.                 throw new Exception("Missing insert parameter");
  228.             }
  229.  
  230.             else if (user.update_priv == null)
  231.             {
  232.                 throw new Exception("Missing update parameter");
  233.             }
  234.  
  235.             else if (user.delete_priv == null)
  236.             {
  237.                 throw new Exception("Missing delete parameter");
  238.             }
  239.  
  240.             else if (user.create_priv == null)
  241.             {
  242.                 throw new Exception("Missing create parameter");
  243.             }
  244.  
  245.             else if (user.drop_priv == null)
  246.             {
  247.                 throw new Exception("Missing drop parameter");
  248.             }
  249.  
  250.             else if (user.index_priv == null)
  251.             {
  252.                 throw new Exception("Missing index parameter");
  253.             }
  254.  
  255.             else if (user.alter_priv == null)
  256.             {
  257.                 throw new Exception("Missing alter parameter");
  258.             }
  259.  
  260.             // Create request
  261.  
  262.             QueryData[] parameters = {
  263.                                          new QueryData("db", user.db),
  264.                                          new QueryData("user", user.username),
  265.                                          new QueryData("select", user.select_priv.AsYN()),
  266.                                          new QueryData("insert", user.insert_priv.AsYN()),
  267.                                          new QueryData("update", user.update_priv.AsYN()),
  268.                                          new QueryData("delete", user.delete_priv.AsYN()),
  269.                                          new QueryData("create", user.create_priv.AsYN()),
  270.                                          new QueryData("drop", user.drop_priv.AsYN()),
  271.                                          new QueryData("index", user.index_priv.AsYN()),
  272.                                          new QueryData("alter", user.alter_priv.AsYN())
  273.                                      };
  274.  
  275.             api.SendCommand("mysql-remove_user", parameters);
  276.         }
  277.  
  278.         #endregion
  279.  
  280.     }
  281. }
  282.