# AzureFunction-PowerAutomateProxy
This repository contains an Azure Function that acts as an HTTP Proxy to authenticate and forward requests to a Power Automate Flow. The function is designed to validate incoming requests and then route them to a Power Automate Flow, ensuring that only authenticated requests are processed.
## Features
- Forwards all headers received from the incoming request.
- Adds custom header `Flow-Key` (from environment variables).
- Handles `GET`, `POST`, and `OPTIONS` method.
- Appends query parameters from the incoming request to the external URL.
- Configurable via environment variables to avoid hardcoding sensitive data like URLs and keys.
- Proper error handling and logging for easy debugging.
## Deploy to your Azure Environment
## Power Platform Solutions
To make it even easier to connect your Power Platform apps to this Azure Function, we've provided pre-built Power Platform solutions that you can import directly into your environment.
### Available Solutions
- **AzureFunctionMultiFilterArray** - A complete Power Platform solution that includes connectors and flows to work with the Azure Function proxy.
### Download Links
- [📦 Managed Solution (Production)](https://raw.githubusercontent.com/itweedie/AzureFunction-PowerAutomateProxy/refs/heads/main/power-platform-solutions/AzureFunctionMultiFilterArray_1_0_0_1_managed.zip) - Use this for production environments
- [📦 Unmanaged Solution (Development)]((https://raw.githubusercontent.com/itweedie/AzureFunction-PowerAutomateProxy/refs/heads/main/power-platform-solutions/power-platform-solutions/AzureFunctionMultiFilterArray_1_0_0_1.zip) - Use this for development and customization
### How to Import
1. Download the appropriate solution file from the links above
2. Go to your Power Platform environment at [make.powerapps.com](https://make.powerapps.com)
3. Navigate to **Solutions** in the left menu
4. Click **Import solution**
5. Upload the downloaded solution file
6. Follow the import wizard to complete the installation
## Development Instructions
### Prerequisites flow Local Development
- [Node.js](https://nodejs.org/en/download/)
- [Azure Functions Core Tools](https://docs.microsoft.com/en-us/azure/azure-functions/functions-run-local)
- [GitHub Codespaces](https://docs.github.com/en/codespaces/getting-started/quickstart) (optional for development)
- [Azure CLI](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli) (for deployment)
- Logic App URL and `Flow-Key`
### Local Development
1. **Clone the repository**:
```bash
git clone
cd
```
2. **Install dependencies**:
Make sure you have all the necessary dependencies installed:
```bash
npm install
```
3. **Create a `.env` file**:
Create a `.env` file in the root of your project directory with the following contents:
```env
FLOW_URL=https://prod-21.uksouth.logic.azure.com/workflows/your-logic-app-url
FLOW_KEY=your-flow-key-value
```
4. **Run the function locally**:
Start the Azure Functions runtime locally:
```bash
func start
```
Your function will be available at: `http://localhost:7071/api/proxy`.
5. **Test the function**:
Use a tool like `curl`, Postman, or your browser to send a `GET` or `POST` request to the function.
Example with `curl`:
```bash
curl -X GET http://localhost:7071/api/proxy -H "X-MS-CLIENT-PRINCIPAL-ID: custom-id"
```
### Deploy new version
From the project root folder run the following in PowerShell
`.\.github\workflows\deploy.ps1`
1. **Read the current version number from the file**
- The script reads the current version number from the `versionNumber.txt` file located in the [workflows](http://_vscodecontentref_/1) directory.
2. **Split the version number and increment the last part**
- The script splits the version number into its components (major, minor, patch).
- It increments the patch version by 1.
- It then constructs the new version number.
3. **Update the version number in the file**
- The script writes the new version number back to the `versionNumber.txt` file.
4. **Update the packageUri in azuredeploy.json**
- The script reads the `azuredeploy.json` file.
- It updates the `packageUri` field with the new version number.
- It writes the updated content back to the `azuredeploy.json` file.
5. **Commit the changes and push the new tag**
- It commits the changes with a message indicating the new version number.
- It creates a new git tag for the new version.
- It pushes the new tag and the changes to the remote repository.
### Configuration
- The external Power Automate Flow URL is set using the `FLOW_URL` environment variable.
- The `Flow-Key` header is added using the `FLOW_KEY` environment variable.
- The function automatically forwards all incoming headers to the external endpoint.
### Environment Variables
| Variable Name | Description |
| ---------------- | -------------------------------------------------------- |
| `FLOW_URL` | The URL for the external Logic App you are proxying to. |
| `FLOW_KEY` | The Flow-Key header used for authentication/identification. |
### Testing
- To test the function, you can browse to the end point, or send HTTP requests using `curl`, Postman, or any tool of your choice to the locally running or deployed function endpoint.
- The function will log incoming headers, query parameters, and errors for easier debugging.
### Contributing
Feel free to open issues or submit pull requests if you want to contribute to this project.
### License
This project is licensed under the MIT License.
## To Do
[ ] Add storagee account with managed identity
[ ] Add ability to talk to storager accoutn and get json file