Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 3 additions & 6 deletions .github/workflows/pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,24 +5,21 @@ on:
types: [opened, reopened, synchronize]

jobs:
call-external-service:
call-pr-ai-service:
runs-on: ubuntu-latest
steps:
- name: Debug JSON
run: |
echo "Repository: ${{ github.repository }}"
echo "PR number: ${{ github.event.pull_request.number }}"
echo "Email: ${{ secrets.email }}"

- name: Chamar API PR AI
- name: Chamar API
run: |
curl -X POST \
-H "Content-Type: application/json" \
-H "X-API-TOKEN: ${{ secrets.PRAI_API_TOKEN }}" \
-d "{
\"repository\": \"${{ github.repository }}\",
\"pr_number\": \"${{ github.event.pull_request.number }}\",
\"email\": \"${{ secrets.email }}\",
\"password\": \"${{ secrets.password }}\"
\"pr_number\": \"${{ github.event.pull_request.number }}\"
}" \
https://api.softwareai.site/api/prai/gen
45 changes: 29 additions & 16 deletions Back-End/Modules/Resolvers/user_identifier.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,9 +72,29 @@ def resolve_user_identifier(identifier):
# fallback: tenta buscar por email ignorando espaços
return User.query.filter_by(email=str(identifier).strip()).first()

def auth_user(logs_collection, app):
with app.app_context():
header_token = None
auth_header = request.headers.get('Authorization')
if auth_header and auth_header.lower().startswith('bearer '):
header_token = auth_header.split(None, 1)[1].strip()
if not header_token:
header_token = request.headers.get('X-API-TOKEN')

user = None
# se token informado, resolve usuário
if header_token:
try:
user = get_user_by_access_token(header_token)
except Exception as e:
log_action(logs_collection, 'dashboard_token_lookup_error', {'error': str(e)}, level='warning')
return None, None, "invalid"



def auth_user(email, password, logs_collection, app):
numeric_user_id = user.id
return user, numeric_user_id, "success"

def auth_user_fallback(email, password, logs_collection, app):
"""
Autentica usuário por token (se já estiver em g.current_user)
ou por email+senha. Retorna tupla (user, access_token, status).
Expand All @@ -85,6 +105,7 @@ def auth_user(email, password, logs_collection, app):
- "invalid" -> credenciais inválidas
"""
with app.app_context():
# se já veio pelo decorator (token válido)
if getattr(g, "current_user", None):
user = g.current_user
try:
Expand All @@ -94,17 +115,18 @@ def auth_user(email, password, logs_collection, app):
except Exception:
db.session.rollback()
log_action(logs_collection, 'login_success_token', {'message': 'login_success_token_by_token', 'username': user.email}, user=user.id)
# garante que retornamos o token atual do usuário
return user, user.acess_token, "success"

# 2) Autenticação por email + senha
if not email or not password:
log_action(logs_collection, 'auth_user', {'username': email, 'message': f"email e password nao presentes"}, user=user.id, level='warning')

logger.info("????????")
return None, None, "invalid"

user = resolve_user_identifier(email)
# evita usar user.id quando user é None (corrige crash no log)
if not user or not user.check_password(password):
log_action(logs_collection, 'login_failed', {'message': 'login_failed in if not user or not user.check_password(password):'}, level='warning', user=user.id)
log_action(logs_collection, 'login_failed', {'message': 'login_failed in if not user or not user.check_password(password):'}, level='warning', user=(user.id if user else None))
return None, None, "invalid"

# atualiza last_seen
Expand All @@ -121,19 +143,10 @@ def auth_user(email, password, logs_collection, app):
used = user.tokens_used or 0
remaining = limit - used

if token_needs_creation:
if remaining <= 0:
log_action(logs_collection, 'login_blocked_no_tokens',
{'message': 'login_blocked_no_tokens', 'remaining': remaining}, user=user.id, level='error')
return user, None, "token_limit"
new_token = user.create_access_token_for_user()
db.session.add(user)
db.session.commit()
return user, new_token, "success"

# se token não precisava ser recriado, só retorna o token atual
g.current_user = user
return user, user.acess_token, "success"


def is_token_revoked_or_expired(user: User):
if not user:
log_action(logs_collection, 'is_token_revoked_or_expired', {'message': "Usuário não encontrado"}, user=None)
Expand Down
9 changes: 3 additions & 6 deletions Back-End/Workflows/PullRequest/pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,24 +5,21 @@ on:
types: [opened, reopened, synchronize]

jobs:
call-external-service:
call-pr-ai-service:
runs-on: ubuntu-latest
steps:
- name: Debug JSON
run: |
echo "Repository: ${{ github.repository }}"
echo "PR number: ${{ github.event.pull_request.number }}"
echo "Email: ${{ secrets.email }}"

- name: Chamar API PR AI
- name: Chamar API
run: |
curl -X POST \
-H "Content-Type: application/json" \
-H "X-API-TOKEN: ${{ secrets.PRAI_API_TOKEN }}" \
-d "{
\"repository\": \"${{ github.repository }}\",
\"pr_number\": \"${{ github.event.pull_request.number }}\",
\"email\": \"${{ secrets.email }}\",
\"password\": \"${{ secrets.password }}\"
\"pr_number\": \"${{ github.event.pull_request.number }}\"
}" \
https://api.softwareai.site/api/prai/gen
Loading