1
0
mirror of https://github.com/bitwarden/server.git synced 2024-12-24 17:17:40 +01:00
bitwarden-server/util/Function/UnblockIp.cs
2017-09-08 12:38:09 -04:00

89 lines
3.2 KiB
C#

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Net.Http;
using System.Threading.Tasks;
using Bit.Function.Models;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Newtonsoft.Json;
namespace Bit.Function
{
public static class UnblockIp
{
[FunctionName("UnblockIp")]
public static void Run(
[QueueTrigger("unblockip", Connection = "")]string myQueueItem,
TraceWriter log)
{
log.Info($"C# Queue trigger function processed: {myQueueItem}");
UnblockIpAsync(myQueueItem, log).Wait();
}
private static async Task UnblockIpAsync(string id, TraceWriter log)
{
if(id == null)
{
return;
}
var zoneId = ConfigurationManager.AppSettings["ZoneId"];
var xAuthEmail = ConfigurationManager.AppSettings["X-Auth-Email"];
var xAuthKey = ConfigurationManager.AppSettings["X-Auth-Key"];
if(id.Contains(".") || id.Contains(":"))
{
// IP address messages.
using(var client = new HttpClient())
{
client.BaseAddress = new Uri("https://api.cloudflare.com");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Add("X-Auth-Email", xAuthEmail);
client.DefaultRequestHeaders.Add("X-Auth-Key", xAuthKey);
var response = await client.GetAsync($"/client/v4/zones/{zoneId}/firewall/access_rules/rules?" +
$"configuration_target=ip&configuration_value={id}");
var responseString = await response.Content.ReadAsStringAsync();
var responseJson = JsonConvert.DeserializeObject<ListResult>(responseString);
if(!responseJson.Success)
{
return;
}
foreach(var rule in responseJson.Result)
{
if(rule.Configuration?.Value != id)
{
continue;
}
log.Info($"Unblock IP {id}, {rule.Id}");
await DeleteRuleAsync(zoneId, xAuthEmail, xAuthKey, rule.Id);
}
}
}
else
{
log.Info($"Unblock Id {id}");
await DeleteRuleAsync(zoneId, xAuthEmail, xAuthKey, id);
}
}
private static async Task DeleteRuleAsync(string zoneId, string xAuthEmail, string xAuthKey, string id)
{
var path = $"/client/v4/zones/{zoneId}/firewall/access_rules/rules/{id}";
using(var client = new HttpClient())
{
client.BaseAddress = new Uri("https://api.cloudflare.com");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Add("X-Auth-Email", xAuthEmail);
client.DefaultRequestHeaders.Add("X-Auth-Key", xAuthKey);
await client.DeleteAsync(path);
}
}
}
}