# -*- coding: utf-8 -*-
"""
测试普通用户登录和权限
"""

import paramiko
import json
import time
import os

# 从环境变量读取配置
ssh_host = os.environ.get('SSH_HOST', '192.168.5.60')
ssh_user = os.environ.get('SSH_USER', 'ubains')
ssh_password = os.environ.get('SSH_PASSWORD', '')

if not ssh_password:
    print("错误：SSH_PASSWORD 环境变量未设置")
    print("请设置环境变量或创建 .env 文件")
    exit(1)

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ssh_host, username=ssh_user, password=ssh_password)

print('='*60)
print('普通用户功能测试')
print('='*60)

# 测试1: 普通用户登录
print('\n测试1: 普通用户登录')
login_data = '{"username":"user","password":"User@2026"}'
cmd = f'curl -s -X POST http://localhost:8088/login -H "Content-Type: application/json" -d \'{login_data}\' -c /tmp/user_cookies.txt'
stdin, stdout, stderr = ssh.exec_command(cmd)
result = stdout.read().decode()
try:
    data = json.loads(result)
    if data.get('success'):
        print('  OK: 普通用户登录成功')
        print(f'  用户: {data["user"]["username"]}')
        print(f'  角色: {data["user"]["role"]}')
    else:
        print(f'  失败: {data.get("error")}')
except Exception as e:
    print(f'  结果: {result[:200]}')

# 测试2: 获取用户信息
print('\n测试2: 获取用户信息')
time.sleep(1)
stdin, stdout, stderr = ssh.exec_command('curl -s http://localhost:8088/api/user/info -b /tmp/user_cookies.txt')
result = stdout.read().decode()
try:
    data = json.loads(result)
    if data.get('success'):
        print('  OK: 用户信息获取成功')
        print(f'  用户: {data["user"]["username"]}')
        print(f'  角色: {data["user"]["role"]}')
except:
    print(f'  结果: {result[:200]}')

# 测试3: 访问缓存统计接口（应返回403）
print('\n测试3: 普通用户访问缓存统计（应返回403）')
stdin, stdout, stderr = ssh.exec_command('curl -s http://localhost:8088/api/cache/stats -b /tmp/user_cookies.txt')
result = stdout.read().decode()
try:
    data = json.loads(result)
    if data.get('code') == 403:
        print('  OK: 正确返回403权限不足')
        print(f'  错误信息: {data.get("error")}')
    elif data.get('success'):
        print('  错误: 普通用户不应能访问此接口')
    else:
        print(f'  结果: {data}')
except:
    print(f'  结果: {result[:200]}')

# 测试4: 访问问题排查接口（应允许）
print('\n测试4: 普通用户访问问题排查接口（应允许）')
stdin, stdout, stderr = ssh.exec_command('curl -s http://localhost:8088/api/projects -b /tmp/user_cookies.txt')
result = stdout.read().decode()
try:
    data = json.loads(result)
    if data.get('success'):
        print('  OK: 普通用户可访问问题排查接口')
        print(f'  项目数: {len(data.get("projects", []))}')
    else:
        print(f'  结果: {data}')
except:
    print(f'  结果: {result[:200]}')

# 测试5: 注销登录
print('\n测试5: 注销登录')
stdin, stdout, stderr = ssh.exec_command('curl -s -X POST http://localhost:8088/logout -b /tmp/user_cookies.txt')
result = stdout.read().decode()
try:
    data = json.loads(result)
    if data.get('success'):
        print('  OK: 注销成功')
except:
    print(f'  结果: {result[:200]}')

ssh.close()
print('\n' + '='*60)
print('测试完成')
print('='*60)