CRITICAL: - Membership: remove :role/:org_id/:user_id from mass-assignment cast; use explicit create_changeset/4 and role_update_changeset/2 - GraphQL member resolver: add authorize_invite/3 checking admin/owner role and role hierarchy - REST invitations controller: add auth check for invite creation HIGH: - ApiToken: remove :organization_id/:user_id from cast; use explicit create_changeset/4 MEDIUM: - Move 8 LiveView Ecto queries into context modules (Admin, Alerts, Coverages, OnCall, Snmp) - Replace Process.put/Process.get with socket assigns for unresolved_alert_count (user_auth + layouts + 50 templates) - Add batch get_utilization_for_interfaces/1 to eliminate N+1 capacity queries in device show - Replace Process.sleep with Process.monitor/assert_receive or Process.send_after in 5 test files LOW: - Add handle_params/3 to UserResetPasswordLive, UserRegistrationLive, StatusPageLive - Remove redundant Repo.preload calls; add preloads to list_site_devices/1 - Fix @impl annotations and credo nesting warnings
233 lines
11 KiB
Text
233 lines
11 KiB
Text
<% content = fn -> %>
|
|
<div class="space-y-8">
|
|
<div>
|
|
<h1 class="text-3xl font-bold text-gray-900 dark:text-white">Privacy Policy</h1>
|
|
<p class="mt-2 text-sm text-gray-600 dark:text-gray-400">
|
|
Version 1.0 | Effective Date: January 29, 2026
|
|
</p>
|
|
</div>
|
|
|
|
<div class="prose prose-sm dark:prose-invert max-w-none">
|
|
<section class="space-y-4">
|
|
<h2 class="text-xl font-semibold text-gray-900 dark:text-white">
|
|
Our Commitment to Privacy
|
|
</h2>
|
|
<p class="text-gray-700 dark:text-gray-300">
|
|
At Towerops, we value your privacy. This policy outlines how we collect, use, and protect your data when you use our network monitoring platform.
|
|
</p>
|
|
</section>
|
|
|
|
<section class="space-y-4 mt-8">
|
|
<h2 class="text-xl font-semibold text-gray-900 dark:text-white">
|
|
Data Collection and Use
|
|
</h2>
|
|
<p class="text-gray-700 dark:text-gray-300">
|
|
We collect and store information necessary to provide our network monitoring services, including:
|
|
</p>
|
|
<ul class="list-disc pl-6 space-y-2 text-gray-700 dark:text-gray-300">
|
|
<li>Account information (email address, organization details)</li>
|
|
<li>Network device data (IP addresses, SNMP data, device configurations)</li>
|
|
<li>Monitoring metrics and alerts</li>
|
|
<li>Usage information to improve our services</li>
|
|
</ul>
|
|
<p class="text-gray-700 dark:text-gray-300">
|
|
<strong class="font-semibold">
|
|
Your data is used exclusively for providing our monitoring services to you.
|
|
</strong>
|
|
We will never sell, trade, or expose your data to third parties for marketing or any other purposes.
|
|
</p>
|
|
</section>
|
|
|
|
<section class="space-y-4 mt-8">
|
|
<h2 class="text-xl font-semibold text-gray-900 dark:text-white">Data Protection</h2>
|
|
<p class="text-gray-700 dark:text-gray-300">
|
|
We implement industry-standard security measures to protect your data:
|
|
</p>
|
|
<ul class="list-disc pl-6 space-y-2 text-gray-700 dark:text-gray-300">
|
|
<li>Encrypted connections (HTTPS/TLS) for all data transmission</li>
|
|
<li>Secure database storage with encryption at rest</li>
|
|
<li>Access controls and authentication mechanisms</li>
|
|
<li>Regular security audits and updates</li>
|
|
</ul>
|
|
</section>
|
|
|
|
<section class="space-y-4 mt-8">
|
|
<h2 class="text-xl font-semibold text-gray-900 dark:text-white">Data Retention</h2>
|
|
<p class="text-gray-700 dark:text-gray-300">
|
|
We retain your data for as long as your account is active and as necessary to provide our services. Time-series monitoring data is retained according to your subscription plan. When you delete your account, we will delete your data within 30 days, except where we are required to retain it for legal or compliance purposes.
|
|
</p>
|
|
</section>
|
|
|
|
<section class="space-y-4 mt-8">
|
|
<h2 class="text-xl font-semibold text-gray-900 dark:text-white">Third-Party Services</h2>
|
|
<p class="text-gray-700 dark:text-gray-300">
|
|
We use limited third-party services to operate our platform:
|
|
</p>
|
|
<ul class="list-disc pl-6 space-y-2 text-gray-700 dark:text-gray-300">
|
|
<li>Cloud infrastructure providers for hosting</li>
|
|
<li>Email delivery services for notifications</li>
|
|
<li>Payment processors for subscription billing</li>
|
|
</ul>
|
|
<p class="text-gray-700 dark:text-gray-300">
|
|
These services are bound by their own privacy policies and are used solely to deliver our services to you.
|
|
</p>
|
|
</section>
|
|
|
|
<section class="space-y-4 mt-8">
|
|
<h2 class="text-xl font-semibold text-gray-900 dark:text-white">Your Rights</h2>
|
|
<p class="text-gray-700 dark:text-gray-300">
|
|
You have the right to:
|
|
</p>
|
|
<ul class="list-disc pl-6 space-y-2 text-gray-700 dark:text-gray-300">
|
|
<li>Access your data at any time through your account</li>
|
|
<li>Export your data in standard formats</li>
|
|
<li>Request deletion of your account and associated data</li>
|
|
<li>Update or correct your information</li>
|
|
<li>Opt out of non-essential communications</li>
|
|
</ul>
|
|
</section>
|
|
|
|
<section class="space-y-4 mt-8">
|
|
<h2 class="text-xl font-semibold text-gray-900 dark:text-white">Cookie Policy</h2>
|
|
|
|
<h3 class="text-lg font-semibold text-gray-900 dark:text-white mt-6">
|
|
What Are Cookies?
|
|
</h3>
|
|
<p class="text-gray-700 dark:text-gray-300">
|
|
Cookies are small text files that are placed on your device when you visit our website. They help us provide you with a better experience by remembering your preferences and keeping you logged in.
|
|
</p>
|
|
|
|
<h3 class="text-lg font-semibold text-gray-900 dark:text-white mt-6">
|
|
What Cookies Do We Use?
|
|
</h3>
|
|
<p class="text-gray-700 dark:text-gray-300">
|
|
Towerops uses only <strong class="font-semibold">essential cookies</strong>
|
|
that are strictly necessary for the operation of our platform. We do not use third-party tracking, advertising, or analytics cookies.
|
|
</p>
|
|
|
|
<div class="mt-4">
|
|
<h4 class="text-base font-semibold text-gray-900 dark:text-white">Essential Cookies</h4>
|
|
<p class="text-gray-700 dark:text-gray-300 mt-2">
|
|
These cookies are required for our website to function properly and cannot be disabled:
|
|
</p>
|
|
<ul class="list-disc pl-6 space-y-3 text-gray-700 dark:text-gray-300 mt-3">
|
|
<li>
|
|
<strong class="font-semibold">Session Cookie (_towerops_web_key)</strong>
|
|
<br />
|
|
<span class="text-sm">
|
|
Purpose: Maintains your login session and authentication state
|
|
</span>
|
|
<br />
|
|
<span class="text-sm">
|
|
Duration: Expires when you close your browser or log out
|
|
</span>
|
|
</li>
|
|
<li>
|
|
<strong class="font-semibold">CSRF Token</strong>
|
|
<br />
|
|
<span class="text-sm">
|
|
Purpose: Protects against Cross-Site Request Forgery attacks
|
|
</span>
|
|
<br />
|
|
<span class="text-sm">Duration: Expires when you close your browser</span>
|
|
</li>
|
|
<li>
|
|
<strong class="font-semibold">LiveView Session</strong>
|
|
<br />
|
|
<span class="text-sm">
|
|
Purpose: Enables real-time updates and interactive features
|
|
</span>
|
|
<br />
|
|
<span class="text-sm">Duration: Expires when you close your browser</span>
|
|
</li>
|
|
<li>
|
|
<strong class="font-semibold">Cookie Consent (cookie_consent)</strong>
|
|
<br />
|
|
<span class="text-sm">
|
|
Purpose: Remembers your cookie consent preference (EU/EEA users only)
|
|
</span>
|
|
<br />
|
|
<span class="text-sm">Duration: 1 year</span>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
|
|
<h3 class="text-lg font-semibold text-gray-900 dark:text-white mt-6">
|
|
Third-Party Cookies
|
|
</h3>
|
|
<p class="text-gray-700 dark:text-gray-300">
|
|
We do not use any third-party cookies, tracking pixels, or analytics services that would place cookies on your device.
|
|
</p>
|
|
|
|
<h3 class="text-lg font-semibold text-gray-900 dark:text-white mt-6">Managing Cookies</h3>
|
|
<p class="text-gray-700 dark:text-gray-300">
|
|
Since we only use essential cookies required for the website to function, disabling them will prevent you from using Towerops. However, you can manage cookies through your browser settings:
|
|
</p>
|
|
<ul class="list-disc pl-6 space-y-2 text-gray-700 dark:text-gray-300 mt-3">
|
|
<li>
|
|
<strong class="font-semibold">Chrome:</strong>
|
|
Settings → Privacy and security → Cookies and other site data
|
|
</li>
|
|
<li>
|
|
<strong class="font-semibold">Firefox:</strong>
|
|
Settings → Privacy & Security → Cookies and Site Data
|
|
</li>
|
|
<li>
|
|
<strong class="font-semibold">Safari:</strong>
|
|
Preferences → Privacy → Manage Website Data
|
|
</li>
|
|
<li>
|
|
<strong class="font-semibold">Edge:</strong>
|
|
Settings → Cookies and site permissions → Manage and delete cookies
|
|
</li>
|
|
</ul>
|
|
|
|
<h3 class="text-lg font-semibold text-gray-900 dark:text-white mt-6">
|
|
Cookie Consent (EU/EEA Users)
|
|
</h3>
|
|
<p class="text-gray-700 dark:text-gray-300">
|
|
If you are accessing Towerops from the European Union or European Economic Area, you will see a cookie consent banner on your first visit. Since we only use essential cookies necessary for the website to function, this banner is informational. Under GDPR, essential cookies do not require explicit consent as they are strictly necessary for the service you have requested.
|
|
</p>
|
|
|
|
<h3 class="text-lg font-semibold text-gray-900 dark:text-white mt-6">
|
|
Changes to Our Cookie Policy
|
|
</h3>
|
|
<p class="text-gray-700 dark:text-gray-300">
|
|
If we introduce new types of cookies in the future (such as analytics or marketing cookies), we will update this policy and, where required, request your consent before using them.
|
|
</p>
|
|
</section>
|
|
|
|
<section class="space-y-4 mt-8">
|
|
<h2 class="text-xl font-semibold text-gray-900 dark:text-white">
|
|
Changes to This Policy
|
|
</h2>
|
|
<p class="text-gray-700 dark:text-gray-300">
|
|
We may update this privacy policy from time to time. We will notify you of any significant changes by email or through our platform.
|
|
</p>
|
|
</section>
|
|
|
|
<section class="space-y-4 mt-8 pt-8 border-t border-gray-200 dark:border-gray-700">
|
|
<h2 class="text-xl font-semibold text-gray-900 dark:text-white">Contact Us</h2>
|
|
<p class="text-gray-700 dark:text-gray-300">
|
|
If you have questions about this privacy policy or how we handle your data, please contact us at <a
|
|
href="mailto:hi@towerops.net"
|
|
class="text-blue-600 hover:text-blue-500 dark:text-blue-400 dark:hover:text-blue-300"
|
|
>hi@towerops.net</a>.
|
|
</p>
|
|
</section>
|
|
</div>
|
|
</div>
|
|
<% end %>
|
|
<%= if @current_scope && @current_scope.user do %>
|
|
<Layouts.authenticated
|
|
flash={@flash}
|
|
current_scope={@current_scope}
|
|
unresolved_alert_count={assigns[:unresolved_alert_count] || 0}
|
|
>
|
|
{content.()}
|
|
</Layouts.authenticated>
|
|
<% else %>
|
|
<Layouts.app flash={@flash}>
|
|
{content.()}
|
|
</Layouts.app>
|
|
<% end %>
|