843d1c3c51
POST /PowderCatalog/ImportApi accepts the JSON scrape format in the request body, authenticated by a shared secret in the X-Import-Token header (matched constant-time against CatalogImport:Token), with the vendor in X-Vendor-Name. Runs through the same ImportJsonAsync -> shared upsert as the manual upload, so the offline PrismaticSync tool can push unattended. ImportJsonAsync refactored to take a Stream (the form upload now passes file.OpenReadStream()). Endpoint is AllowAnonymous + IgnoreAntiforgeryToken (it's token-gated, not cookie-auth) and returns 401 until a token is configured, so it's inert by default. README updated with the route + token wiring. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
92 lines
3.2 KiB
JSON
92 lines
3.2 KiB
JSON
{
|
|
"ConnectionStrings": {
|
|
"DefaultConnection": "Server=.\\SQLEXPRESS;Database=PowderCoatingDb;Trusted_Connection=true;MultipleActiveResultSets=true;TrustServerCertificate=true"
|
|
},
|
|
"Logging": {
|
|
"LogLevel": {
|
|
"Default": "Information",
|
|
"Microsoft.AspNetCore": "Warning",
|
|
"Microsoft.EntityFrameworkCore": "Warning"
|
|
}
|
|
},
|
|
"Serilog": {
|
|
"MinimumLevel": {
|
|
"Default": "Information",
|
|
"Override": {
|
|
"Microsoft": "Warning",
|
|
"System": "Warning"
|
|
}
|
|
}
|
|
},
|
|
"AllowedHosts": "*",
|
|
"AppSettings": {
|
|
"CompanyName": "Powder Coating Logix",
|
|
"DefaultQuoteValidityDays": 30,
|
|
"DefaultPaymentTerms": "Net 30",
|
|
"TaxRate": 0.0,
|
|
"Currency": "USD"
|
|
},
|
|
"AI": {
|
|
"Anthropic": {
|
|
"ApiKey": "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"
|
|
},
|
|
"OpenAI": {
|
|
"ApiKey": "your-openai-api-key-here",
|
|
"Model": "gpt-4",
|
|
"Endpoint": "https://api.openai.com/v1"
|
|
},
|
|
"SemanticKernel": {
|
|
"Enabled": false
|
|
},
|
|
"Serper": {
|
|
"ApiKey": "25651af3a4829559ef0dfa1758fa3edbf92b6b76"
|
|
}
|
|
},
|
|
"Columbia": {
|
|
"ApiKey": "cca_live_ffd5e355809e1d23007d82982684157de5727c226bc2b482",
|
|
"BaseUrl": "https://columbiacoatings.com",
|
|
"ApiBasePath": "/wp-json/cca/v1"
|
|
},
|
|
"CatalogImport": {
|
|
"Token": ""
|
|
},
|
|
"SendGrid": {
|
|
"ApiKey": "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",
|
|
"FromEmail": "spouliot@scppowdercoating.com",
|
|
"FromName": "Powder Coating App Staff",
|
|
"DevRedirectEmail": "spouliot@scppowdercoating.com"
|
|
},
|
|
"Twilio": {
|
|
"AccountSid": "your-twilio-account-sid",
|
|
"AuthToken": "your-twilio-auth-token",
|
|
"FromNumber": "your-twilio-from-number",
|
|
"DevRedirectPhone": ""
|
|
},
|
|
"Stripe": {
|
|
"SecretKey": "sk_test_51TM6ukDedBup3CZU5TLbLhbBZDuBYwwygoc58JZwIrYQ2SyhKPUFcbHkFV1Q5osqkIEPt3XkwgsuinSJbY58GLx300l7z2lvqg",
|
|
"PublishableKey": "pk_test_51TM6ukDedBup3CZUst45gg9UfLQsijWap9ITR8elK3QT7ytm5B2okzx3RXXNjCsxPYKFwep8aJPYsCSzUBHzgBn000Y37XPxIr",
|
|
"WebhookSecret": "whsec_8ZNvufdNh1dS6TaQ8Ixmd0OtEXqI3eYs",
|
|
"Connect": {
|
|
"SecretKey": "sk_test_51T4BhEDxnI5c0z540zij4p72qY2QxSfxYEHd4hbwOAQrSZ0u9WXNfppZrgMLVnRNVaGKA3rC4WDyIuchm1ibG0c300sRj0uIuK",
|
|
"PublishableKey": "pk_test_51T4BhEDxnI5c0z54zY7enH5xgtmi8tAPH6JimphpZxuxva5PB3xC4QQmlM7XEICln38PDvLtolbRxo097XPLbeAo00w3NkPfuX",
|
|
"ConnectClientId": "ca_UBboV3dCLqOJgTzjp2vOMIMh0wLIOeGD",
|
|
"ConnectWebhookSecret": "whsec_cDFfVKGSV6aSIgOd3j2sZ2lo3Ly04KP9"
|
|
},
|
|
"Prices": {
|
|
"Basic": "price_basic_monthly_id_here",
|
|
"Pro": "price_pro_monthly_id_here",
|
|
"Enterprise": "price_enterprise_monthly_id_here"
|
|
}
|
|
},
|
|
"Storage": {
|
|
"ConnectionString": "DefaultEndpointsProtocol=https;AccountName=powdercoatingappdev;AccountKey=DN3eVfhytXb7aBC0md9h/6jE0Uzg6FJ+PK6MFc772qyqpf0kgTeXH0C2VCBBun9PiuItPd9CDKTP+ASthFCuCg==;EndpointSuffix=core.windows.net",
|
|
"Containers": {
|
|
"ProfileImages": "profileimages",
|
|
"JobImages": "jobimages",
|
|
"Manuals": "manuals",
|
|
"CompanyLogos": "companylogos",
|
|
"ReceiptImages": "receiptimages",
|
|
"CatalogImages": "catalogimages"
|
|
}
|
|
}
|
|
} |