User: Привет! Подскажи, пожалуйста, как из sonarqube через api достать данные по уязвимостям одного проекта?
Assistant: Привет! Конечно, я могу помочь. Чтобы получить данные по уязвимостям одного проекта через API SonarQube, можно использовать следующий запрос:

1. **Создайте API токен** в SonarQube, если у вас его еще нет. Это можно сделать в разделе "My Account" -> "Security" -> "Generate Tokens".

2. **Сформируйте запрос** к API. Пример запроса на получение уязвимостей проекта:

```javascript
const axios = require('axios');

const SONARQUBE_URL = 'https://your-sonarqube-instance/api/issues/search';
const PROJECT_KEY = 'your_project_key';
const SONARQUBE_TOKEN = 'your_sonar_token';

async function fetchProjectVulnerabilities() {
  try {
    const response = await axios.get(SONARQUBE_URL, {
      params: {
        componentKeys: PROJECT_KEY,
        resolved: false,
        types: 'VULNERABILITY'
      },
      headers: {
        'Authorization': `Basic ${Buffer.from(`${SONARQUBE_TOKEN}:`).toString('base64')}`
      }
    });
    console.log('Project Vulnerabilities:', response.data);
  } catch (error) {
    console.error('Error fetching project vulnerabilities:', error);
  }
}

fetchProjectVulnerabilities();
```

Этот код использует библиотеку `axios` для выполнения GET-запроса к API SonarQube и получения данных по уязвимостям проекта[^1^>[1](https://publicapis.io/sonarqube-api)</sup>.

Если у вас возникнут вопросы или потребуется дополнительная помощь, дайте знать! 😊

[^1^>[1](https://publicapis.io/sonarqube-api)</sup>: [SonarQube API Documentation](https://publicapis.io/sonarqube-api)
User: Нужно их сохранить в csv
Assistant: Чтобы сохранить данные о уязвимостях проекта из SonarQube в CSV файл, вы можете использовать библиотеку csv-writer в Node.js для создания CSV файла. Вот пример, как можно модифицировать предыдущий код, чтобы записать уязвимости в CSV:

Установите необходимые библиотеки:

npm install axios csv-writer


Используйте следующий код:

const axios = require(&#39;axios&#39;);
const createCsvWriter = require(&#39;csv-writer&#39;).createObjectCsvWriter;

const SONARQUBE_URL = &#39;https://your-sonarqube-instance/api/issues/search&#39;;
const PROJECT_KEY = &#39;your_project_key&#39;;
const SONARQUBE_TOKEN = &#39;your_sonar_token&#39;;

const csvWriter = createCsvWriter({
  path: &#39;vulnerabilities.csv&#39;,
  header: [
    { id: &#39;key&#39;, title: &#39;Key&#39; },
    { id: &#39;rule&#39;, title: &#39;Rule&#39; },
    { id: &#39;severity&#39;, title: &#39;Severity&#39; },
    { id: &#39;message&#39;, title: &#39;Message&#39; },
    { id: &#39;file&#39;, title: &#39;File&#39; },
    { id: &#39;line&#39;, title: &#39;Line&#39; }
  ]
});

async function fetchProjectVulnerabilities() {
  try {
    const response = await axios.get(SONARQUBE_URL, {
      params: {
        componentKeys: PROJECT_KEY,
        resolved: false,
        types: &#39;VULNERABILITY&#39;
      },
      headers: {
        &#39;Authorization&#39;: `Basic ${Buffer.from(`${SONARQUBE_TOKEN}:`).toString(&#39;base64&#39;)}`
      }
    });
  
    const vulnerabilities = response.data.issues.map(issue =&gt; ({
      key: issue.key,
      rule: issue.rule,
      severity: issue.severity,
      message: issue.message,
      file: issue.component,
      line: issue.line
    }));

    await csvWriter.writeRecords(vulnerabilities);
    console.log(&#39;Vulnerabilities saved to vulnerabilities.csv&#39;);
  } catch (error) {
    console.error(&#39;Error fetching project vulnerabilities:&#39;, error);
  }
}

fetchProjectVulnerabilities();

Объяснение кода:

В начале создается объект csvWriter, который настраивает путь к файлу CSV и определяет заголовки.
В fetchProjectVulnerabilities, после получения данных, выполняется маппинг уязвимостей для извлечения необходимых полей, таких как ключ, правило, уровень серьезности, сообщение, файл и строка.
Уязвимости записываются в CSV файл с помощью метода writeRecords.

Запустите этот код, и уязвимости вашего проекта будут сохранены в файл vulnerabilities.csv. Если у вас есть дополнительные вопросы, не стесняйтесь спрашивать! 😊

User: Перепиши, пожалуйста, на питон
Assistant: Конечно! Вот пример, как получить данные о уязвимостях проекта из SonarQube и сохранить их в CSV файл с использованием Python:

Убедитесь, что у вас установлены необходимые библиотеки. Установите их с помощью pip, если их еще нет:

pip install requests pandas


Используйте следующий код:

import requests
import pandas as pd
import base64

SONARQUBE_URL = &#39;https://your-sonarqube-instance/api/issues/search&#39;
PROJECT_KEY = &#39;your_project_key&#39;
SONARQUBE_TOKEN = &#39;your_sonar_token&#39;

def fetch_project_vulnerabilities():
    try:
        response = requests.get(SONARQUBE_URL, params={
            &#39;componentKeys&#39;: PROJECT_KEY,
            &#39;resolved&#39;: &#39;false&#39;,
            &#39;types&#39;: &#39;VULNERABILITY&#39;
        }, headers={
            &#39;Authorization&#39;: f&#39;Basic {base64.b64encode(f&quot;{SONARQUBE_TOKEN}:&quot;.encode()).decode()}&#39;
        })

        response.raise_for_status()  # Проверка на ошибки ответа
        vulnerabilities = response.json().get(&#39;issues&#39;, [])

        # Получаем необходимые поля
        data = [{
            &#39;key&#39;: issue[&#39;key&#39;],
            &#39;rule&#39;: issue[&#39;rule&#39;],
            &#39;severity&#39;: issue[&#39;severity&#39;],
            &#39;message&#39;: issue[&#39;message&#39;],
            &#39;file&#39;: issue[&#39;component&#39;],
            &#39;line&#39;: issue.get(&#39;line&#39;, &#39;N/A&#39;)  # Если строка отсутствует
        } for issue in vulnerabilities]

        # Создаем DataFrame и сохраняем в CSV
        df = pd.DataFrame(data)
        df.to_csv(&#39;vulnerabilities.csv&#39;, index=False)
        print(&#39;Vulnerabilities saved to vulnerabilities.csv&#39;)

    except requests.RequestException as e:
        print(&#39;Error fetching project vulnerabilities:&#39;, e)

if __name__ == &quot;__main__&quot;:
    fetch_project_vulnerabilities()

Объяснение кода:

Импортируем необходимые библиотеки: requests для выполнения запросов к API и pandas для работы с данными и сохранения их в CSV.
Настраиваем параметры подключения к SonarQube, включая URL, ключ проекта и токен.
Функция fetch_project_vulnerabilities отправляет GET-запрос к API SonarQube и получает данные о уязвимостях.
Извлекаем интересующие нас поля и сохраняем их в список словарей.
Создаем DataFrame из этого списка и сохраняем его в файл vulnerabilities.csv.
Обрабатываем возможные ошибки при выполнении запроса.

Запустите этот код, и уязвимости вашего проекта будут сохранены в файл vulnerabilities.csv. Если есть дополнительные вопросы, дайте знать! 😊

User: Перепиши лучше на kotlin
Assistant: