|
@@ -1893,94 +1893,70 @@ namespace TEAMModelOS.Controllers
|
|
|
//參數取得
|
|
|
if (!request.TryGetProperty("school_code", out JsonElement school_code)) return BadRequest();
|
|
|
if (!request.TryGetProperty("id", out JsonElement id)) return BadRequest();
|
|
|
- if (!request.TryGetProperty("pw", out JsonElement pw)) return BadRequest();
|
|
|
+ if (!request.TryGetProperty("pw", out JsonElement pw)) return BadRequest();
|
|
|
|
|
|
- int error = 0;
|
|
|
- string auth_token = "";
|
|
|
- string blob_uri = string.Empty;
|
|
|
- string blob_sas = string.Empty;
|
|
|
- dynamic classinfo = new ExpandoObject();
|
|
|
- bool classExistFlg = false;
|
|
|
- List<object> courses = new List<object>();
|
|
|
-
|
|
|
- var response = await client.GetContainer("TEAMModelOS", "Student").ReadItemStreamAsync(id.GetString(), new PartitionKey($"Base-{school_code.ToString().ToLower()}"));
|
|
|
+ var response = await client.GetContainer("TEAMModelOS", "Student").ReadItemStreamAsync(id.GetString(), new PartitionKey($"Base-{school_code.GetString().ToLower()}"));
|
|
|
if (response.Status == 200)
|
|
|
{
|
|
|
- var json = await JsonDocument.ParseAsync(response.ContentStream);
|
|
|
- json.RootElement.TryGetProperty("salt", out JsonElement salt);
|
|
|
- json.RootElement.TryGetProperty("pw", out JsonElement dbpw);
|
|
|
- json.RootElement.TryGetProperty("name", out JsonElement name);
|
|
|
- json.RootElement.TryGetProperty("picture", out JsonElement picture);
|
|
|
+ var rjson = await JsonDocument.ParseAsync(response.ContentStream);
|
|
|
+ rjson.RootElement.TryGetProperty("salt", out JsonElement salt);
|
|
|
+ rjson.RootElement.TryGetProperty("pw", out JsonElement dbpw);
|
|
|
+ rjson.RootElement.TryGetProperty("name", out JsonElement name);
|
|
|
+ rjson.RootElement.TryGetProperty("picture", out JsonElement picture);
|
|
|
|
|
|
var HashedPW = Utils.HashedPassword(pw.ToString(), salt.ToString());
|
|
|
- if (dbpw.ToString().Equals(HashedPW.ToString()))
|
|
|
+ if (HashedPW.Equals(dbpw.GetString()))
|
|
|
{
|
|
|
- //BLOB(學校,唯讀)
|
|
|
- string school_code_blob = school_code.GetString().ToLower();
|
|
|
- string blobPath = $"{school_code_blob}/student/{id}";
|
|
|
- (blob_uri, blob_sas) = _azureStorage.GetBlobContainerSAS(blobPath, BlobContainerSasPermissions.Read);
|
|
|
- //所屬班級資訊
|
|
|
+ string classid = string.Empty;
|
|
|
+ object classinfo = null;
|
|
|
+ List<object> courses = new List<object>();
|
|
|
+ //去學校找出所屬校本預設班級信息
|
|
|
var query = $"SELECT c.code, c.id, c.name, c.periodId, c.gradeId FROM c JOIN cs IN c.students WHERE cs.id = '{id}'";
|
|
|
- await foreach (var item in client.GetContainer("TEAMModelOS", "School").GetItemQueryStreamIterator(queryText: query, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Class-{school_code}") }))
|
|
|
+ var school = client.GetContainer("TEAMModelOS", "School");
|
|
|
+ await foreach (var item in school.GetItemQueryStreamIterator(queryText: query, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Class-{school_code}") }))
|
|
|
{
|
|
|
- var jsoncm = await JsonDocument.ParseAsync(item.ContentStream);
|
|
|
- if (jsoncm.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
|
|
|
+ using var json = await JsonDocument.ParseAsync(item.ContentStream);
|
|
|
+ if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
|
|
|
{
|
|
|
- foreach (var obj in jsoncm.RootElement.GetProperty("Documents").EnumerateArray())
|
|
|
+ foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
|
|
|
{
|
|
|
- classinfo = obj.ToObject<object>();
|
|
|
- classExistFlg = true;
|
|
|
+ classid = obj.GetProperty("id").GetString();
|
|
|
+ classinfo = obj.ToObject<object>();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- //換取AuthToken,提供給前端
|
|
|
- auth_token = JwtAuthExtension.CreateAuthToken(_option.HostName, id.GetString(), name.GetString(), picture.GetString(), _option.JwtSecretKey, schoolID: school_code.GetString(), roles: new[] { "student" });
|
|
|
-
|
|
|
- //所屬班級的課程列表
|
|
|
- if (classExistFlg)
|
|
|
+ //找出所屬班級的課程列表
|
|
|
+ var queryc = $"SELECT VALUE cc.course FROM c JOIN cc IN c.courses WHERE c.id = '{classid}'";
|
|
|
+ await foreach (var item in school.GetItemQueryStreamIterator(queryText: queryc, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"CourseManagement-{school_code}") }))
|
|
|
{
|
|
|
- string classId = classinfo.GetProperty("id").ToString();
|
|
|
- var queryc = $"SELECT VALUE cc.course FROM c JOIN cc IN c.courses WHERE c.id = '{classId}'";
|
|
|
- await foreach (var item in client.GetContainer("TEAMModelOS", "School").GetItemQueryStreamIterator(queryText: queryc, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"CourseManagement-{school_code}") }))
|
|
|
+ using var json = await JsonDocument.ParseAsync(item.ContentStream);
|
|
|
+ if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
|
|
|
{
|
|
|
- using var jsoncm = await JsonDocument.ParseAsync(item.ContentStream);
|
|
|
- if (jsoncm.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
|
|
|
+ foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
|
|
|
{
|
|
|
- foreach (var obj in jsoncm.RootElement.GetProperty("Documents").EnumerateArray())
|
|
|
- {
|
|
|
- courses.Add(obj.ToObject<object>());
|
|
|
- }
|
|
|
+ courses.Add(obj.ToObject<object>());
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- else
|
|
|
- {
|
|
|
- classinfo = null;
|
|
|
- }
|
|
|
+ // BLOB(學校,唯讀)
|
|
|
+ var (blob_uri, blob_sas) = _azureStorage.GetBlobContainerSAS(school_code.GetString().ToLower(), BlobContainerSasPermissions.Read);
|
|
|
+ //換取AuthToken,提供給前端
|
|
|
+ var auth_token = JwtAuthExtension.CreateAuthToken(_option.HostName, id.GetString(), name.GetString(), picture.GetString(), _option.JwtSecretKey, schoolID: school_code.GetString(), roles: new[] { "student" });
|
|
|
+ return Ok(new { auth_token, blob_uri, blob_sas, classinfo, courses });
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- error = 1;
|
|
|
+ return Ok(new { error = 1, message = "账号或密码错误" });
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- error = 1;
|
|
|
- }
|
|
|
-
|
|
|
- if (error > 0)
|
|
|
- {
|
|
|
- return Ok(new { error, message = "账号或密码错误" });
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- return Ok(new { error, auth_token, blob_uri, blob_sas, classinfo, courses });
|
|
|
- }
|
|
|
+ return Ok(new { error = 2, message = "無此帳號存在" });
|
|
|
+ }
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
- await _dingDing.SendBotMsg($"student/login,{_option.Location},hiteach/GetTeacherInfo()\n{ex.Message}", GroupNames.醍摩豆服務運維群組);
|
|
|
+ await _dingDing.SendBotMsg($"IES5,{_option.Location},student/login()\n{ex.Message}", GroupNames.醍摩豆服務運維群組);
|
|
|
return BadRequest();
|
|
|
}
|
|
|
}
|