329 lines
9.6 KiB
Markdown
329 lines
9.6 KiB
Markdown
# Nextcloud OAuth Authentication Setup Guide
|
|
|
|
This guide explains how to set up Nextcloud OAuth authentication for United Tattoo Studio and migrate existing artist accounts.
|
|
|
|
## Table of Contents
|
|
|
|
1. [Nextcloud OAuth App Registration](#nextcloud-oauth-app-registration)
|
|
2. [Environment Configuration](#environment-configuration)
|
|
3. [Nextcloud Group Setup](#nextcloud-group-setup)
|
|
4. [Migrating Existing Artists](#migrating-existing-artists)
|
|
5. [Testing the Integration](#testing-the-integration)
|
|
6. [Troubleshooting](#troubleshooting)
|
|
|
|
---
|
|
|
|
## Nextcloud OAuth App Registration
|
|
|
|
### Step 1: Access OAuth Settings in Nextcloud
|
|
|
|
1. Log in to your Nextcloud instance as an administrator: https://portal.united-tattoos.com
|
|
2. Navigate to **Settings** → **Security** → **OAuth 2.0 clients** (bottom of the page)
|
|
|
|
### Step 2: Create New OAuth App
|
|
|
|
1. Click **"Add client"**
|
|
2. Fill in the following details:
|
|
- **Name**: `United Tattoo Studio` (or any descriptive name)
|
|
- **Redirection URI**: `https://united-tattoos.com/api/auth/callback/nextcloud`
|
|
- For local development: `http://localhost:3000/api/auth/callback/nextcloud`
|
|
- For preview/staging: `https://your-preview-url.pages.dev/api/auth/callback/nextcloud`
|
|
3. Click **"Add"**
|
|
|
|
### Step 3: Save Credentials
|
|
|
|
After creating the OAuth app, Nextcloud will display:
|
|
- **Client Identifier** (Client ID)
|
|
- **Secret** (Client Secret)
|
|
|
|
**IMPORTANT**: Copy these values immediately and store them securely. The secret will not be shown again.
|
|
|
|
---
|
|
|
|
## Environment Configuration
|
|
|
|
### Step 1: Update Environment Variables
|
|
|
|
Add the following variables to your `.env.local` file (or production environment):
|
|
|
|
```bash
|
|
# Nextcloud Configuration
|
|
NEXTCLOUD_BASE_URL="https://portal.united-tattoos.com"
|
|
|
|
# Nextcloud OAuth Authentication
|
|
NEXTCLOUD_OAUTH_CLIENT_ID="your-client-id-from-step-3"
|
|
NEXTCLOUD_OAUTH_CLIENT_SECRET="your-client-secret-from-step-3"
|
|
|
|
# Group names for auto-provisioning (customize if needed)
|
|
NEXTCLOUD_ARTISTS_GROUP="artists"
|
|
NEXTCLOUD_ADMINS_GROUP="shop_admins"
|
|
|
|
# Nextcloud CalDAV Integration (existing, for calendar sync)
|
|
NEXTCLOUD_USERNAME="your-service-account-username"
|
|
NEXTCLOUD_PASSWORD="your-service-account-app-password"
|
|
NEXTCLOUD_CALENDAR_BASE_PATH="/remote.php/dav/calendars"
|
|
```
|
|
|
|
### Step 2: Verify Configuration
|
|
|
|
Run the following command to check for configuration errors:
|
|
|
|
```bash
|
|
npm run build
|
|
```
|
|
|
|
If there are missing environment variables, the build will fail with a helpful error message from `lib/env.ts`.
|
|
|
|
---
|
|
|
|
## Nextcloud Group Setup
|
|
|
|
### Step 1: Create Required Groups
|
|
|
|
1. In Nextcloud, navigate to **Settings** → **Users**
|
|
2. Click **"Add group"** and create the following groups:
|
|
- `artists` - For tattoo artists who need access to their portfolios
|
|
- `shop_admins` - For shop administrators
|
|
|
|
### Step 2: Assign Users to Groups
|
|
|
|
For each existing artist or admin:
|
|
|
|
1. Go to **Settings** → **Users**
|
|
2. Find the user in the list
|
|
3. Click on their row and select the appropriate group(s):
|
|
- Artists: Add to `artists` group
|
|
- Shop admins: Add to `shop_admins` group
|
|
- Super admins: Add to both `shop_admins` AND `admins` (or `admin`) group
|
|
|
|
**Note**: Users can be in multiple groups. For example, a shop owner who is also an artist should be in both `artists` and `shop_admins`.
|
|
|
|
---
|
|
|
|
## Migrating Existing Artists
|
|
|
|
### Understanding the Migration
|
|
|
|
When an artist signs in via Nextcloud OAuth for the first time:
|
|
|
|
1. The system checks if a user with that email already exists in the database
|
|
2. **If user exists**: The existing user account is linked to the Nextcloud OAuth session
|
|
3. **If user doesn't exist**: A new user and artist profile are auto-created based on Nextcloud group membership
|
|
|
|
### Step 1: Match Email Addresses
|
|
|
|
Ensure that each artist's email in Nextcloud matches their email in the United Tattoo database:
|
|
|
|
```sql
|
|
-- Query to check existing artist emails in D1 database
|
|
SELECT u.email, a.name, a.slug
|
|
FROM users u
|
|
JOIN artists a ON u.id = a.user_id
|
|
WHERE u.role = 'ARTIST';
|
|
```
|
|
|
|
Run this via:
|
|
```bash
|
|
wrangler d1 execute united-tattoo --command="SELECT u.email, a.name, a.slug FROM users u JOIN artists a ON u.id = a.user_id WHERE u.role = 'ARTIST';"
|
|
```
|
|
|
|
### Step 2: Create Nextcloud Accounts (If Needed)
|
|
|
|
If an artist doesn't have a Nextcloud account yet:
|
|
|
|
1. Go to **Settings** → **Users** in Nextcloud
|
|
2. Click **"New user"**
|
|
3. Fill in:
|
|
- **Username**: Artist's preferred username (e.g., `amari.kyss`)
|
|
- **Display name**: Artist's full name (e.g., "Amari Kyss")
|
|
- **Email**: **Must match** the email in the database
|
|
- **Groups**: Add to `artists` group
|
|
4. Set a temporary password and send it to the artist
|
|
5. Ask the artist to change their password on first login
|
|
|
|
### Step 3: Notify Artists
|
|
|
|
Send an email to all artists with the following information:
|
|
|
|
**Email Template:**
|
|
|
|
```
|
|
Subject: New Login Process for United Tattoo Studio Dashboard
|
|
|
|
Hello [Artist Name],
|
|
|
|
We've updated the artist dashboard login process to use your Nextcloud account for easier access.
|
|
|
|
What's Changed:
|
|
- You now sign in using your Nextcloud credentials (same account you use for [calendar/files/etc])
|
|
- No need to remember a separate password for the artist dashboard
|
|
- More secure authentication via OAuth
|
|
|
|
How to Sign In:
|
|
1. Go to https://united-tattoos.com/auth/signin
|
|
2. Click "Sign in with Nextcloud"
|
|
3. Use your Nextcloud username and password
|
|
4. You'll be redirected to your artist dashboard
|
|
|
|
Your Nextcloud Credentials:
|
|
- Username: [their Nextcloud username]
|
|
- Email: [their email]
|
|
- If you forgot your Nextcloud password, you can reset it at: https://portal.united-tattoos.com/login
|
|
|
|
Need Help?
|
|
Contact [admin contact] if you have any issues signing in.
|
|
|
|
Thanks,
|
|
United Tattoo Studio Team
|
|
```
|
|
|
|
---
|
|
|
|
## Testing the Integration
|
|
|
|
### Test 1: New Artist Sign In
|
|
|
|
1. Ensure a test user is in the `artists` group in Nextcloud
|
|
2. Go to `/auth/signin` on your website
|
|
3. Click "Sign in with Nextcloud"
|
|
4. Authorize the OAuth app
|
|
5. Verify:
|
|
- User is created in the `users` table
|
|
- Artist profile is created in the `artists` table
|
|
- Redirect to `/artist-dashboard` works
|
|
- Artist can view/edit their profile
|
|
|
|
### Test 2: Existing Artist Sign In
|
|
|
|
1. Use an artist whose email matches an existing database record
|
|
2. Follow the same sign-in process
|
|
3. Verify:
|
|
- No duplicate user/artist created
|
|
- Existing artist profile is accessible
|
|
- Portfolio images are preserved
|
|
|
|
### Test 3: Admin Sign In
|
|
|
|
1. Ensure a test user is in the `shop_admins` group
|
|
2. Sign in via Nextcloud OAuth
|
|
3. Verify:
|
|
- User is created with `SHOP_ADMIN` role
|
|
- Redirect to `/admin` dashboard works
|
|
- Admin can access all admin features
|
|
|
|
### Test 4: Unauthorized User
|
|
|
|
1. Create a Nextcloud user NOT in any authorized group
|
|
2. Attempt to sign in via OAuth
|
|
3. Verify:
|
|
- Sign-in is **rejected** with an error message
|
|
- User is **not** created in the database
|
|
- Error message suggests joining the 'artists' or 'shop_admins' group
|
|
|
|
### Test 5: Admin Fallback (Emergency Access)
|
|
|
|
1. Go to `/auth/signin?admin=true`
|
|
2. Verify the credentials form is shown
|
|
3. Sign in with `nicholai@biohazardvfx.com` (or any email in dev mode)
|
|
4. Verify admin access works
|
|
|
|
---
|
|
|
|
## Troubleshooting
|
|
|
|
### Issue: "Unable to sign in with Nextcloud"
|
|
|
|
**Possible causes:**
|
|
- User not in `artists` or `shop_admins` group
|
|
- OAuth app not configured correctly in Nextcloud
|
|
- Redirect URI mismatch
|
|
|
|
**Solution:**
|
|
1. Check user's group membership in Nextcloud
|
|
2. Verify `NEXTCLOUD_OAUTH_CLIENT_ID` and `NEXTCLOUD_OAUTH_CLIENT_SECRET` are correct
|
|
3. Ensure redirect URI in Nextcloud matches your domain exactly
|
|
|
|
### Issue: "Nextcloud API error" in server logs
|
|
|
|
**Possible causes:**
|
|
- Service account credentials (`NEXTCLOUD_USERNAME`/`NEXTCLOUD_PASSWORD`) are incorrect
|
|
- Nextcloud OCS API is not accessible
|
|
|
|
**Solution:**
|
|
1. Test service account credentials manually:
|
|
```bash
|
|
curl -u "username:password" https://portal.united-tattoos.com/ocs/v1.php/cloud/users/testuser
|
|
```
|
|
2. Ensure the service account has admin privileges in Nextcloud
|
|
3. Check Nextcloud logs for any API access errors
|
|
|
|
### Issue: Duplicate artist profiles created
|
|
|
|
**Possible causes:**
|
|
|
|
- Email mismatch between Nextcloud and database
|
|
- User signed in before email was matched
|
|
|
|
**Solution:**
|
|
|
|
1. Identify duplicate records:
|
|
|
|
```sql
|
|
SELECT * FROM artists WHERE user_id IN (
|
|
SELECT user_id FROM artists GROUP BY user_id HAVING COUNT(*) > 1
|
|
);
|
|
```
|
|
|
|
2. Manually merge duplicates by updating portfolio images to point to the correct artist
|
|
3. Delete the duplicate artist profile
|
|
|
|
### Issue: Artist can't access dashboard after sign-in
|
|
|
|
**Possible causes:**
|
|
|
|
- Artist profile not created during auto-provisioning
|
|
- Database transaction failed
|
|
|
|
**Solution:**
|
|
|
|
1. Check if user exists:
|
|
|
|
```sql
|
|
SELECT * FROM users WHERE email = 'artist@example.com';
|
|
```
|
|
|
|
2. Check if artist profile exists:
|
|
|
|
```sql
|
|
SELECT * FROM artists WHERE user_id = 'user-id-from-above';
|
|
```
|
|
|
|
3. If user exists but artist doesn't, manually create artist:
|
|
|
|
```sql
|
|
INSERT INTO artists (id, user_id, name, bio, specialties, is_active, slug)
|
|
VALUES ('uuid', 'user-id', 'Artist Name', '', '[]', 1, 'artist-name');
|
|
```
|
|
|
|
---
|
|
|
|
## Next Steps
|
|
|
|
After completing this setup:
|
|
|
|
1. **Monitor sign-ins**: Check server logs for any authentication errors
|
|
2. **Gather feedback**: Ask artists about their experience with the new login process
|
|
3. **Update documentation**: Keep this guide updated with any changes to the process
|
|
4. **Consider enhancements**:
|
|
- Sync artist profile photos from Nextcloud
|
|
- Enable calendar integration for all artists
|
|
- Add two-factor authentication requirement
|
|
|
|
---
|
|
|
|
## Support
|
|
|
|
For technical support or questions about this integration, contact the development team or file an issue in the project repository.
|
|
|
|
Last updated: 2025-10-22
|