diff --git a/Demo1-Policies-Settings/README.md b/Demo1-Policies-Settings/README.md
index b89af52..4463b71 100644
--- a/Demo1-Policies-Settings/README.md
+++ b/Demo1-Policies-Settings/README.md
@@ -2,54 +2,107 @@
## Overview
-This demo will show you how to configure GitHub Copilot for your organization and enterprise. It will guide the customer on each level of configuration and how to enable/disable features.
+This demo will show you how to configure GitHub Copilot for your enterprise and organization. It will guide the customer on each level of configuration and how to enable/disable features.
-## GitHub Settings
+## GitHub Settings
### Enterprise Settings
-#### Access and Policies
+#### Enterprise Access Management
-- Show Suggestions matching public code
-- Notification on matching code
-- Manage organization access to GitHub Copilot
+Show the following options:
-#### Beta Features
+- Total seats assigned and a monthly cost and a link to view billing details
+ - **Action Item:** Click link `View billing` and showcase how it looks in your enterprise.
+- Copilot Enterprise is active in your enterprise options
+ - Disabled
+ - Allow for all organizations
+ - Allow for specific organizations
-- GitHub Copilot Chat IDE
-- GitHub Copilot in the CLI
+#### Enterprise Policies and Features
+
+Show the following options:
+
+- Suggestions matching public code
+- Copilot in github.com
+ - Give Copilot access to Bing **Beta**
+ - Opt in to user feedback collection
+- Copilot Chat in the IDE
+- Copilot Chat in GitHub Mobile
+- Copilot in the CLI
### Organization Settings
-#### Access
+#### Manage & Control Access
-- Number of copilot seats
-- Estimated monthly cost
+- Number of copilot seats
+- Estimated monthly cost
- View billing details
-- Policy for enabled members
+- Policy for enabled members
- Access management
- **Action Item:** Download report and showcase how it looks in your organization.
-#### Policies and Features
+#### Organization Policies
+
+Show the following options:
+
+- Suggestions matching public code
+- Copilot in github.com
+ - Give Copilot access to Bing **Beta**
+ - Opt in to user feedback collection
+- Copilot Chat in the IDE
+- Copilot Chat in GitHub Mobile
+- Copilot in the CLI
+
+#### Organization Features
+
+##### Knowledge Bases
+
+- Review creating a Knowledge Base
+ - Adding a knowledge base path inclusion
+
+![Knowledge Base Creation](../docs/images/copilot-manage-knowledge-bases1-dark.gif)
-- Suggestions matching public code
-- Notifications on matching code
-- Beta Features
- - GitHub Copilot Chat for IDE
- - GitHub Copilot in the CLI
+![Knowledge Base Include Paths](../docs/images/copilot-manage-knowledge-bases2-dark.gif)
+
+##### Content Exclusion
+
+- Review creating a Content Exclusion
+ - Adding repository and path to files to exclude
+
+![Content Exclusion adding repositories and paths to exclude](../docs/images/copilot-content-exclusion-organization-dark.gif)
## Client Side Settings
### Network Settings
+- Proxy Settings
+ - **Action Item:** Show how to configure proxy settings in the IDE
+- Authentication Modes
+ - **Action Item:** Show how authentication modes work with GitHub Copilot
+
### Firewall Settings
-## IDE Settings
+- Show the URLs to add to an allowlist
+
+## IDE Advanced Settings
+
+### Supported IDEs
+
+- Visual Studio Code
+- Visual Studio
+- IntelliJ IDEA
+- Vim/Neovim
+- Azure Data Studio
+
+### Enable non-programming Meta Files
+
+- **Action Item:** Show how to enable/disable non-programming meta files in the IDE
### VSCode
GitHub Copilot Extension and click on it -> Click the gear icon -> Click on Extension Settings -> Click on the blue Edit in settings.json button
-### IntelliJ
+### IntelliJ IDEA
Go to Settings -> Language and Framework -> GitHub Copilot -> Update advanced settings in this view
diff --git a/Demo2-Telemetry/GitHub-Copilot-API-Demo.md b/Demo2-Telemetry/GitHub-Copilot-API-Demo.md
index a818499..954010f 100644
--- a/Demo2-Telemetry/GitHub-Copilot-API-Demo.md
+++ b/Demo2-Telemetry/GitHub-Copilot-API-Demo.md
@@ -18,23 +18,29 @@ Update "TOKEN" under the Authentication tab with the token you created in the [C
![postman token update](../docs/images/Telemetry/postman-update-token.png)
-Update the variables "ORG" and "USERNAME" under the Variables tab with your organization name and your GitHub username you want to view.
+Update the variables "ORG" and "USERNAME" under the Variables tab with your organization name and your GitHub username you want to view. "ENTERPRISE" if you want to view usage for an enterprise account.
![postman variable update](../docs/images/Telemetry/postman-update-variables.png)
-### Step 2: Demo the Copilot REST API _Get Org Seat Information_
+### Step 2: Demo the Copilot REST API _Get Org Usage Information_
+
+Double click on "Get Org Usage Information" to open the request. Click "Send" to send the request.
+
+![Get Org Usage Information](../docs/images/Telemetry/get-org-usage-information.png)
+
+### Step 3: Demo the Copilot REST API _Get Org Seat Information_
Double click on "Get Org Seat Information" to open the request. Click "Send" to send the request.
![Get Org Seat Information](../docs/images/Telemetry/get-org-seat-information.png)
-### Step 3: Demo the Copilot REST API _List Org Seat Assignments_
+### Step 4: Demo the Copilot REST API _List Org Seat Assignments_
Double click on "List Org Seat Assignments" to open the request. Click "Send" to send the request.
![List Org Seat Assignments](../docs/images/Telemetry/list-org-seat-assignments.png)
-### Step 4: Demo the Copilot REST API _Get Seat for a User_
+### Step 5: Demo the Copilot REST API _Get Seat for a User_
Double click on "Get Seat for a User" to open the request. Click "Send" to send the request.
diff --git a/Demo2-Telemetry/README.md b/Demo2-Telemetry/README.md
index adb3726..2babc44 100644
--- a/Demo2-Telemetry/README.md
+++ b/Demo2-Telemetry/README.md
@@ -6,8 +6,7 @@ Step One: [Setup Postman](postman-setup-info/postman-collection-setup.md)
Step Two: [Demo Copilot API](GitHub-Copilot-API-Demo.md)
-
-### Collections
+### Collections
- [GitHub v3 REST APIs](postman-setup-info/GitHub-v3-REST-API.postman_collection.json)
- [GitHub Copilot REST APIs](postman-setup-info/GitHubCopilotAPI.postman_collection.json)
diff --git a/Demo2-Telemetry/postman-setup-info/GitHubCopilotAPI.postman_collection.json b/Demo2-Telemetry/postman-setup-info/GitHubCopilotAPI.postman_collection.json
index 52d03e3..60d4da6 100644
--- a/Demo2-Telemetry/postman-setup-info/GitHubCopilotAPI.postman_collection.json
+++ b/Demo2-Telemetry/postman-setup-info/GitHubCopilotAPI.postman_collection.json
@@ -1,12 +1,51 @@
{
"info": {
- "_postman_id": "ac350d03-c04a-497e-8c3d-48cda67500d8",
+ "_postman_id": "ff194d7e-adf0-4ee2-9fae-07223e43812a",
"name": "GitHub Copilot API",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
- "_exporter_id": "23948556",
- "_collection_link": "https://warped-resonance-718170.postman.co/workspace/New-Team-Workspace~8b7cd40b-aab9-4298-b6e3-921cbe93bba4/collection/23948556-ac350d03-c04a-497e-8c3d-48cda67500d8?action=share&source=collection_link&creator=23948556"
+ "_exporter_id": "17175297"
},
"item": [
+ {
+ "name": "Get Org Usage",
+ "request": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "{{url}}/orgs/{{org}}/copilot/usage",
+ "host": [
+ "{{url}}"
+ ],
+ "path": [
+ "orgs",
+ "{{org}}",
+ "copilot",
+ "usage"
+ ]
+ }
+ },
+ "response": []
+ },
+ {
+ "name": "Get Enterprise Usage",
+ "request": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "{{url}}/enterprises/{{enterprise}}/copilot/usage",
+ "host": [
+ "{{url}}"
+ ],
+ "path": [
+ "enterprises",
+ "{{enterprise}}",
+ "copilot",
+ "usage"
+ ]
+ }
+ },
+ "response": []
+ },
{
"name": "Get Org Seat Information",
"request": {
@@ -203,7 +242,7 @@
"variable": [
{
"key": "org",
- "value": "ORGNAME",
+ "value": "ORG",
"type": "string"
},
{
@@ -215,6 +254,11 @@
"key": "username",
"value": "USERNAME",
"type": "string"
+ },
+ {
+ "key": "enterprise",
+ "value": "ENTERPRISE",
+ "type": "string"
}
]
}
\ No newline at end of file
diff --git a/Demo3-Data-Privacy/README.md b/Demo3-Data-Privacy/README.md
deleted file mode 100644
index 051039a..0000000
--- a/Demo3-Data-Privacy/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Copilot Administration & Security - Demo: Data Privacy
-
-## Overview
\ No newline at end of file
diff --git a/Demo5-Integrations/README.md b/Demo3-Integrations/README.md
similarity index 100%
rename from Demo5-Integrations/README.md
rename to Demo3-Integrations/README.md
diff --git a/Demo4-Troubleshooting/README.log b/Demo4-Troubleshooting/README.log
deleted file mode 100644
index 4287ca8..0000000
--- a/Demo4-Troubleshooting/README.log
+++ /dev/null
@@ -1 +0,0 @@
-#
\ No newline at end of file
diff --git a/Demo4-Troubleshooting/visual-studio-code-logs.md b/Demo4-Troubleshooting/README.md
similarity index 100%
rename from Demo4-Troubleshooting/visual-studio-code-logs.md
rename to Demo4-Troubleshooting/README.md
diff --git a/Demo5-Data-Privacy/README.md b/Demo5-Data-Privacy/README.md
new file mode 100644
index 0000000..80aad56
--- /dev/null
+++ b/Demo5-Data-Privacy/README.md
@@ -0,0 +1,5 @@
+# Copilot Administration & Security - Demo: Data Privacy
+
+## [Copilot Transcripts](copilot-transcript-sql.md)
+
+## [Vulnerable Patterns in Incomplete Code Fragments](vulnerable_patterns_in_incomplete_fragments_of_code.md)
diff --git a/Demo3-Data-Privacy/copilot-transcript-sql.md b/Demo5-Data-Privacy/copilot-transcript-sql.md
similarity index 96%
rename from Demo3-Data-Privacy/copilot-transcript-sql.md
rename to Demo5-Data-Privacy/copilot-transcript-sql.md
index f3f9591..6dfc27f 100644
--- a/Demo3-Data-Privacy/copilot-transcript-sql.md
+++ b/Demo5-Data-Privacy/copilot-transcript-sql.md
@@ -101,7 +101,7 @@ whats the difference, interms of security, between an SQL Statement and a Prepar
In terms of security, there are a few key differences between a SQL statement and a prepared statement:
- 1. SQL Injection Protection: Prepared statements provide built-in protection against SQL injection attacks. With a prepared statement, the SQL query is precompiled and the query parameters are treated as separate entities, preventing malicious input from altering the structure of the query. This helps to mitigate the risk of SQL injection vulnerabilities.
+1. SQL Injection Protection: Prepared statements provide built-in protection against SQL injection attacks. With a prepared statement, the SQL query is precompiled and the query parameters are treated as separate entities, preventing malicious input from altering the structure of the query. This helps to mitigate the risk of SQL injection vulnerabilities.
2. Parameterized Queries: Prepared statements use parameterized queries, where the query parameters are represented by placeholders in the SQL statement. The actual parameter values are then bound to these placeholders at runtime. This separation of the query logic from the data values helps to ensure that user input is properly sanitized and prevents unauthorized access to the underlying database.
@@ -142,4 +142,3 @@ Securing a Java application that interacts with a database involves implementing
1. Regularly Perform Security Audits and Penetration Testing: Conduct regular security audits and penetration testing to identify and address any vulnerabilities in your application and database configuration. This helps ensure that your security measures are effective and up to date.
Remember that security is an ongoing process, and it's important to stay informed about the latest security best practices and vulnerabilities relevant to your specific database technology and application stack.
-
diff --git a/Demo3-Data-Privacy/vulnerable_patterns_in_incomplete_fragments_of_code.md b/Demo5-Data-Privacy/vulnerable_patterns_in_incomplete_fragments_of_code.md
similarity index 70%
rename from Demo3-Data-Privacy/vulnerable_patterns_in_incomplete_fragments_of_code.md
rename to Demo5-Data-Privacy/vulnerable_patterns_in_incomplete_fragments_of_code.md
index b4728d2..ad4fcd3 100644
--- a/Demo3-Data-Privacy/vulnerable_patterns_in_incomplete_fragments_of_code.md
+++ b/Demo5-Data-Privacy/vulnerable_patterns_in_incomplete_fragments_of_code.md
@@ -2,25 +2,23 @@
![abelberhane](../docs/images/abelberhane.png)
-Examples by [@abelberhane](https://www.github.com/abelberhane)
+Examples by [@abelberhane](https://www.github.com/abelberhane)
---
+
+## SQL Injection Vulnerability
-
-
-# SQL Injection Vulnerability
-
-## Incomplete Code Fragment (Python)
+### Incomplete Code Fragment (Python) #1
```python
def get_user_data(user_id): query = "SELECT * FROM users WHERE id = " + user_id # ... database query execution
```
-### Copilot's Contribution
+#### Copilot's Contribution #1
>Copilot can recognize that concatenating a variable directly into a SQL query string is a common pattern leading to SQL injection vulnerabilities. It might suggest a modification using parameterized queries or ORM (Object-Relational Mapping) methods to prevent such issues.
-### Suggested Code
+#### Suggested Code #1
```python
def get_user_data(user_id): query = "SELECT * FROM users WHERE id = %s" params = (user_id,) # ... database query execution with parameters...
@@ -28,21 +26,19 @@ def get_user_data(user_id): query = "SELECT * FROM users WHERE id = %s" params =
---
-
-
-# Cross-Site Scripting (XSS) in Web Applications
+## Cross-Site Scripting (XSS) in Web Applications
-## Incomplete Code Fragment (JavaScript)
+### Incomplete Code Fragment (JavaScript) #2
```javascript
app.get('/search', function(req, res) { var searchTerm = req.query.term; res.send('Results for: ' + searchTerm); });
```
-### Copilot's Contribution
+#### Copilot's Contribution #2
>Recognizing the pattern of directly including user input in the response, Copilot might suggest sanitizing the input or encoding the output to prevent XSS attacks.
-### Suggested Code
+#### Suggested Code #2
```javascript
app.get('/search', function(req, res) { var searchTerm = escape(req.query.term); res.send('Results for: ' + searchTerm); });
@@ -50,21 +46,19 @@ app.get('/search', function(req, res) { var searchTerm = escape(req.query.term);
---
-
+## Insecure Password Storage
-# Insecure Password Storage
-
-## Incomplete Code Fragment (JavaScript)
+### Incomplete Code Fragment (JavaScript) #3
```javascript
function storeUser(username, password) { // Code to store username and password directly in the database }
```
-### Copilot's Contribution
+#### Copilot's Contribution #3
>Identifying the pattern of insecure password handling, Copilot could suggest implementing hashing with a strong algorithm like bcrypt before storing passwords.
-### Suggested Code
+#### Suggested Code #3
```javascript
const bcrypt = require('bcrypt'); function storeUser(username, password) { const salt = bcrypt.genSaltSync(10); const hash = bcrypt.hashSync(password, salt); // Code to store username and hashed password in the database }
@@ -72,21 +66,19 @@ const bcrypt = require('bcrypt'); function storeUser(username, password) { const
---
-
-
-# Inadequate Encryption Use
+## Inadequate Encryption Use
-## Incomplete Code Fragment (Python)
+### Incomplete Code Fragment (Python) #4
```python
from Crypto.Cipher import AES import os def encrypt_message(message): key = os.urandom(16) # 16-byte key cipher = AES.new(key, AES.MODE_ECB) # ...
```
-## Copilot's Contribution:
+#### Copilot's Contribution Python #4
>In this case, Copilot might highlight the use of ECB mode, which is generally considered insecure for encryption, and suggest using a more secure mode like CBC or GCM.
-## Suggested Code:
+#### Suggested Code Python #4
```python
from Crypto.Cipher import AES import os def encrypt_message(message): key = os.urandom(16) # 16-byte key cipher = AES.new(key, AES.MODE_CBC, iv) # ...
diff --git a/README.md b/README.md
index 8c2c611..9a76da7 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,16 @@
-![copilot-logo-medium](https://github.com/copilot-training-pex/copilot-administration-security/assets/863198/33082dfb-d2f7-46ed-b86d-b72ba9d11437)
-# Copilot Administration & Security - Training Demo Material
+# ![copilot logo](/docs/images/copilot-icon-s.png) Copilot Administration & Security - Training Demo Material
Complementary course material for the Copilot Administration & Security training (L200)
+
+## [Demos](Demo1/Policies-Settings/README.md)
+
+### Enterprise and Organization Policies, Settings, and Features
+
+### [Telemetry](Demo2-Telemetry/README.md)
+
+### [Integrations](Demo3-Integrations/README.md)
+
+### [Troubleshooting](Demo4-Troubleshooting/README.md)
+
+### [Data Privacy](Demo5-Data-Privacy/README.md)
\ No newline at end of file
diff --git a/docs/images/Telemetry/get-org-usage-information.png b/docs/images/Telemetry/get-org-usage-information.png
new file mode 100644
index 0000000..80b6c0f
Binary files /dev/null and b/docs/images/Telemetry/get-org-usage-information.png differ
diff --git a/docs/images/copilot-content-exclusion-organization-dark.gif b/docs/images/copilot-content-exclusion-organization-dark.gif
new file mode 100644
index 0000000..3ad63c8
Binary files /dev/null and b/docs/images/copilot-content-exclusion-organization-dark.gif differ
diff --git a/docs/images/copilot-manage-knowledge-bases1-dark.gif b/docs/images/copilot-manage-knowledge-bases1-dark.gif
new file mode 100644
index 0000000..967851e
Binary files /dev/null and b/docs/images/copilot-manage-knowledge-bases1-dark.gif differ
diff --git a/docs/images/copilot-manage-knowledge-bases2-dark.gif b/docs/images/copilot-manage-knowledge-bases2-dark.gif
new file mode 100644
index 0000000..349eb71
Binary files /dev/null and b/docs/images/copilot-manage-knowledge-bases2-dark.gif differ
diff --git a/docs/images/postman-collection-set-variables.png b/docs/images/postman-collection-set-variables.png
index 8507e28..6b54545 100644
Binary files a/docs/images/postman-collection-set-variables.png and b/docs/images/postman-collection-set-variables.png differ